AXForum  
Вернуться   AXForum > Microsoft Dynamics CRM > Dynamics CRM: Разработка
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 02.04.2014, 17:47   #1  
Lavdislav is offline
Lavdislav
Участник
 
34 / 10 (1) +
Регистрация: 28.02.2014
При создании генерировать идентификатор
Добрый день!

При создании Evaluating Object нужно чтобы наверху вместо Information, было название Object'a, так как после создания, если я поменяю Object на другой, то всё появляется, но мне вот нужно именно при создании. Ниже даю код плагина, делаю всё это на Post-operation, Create и Update.
Код:
public class EvalObjectsAIU : IPlugin
    {
        public void Execute(IServiceProvider serviceProvider)
        {
            var process = new EvalObjectsAIUProcess(serviceProvider);
            process.LoadEntity();
            if (!process.ValidateEntityName("bf_evaluatingobject")) return;
            if (!process.ValidateMessage(MessageName.Update)) return;
            process.Run();
        }
    }

    class EvalObjectsAIUProcess : bf_PluginProcess
    {
        public override void Execute()
        {
            if (TargetEntity.Contains("regardingobjectid"))
            {
                string uniq = "";

                int uniqLength = 1024;

                Entity record = crmService.Retrieve(TargetEntity.LogicalName, TargetEntity.Id, new ColumnSet("subject", "regardingobjectid"));

                if (record.Contains("regardingobjectid"))
                {
                    uniq = record.GetAttributeValue<EntityReference>("regardingobjectid").Name;

                    RetrieveEntityRequest rerq = new RetrieveEntityRequest
                    {
                        LogicalName = record.GetAttributeValue<EntityReference>("regardingobjectid").LogicalName,
                        RetrieveAsIfPublished = true
                    };

                    RetrieveEntityResponse rers = (RetrieveEntityResponse)crmService.Execute(rerq);

                    uniq = rers.EntityMetadata.DisplayName.UserLocalizedLabel.Label + " " + "[" + uniq + "]";
                }

                if (!record.Contains("subject") || record["subject"].ToString() != uniq)
                {
                    uniq = string.Format("{0}", uniq.Length > uniqLength ? (uniq.Substring(0, uniqLength - 3) + "...") : uniq);
                    record["subject"] = uniq;
                    crmService.Update(record);
                }
            }
Так же прикрепил картинки.
Миниатюры
Нажмите на изображение для увеличения
Название: create.jpg
Просмотров: 199
Размер:	159.2 Кб
ID:	8811   Нажмите на изображение для увеличения
Название: update.jpg
Просмотров: 293
Размер:	168.1 Кб
ID:	8812  

Старый 02.04.2014, 23:35   #2  
maksii is offline
maksii
Участник
 
15 / 16 (1) ++
Регистрация: 02.04.2014
Адрес: Харьков
Пробовали поменять степ на Pre-operation Create? Должно решить проблему.
Старый 03.04.2014, 09:24   #3  
Lavdislav is offline
Lavdislav
Участник
 
34 / 10 (1) +
Регистрация: 28.02.2014
Цитата:
Сообщение от maksii Посмотреть сообщение
Пробовали поменять степ на Pre-operation Create? Должно решить проблему.
Да я пробывал, но тогда выдаёт Error: bf_evaluatingobject with id does not exist, прикрепляю errorlog
Вложения
Тип файла: txt ErrorDetails.txt (3.1 Кб, 196 просмотров)
Старый 03.04.2014, 13:05   #4  
maksii is offline
maksii
Участник
 
15 / 16 (1) ++
Регистрация: 02.04.2014
Адрес: Харьков
Честно говоря я немного не понимаю вашу оббертку стандартного функционала
Что у вас в bf_PluginProcess, какую энтити используете и тд.
Если вы используете Pre-Image на Pre-Create, то его там нет

На чистом сдк должно работать вот так:

public void Execute(IServiceProvider serviceProvider)
{
IPluginExecutionContext context = (IPluginExecutionContext)
serviceProvider.GetService(typeof(IPluginExecutionContext));

Entity yourEntityName= (Entity)context.InputParameters["Target"]

if(yourEntityName.Attributes.Contains("subject"))
yourEntityName.Attributes["subject"] = yourEntityName.GetAttributeValue<EntityReference>["regardingobjectid"].Name;
}

Ошибка у вас из-за того, что на данный момент вызова Update еще не был создан данный рекорд. На пре стейдже не нужно использовать Update, так как на этом этапе еще не произошли манипуляции и транзакции в базу. Вы имитируете добавления поля, как буд-то его добавил пользователь, а не вы.
Старый 03.04.2014, 15:41   #5  
Lavdislav is offline
Lavdislav
Участник
 
34 / 10 (1) +
Регистрация: 28.02.2014
Цитата:
Сообщение от maksii Посмотреть сообщение
Честно говоря я немного не понимаю вашу оббертку стандартного функционала
Что у вас в bf_PluginProcess, какую энтити используете и тд.
Если вы используете Pre-Image на Pre-Create, то его там нет

На чистом сдк должно работать вот так:

public void Execute(IServiceProvider serviceProvider)
{
IPluginExecutionContext context = (IPluginExecutionContext)
serviceProvider.GetService(typeof(IPluginExecutionContext));

Entity yourEntityName= (Entity)context.InputParameters["Target"]

if(yourEntityName.Attributes.Contains("subject"))
yourEntityName.Attributes["subject"] = yourEntityName.GetAttributeValue<EntityReference>["regardingobjectid"].Name;
}

Ошибка у вас из-за того, что на данный момент вызова Update еще не был создан данный рекорд. На пре стейдже не нужно использовать Update, так как на этом этапе еще не произошли манипуляции и транзакции в базу. Вы имитируете добавления поля, как буд-то его добавил пользователь, а не вы.
Довольно таки интерестно, но скажу сразу, я ещё новичок. Создал новый класс.
Вот код:
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xrm.Sdk;
using Bum.Survey.CRM.Plugin.BaseLib;

namespace Bum.Survey.CRM.Plugin
{
    public class EvalObjectCreateTest : IPlugin
    {
        public void Execute(IServiceProvider serviceProvider)
        {
            var process = new EvalObjectCreateTestProcess(serviceProvider);
            process.LoadEntity();
            if (!process.ValidateEntityName("bf_evaluatingobject")) return;
            if (!process.ValidateMessage(MessageName.Create, MessageName.Update)) return;
            process.Run();
        }
    }

    class EvalObjectCreateTestProcess : bf_PluginProcess
    {
        public override void Execute()
        {
            IPluginExecutionContext context = (IPluginExecutionContext)
            serviceProvider.GetService(typeof(IPluginExecutionContext));

            Entity yourEntityName = (Entity)context.InputParameters["Target"];

            if(yourEntityName.Attributes.Contains("subject"))
            yourEntityName.Attributes["subject"] = yourEntityName.GetAttributeValue<EntityReference>("regardingobjectid").Name;
            
        }

        public EvalObjectCreateTestProcess(IServiceProvider serviceProvider)
            : base(serviceProvider)
        {
        }
    }
}
Само собой пока ничего не работает, кстати, вот содержимое bf_pluginProcess:
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xrm.Sdk.Messages;
using Microsoft.Xrm.Sdk.Metadata;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Query;

namespace Bum.Survey.CRM.Plugin.BaseLib
{
    public static class MessageName
    {
        public const string Create = "Create";
        public const string Update = "Update";
        public const string Delete = "Delete";
        public const string RetrieveMultiple = "RetrieveMultiple";
        public const string Retrieve = "Retrieve";
    }

    public static class ParameterName
    {
        public const string Target = "Target";
        public const string id = "id";
        public const string Query = "Query";
        public const string BusinessEntityCollection = "BusinessEntityCollection";
        public const string BusinessEntity = "BusinessEntity";
    }

    public class bf_PluginError : Exception
    {
        public bf_PluginError(string message)
            : base(message)
        {
        }
    }

    public abstract class bf_PluginProcess
    {
        IServiceProvider _serviceProvider;
        public IServiceProvider serviceProvider
        {
            get { return _serviceProvider; }
        }

        IPluginExecutionContext _executionContext;
        public IPluginExecutionContext executionContext
        {
            get
            {
                if (_executionContext == null)
                    _executionContext = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
                return _executionContext;
            }
        }

        IOrganizationServiceFactory _serviceFactory;
        public IOrganizationServiceFactory serviceFactory
        {
            get
            {
                if (_serviceFactory == null)
                    _serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
                return _serviceFactory;
            }
        }

        IOrganizationService _crmService;
        public IOrganizationService crmService
        {
            get
            {
                if (_crmService == null)
                    _crmService = serviceFactory.CreateOrganizationService(executionContext.UserId);
                return _crmService;
            }
        }

        ITracingService _tracingService;
        public ITracingService tracingService
        {
            get
            {
                if (_tracingService == null)
                    _tracingService = (ITracingService)serviceProvider.GetService(typeof(ITracingService));
                return _tracingService;
            }
        }

        public bf_PluginProcess(IServiceProvider serviceProvider)
        {
            _serviceProvider = serviceProvider;
        }

        Entity _entity;
        public Entity TargetEntity
        {
            get
            {
                return _entity;
            }
        }

        EntityReference _entity_key;
        public EntityReference TargetKey
        {
            get { return _entity_key; }
        }

        public void LoadEntity()
        {
            if (executionContext.InputParameters.Contains(ParameterName.Target))
            {
                if (executionContext.InputParameters[ParameterName.Target] is Entity)
                {
                    _entity = (Entity)executionContext.InputParameters[ParameterName.Target];
                    _entity_key = new EntityReference(_entity.LogicalName, _entity.Id);
                }
                else if (executionContext.InputParameters[ParameterName.Target] is EntityReference)
                {
                    _entity_key = (EntityReference)executionContext.InputParameters[ParameterName.Target];
                }
            }
            if (executionContext.MessageName == MessageName.Create)
            {
                if (executionContext.OutputParameters.Contains(ParameterName.id))
                    _entity_key.Id = (Guid)executionContext.OutputParameters[ParameterName.id];
            }
        }

        public void RequeryTarget()
        {
            RequeryTarget(new ColumnSet(true));
        }

        public void RequeryTarget(ColumnSet columnSet)
        {
            _entity = crmService.Retrieve(TargetKey.LogicalName, TargetKey.Id, columnSet);
        }

        public bool ValidateEntityName(string logicalName)
        {
            return _entity_key.LogicalName == logicalName;
        }

        public bool ValidateMessage(params string[] messages)
        {
            return messages.Contains(executionContext.MessageName);
        }

        abstract public void Execute();

        public void Run()
        {
            try
            {
                Execute();
            }
            catch (System.Exception ex)
            {
                throw new InvalidPluginExecutionException(
                    String.Format("An error occurred in the {0} plug-in: {1}", this.GetType().ToString(), ex.ToString()), ex);
            }
        }

        public Dictionary<int, string> GetOptionSet(string entityName, string optionSetName)
        {
            RetrieveAttributeRequest req = new RetrieveAttributeRequest();
            req.EntityLogicalName = entityName;
            req.LogicalName = optionSetName;
            RetrieveAttributeResponse res = (RetrieveAttributeResponse)_crmService.Execute(req);


            Dictionary<int, string> result = new Dictionary<int, string>();

            foreach (var r in ((PicklistAttributeMetadata)res.AttributeMetadata).OptionSet.Options)
            {
                result.Add(r.Value.Value, r.Label.UserLocalizedLabel.Label);
            }
            return result;
        }
    }

    public static class DateTimeExt
    {
        public static string ConvertToCulturalString(this DateTime dt)
        {
            return dt.ToLocalTime().ToString("dd.MM.yyyy");
        }
    }
}
Старый 03.04.2014, 16:34   #6  
maksii is offline
maksii
Участник
 
15 / 16 (1) ++
Регистрация: 02.04.2014
Адрес: Харьков
Для уточнения, вы поменяли степ на Pre и скопипастили мой код?
Старый 03.04.2014, 16:37   #7  
maksii is offline
maksii
Участник
 
15 / 16 (1) ++
Регистрация: 02.04.2014
Адрес: Харьков
Я сомневаюсь, что мой код будет работать, хотя вроде должен.

Ну а так, если я правильно понял:
Было:
Код:
if (!record.Contains("subject") || record["subject"].ToString() != uniq)
                {
                    uniq = string.Format("{0}", uniq.Length > uniqLength ? (uniq.Substring(0, uniqLength - 3) + "...") : uniq);
                    record["subject"] = uniq;
                    crmService.Update(record);
                }
Стало:

Код:
if (!record.Contains("subject") || record["subject"].ToString() != uniq)
                {
                    uniq = string.Format("{0}", uniq.Length > uniqLength ? (uniq.Substring(0, uniqLength - 3) + "...") : uniq);
                    record["subject"] = uniq;
                    if(executionContext.MessageName == MessageName.Update) 
                     {
                    crmService.Update(record);
                    }
                }
Ну и мой код должен выглядить как-то так, исходя из вашего класса:

Код:
            Entity yourEntityName = (Entity)executionContext.InputParameters["Target"];

            if(yourEntityName.Attributes.Contains("subject"))
            yourEntityName.Attributes["subject"] = yourEntityName.GetAttributeValue<EntityReference>("regardingobjectid").Name;
                    if(executionContext.MessageName == MessageName.Update) 
                    {
                    crmService.Update(yourEntityName );
                    }
Я только сомневаюсь, что у EntityReference имя референса называется Name
Старый 03.04.2014, 17:01   #8  
Lavdislav is offline
Lavdislav
Участник
 
34 / 10 (1) +
Регистрация: 28.02.2014
Цитата:
Сообщение от maksii Посмотреть сообщение
Я сомневаюсь, что мой код будет работать, хотя вроде должен.

Ну а так, если я правильно понял:
Было:
Код:
if (!record.Contains("subject") || record["subject"].ToString() != uniq)
                {
                    uniq = string.Format("{0}", uniq.Length > uniqLength ? (uniq.Substring(0, uniqLength - 3) + "...") : uniq);
                    record["subject"] = uniq;
                    crmService.Update(record);
                }
Стало:

Код:
if (!record.Contains("subject") || record["subject"].ToString() != uniq)
                {
                    uniq = string.Format("{0}", uniq.Length > uniqLength ? (uniq.Substring(0, uniqLength - 3) + "...") : uniq);
                    record["subject"] = uniq;
                    if(executionContext.MessageName == MessageName.Update) 
                     {
                    crmService.Update(record);
                    }
                }
Ну и мой код должен выглядить как-то так, исходя из вашего класса:

Код:
            Entity yourEntityName = (Entity)executionContext.InputParameters["Target"];

            if(yourEntityName.Attributes.Contains("subject"))
            yourEntityName.Attributes["subject"] = yourEntityName.GetAttributeValue<EntityReference>("regardingobjectid").Name;
                    if(executionContext.MessageName == MessageName.Update) 
                    {
                    crmService.Update(yourEntityName );
                    }
Я только сомневаюсь, что у EntityReference имя референса называется Name
Получилось у меня что-то типо такого:
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xrm.Sdk;
using Bum.Survey.CRM.Plugin.BaseLib;
using Microsoft.Xrm.Sdk.Query;
using Microsoft.Xrm.Sdk.Messages;

namespace Bum.Survey.CRM.Plugin
{
    public class EvalObjectCreateTest : IPlugin
    {
        public void Execute(IServiceProvider serviceProvider)
        {
            var process = new EvalObjectCreateTestProcess(serviceProvider);
            process.LoadEntity();
            if (!process.ValidateEntityName("bf_evaluatingobject")) return;
            if (!process.ValidateMessage(MessageName.Create, MessageName.Update)) return;
            process.Run();
        }
    }

    class EvalObjectCreateTestProcess : bf_PluginProcess
    {
        public override void Execute()
        {
            if (TargetEntity.Contains("regardingobjectid"))
            {
                string uniq = "";

                int uniqLength = 1024;

                Entity record = crmService.Retrieve(TargetEntity.LogicalName, TargetEntity.Id, new ColumnSet("subject", "regardingobjectid"));

                if (record.Contains("regardingobjectid"))
                {
                    uniq = record.GetAttributeValue<EntityReference>("regardingobjectid").Name;

                    RetrieveEntityRequest rerq = new RetrieveEntityRequest
                    {
                        LogicalName = record.GetAttributeValue<EntityReference>("regardingobjectid").LogicalName,
                        RetrieveAsIfPublished = true
                    };

                    RetrieveEntityResponse rers = (RetrieveEntityResponse)crmService.Execute(rerq);

                    uniq = rers.EntityMetadata.DisplayName.UserLocalizedLabel.Label + " " + "[" + uniq + "]";
                }

                if (!record.Contains("subject") || record["subject"].ToString() != uniq)
                {
                    uniq = string.Format("{0}", uniq.Length > uniqLength ? (uniq.Substring(0, uniqLength - 3) + "...") : uniq);
                    record["subject"] = uniq;
                    if (executionContext.MessageName == MessageName.Update)
                    {
                        crmService.Update(record);
                    }
                }
            }

            Entity yourEntityName = (Entity)executionContext.InputParameters["Target"];

            if (yourEntityName.Attributes.Contains("subject"))
                yourEntityName.Attributes["subject"] = yourEntityName.GetAttributeValue<EntityReference>("regardingobjectid").Name;
            if (executionContext.MessageName == MessageName.Update)
            {
                crmService.Update(yourEntityName);
            }
        }

        public EvalObjectCreateTestProcess(IServiceProvider serviceProvider)
            : base(serviceProvider)
        {
        }
    }
}
На Create ставлю Pre-Operation, на Update ставлю Post-Operation, при создании выдаёт ту же ошибку - bf_evaluatingobject with id ... does not exist. Явно я тупак и не могу допереть))
Старый 03.04.2014, 17:30   #9  
maksii is offline
maksii
Участник
 
15 / 16 (1) ++
Регистрация: 02.04.2014
Адрес: Харьков
хехе, не, это у меня тупняк.

Ошибка не тут случайно падает?
Код:
Entity record = crmService.Retrieve(TargetEntity.LogicalName, TargetEntity.Id, new ColumnSet("subject", "regardingobjectid"));
У тебя на Пре-степе еще нет этой записи, вот ты и не можешь ее вытянуть.
Да и смысла тянуть ее нет, так как в таргете у тебя уже есть эти данные.

Попробуй так;
Инициализируй Entity record дальше
Код:
if (executionContext.MessageName == MessageName.Update)
            {
                record = crmService.Retrieve(TargetEntity.LogicalName, TargetEntity.Id, new ColumnSet("subject", "regardingobjectid"));
            }
            else
            {
            record = TargetEntity;
            }

Мой кусок кода у тебя лишний будут, его можно удалить впринципе, либо удали свой и проверь работает ли мой.
За это сообщение автора поблагодарили: a33ik (2), Lavdislav (1).
Старый 03.04.2014, 17:45   #10  
Lavdislav is offline
Lavdislav
Участник
 
34 / 10 (1) +
Регистрация: 28.02.2014
Цитата:
Сообщение от maksii Посмотреть сообщение
хехе, не, это у меня тупняк.

Ошибка не тут случайно падает?
Код:
Entity record = crmService.Retrieve(TargetEntity.LogicalName, TargetEntity.Id, new ColumnSet("subject", "regardingobjectid"));
У тебя на Пре-степе еще нет этой записи, вот ты и не можешь ее вытянуть.
Да и смысла тянуть ее нет, так как в таргете у тебя уже есть эти данные.

Попробуй так;
Инициализируй Entity record дальше
Код:
if (executionContext.MessageName == MessageName.Update)
            {
                record = crmService.Retrieve(TargetEntity.LogicalName, TargetEntity.Id, new ColumnSet("subject", "regardingobjectid"));
            }
            else
            {
            record = TargetEntity;
            }

Мой кусок кода у тебя лишний будут, его можно удалить впринципе, либо удали свой и проверь работает ли мой.
На сегодня рабочий день закончился, так что завтра всё проверю, спасибо что помогаешь.
Старый 04.04.2014, 09:34   #11  
Lavdislav is offline
Lavdislav
Участник
 
34 / 10 (1) +
Регистрация: 28.02.2014
Цитата:
Сообщение от Lavdislav Посмотреть сообщение
На сегодня рабочий день закончился, так что завтра всё проверю, спасибо что помогаешь.
Думаю да, ошибка именно в том месте падает. Хмм, получилось так:
Код:
public override void Execute()
        {
            Entity record = crmService.Retrieve(TargetEntity.LogicalName, TargetEntity.Id, new ColumnSet("subject", "regardingobjectid"));

            if (TargetEntity.Contains("regardingobjectid"))
            {
                string uniq = "";

                int uniqLength = 1024;

                if (executionContext.MessageName == MessageName.Update)
                    {
                        record = crmService.Retrieve(TargetEntity.LogicalName, TargetEntity.Id, new ColumnSet("subject", "regardingobjectid"));
                    }
                    else
                    {
                        record = TargetEntity;
                    }

                if (record.Contains("regardingobjectid"))
                {
                    uniq = record.GetAttributeValue<EntityReference>("regardingobjectid").Name;

                    RetrieveEntityRequest rerq = new RetrieveEntityRequest
                    {
                        LogicalName = record.GetAttributeValue<EntityReference>("regardingobjectid").LogicalName,
                        RetrieveAsIfPublished = true
                    };

                    RetrieveEntityResponse rers = (RetrieveEntityResponse)crmService.Execute(rerq);

                    uniq = rers.EntityMetadata.DisplayName.UserLocalizedLabel.Label + " " + "[" + uniq + "]";
                }

                if (!record.Contains("subject") || record["subject"].ToString() != uniq)
                {
                    uniq = string.Format("{0}", uniq.Length > uniqLength ? (uniq.Substring(0, uniqLength - 3) + "...") : uniq);
                    record["subject"] = uniq;
                    if (executionContext.MessageName == MessageName.Update)
                    {
                        crmService.Update(record);
                    }
                }
            }
        }
Но опять же ругается на Create of bf_evaluatingobject на то что нету с таким Id
Старый 04.04.2014, 12:33   #12  
maksii is offline
maksii
Участник
 
15 / 16 (1) ++
Регистрация: 02.04.2014
Адрес: Харьков
Код:
Entity record = crmService.Retrieve(TargetEntity.LogicalName, TargetEntity.Id, new ColumnSet("subject", "regardingobjectid"));
Пум пум, ты просто передвинул ошибку выше.

Код:
Entity record = new Entity();
Кажется так должно сработать
Старый 04.04.2014, 14:27   #13  
Lavdislav is offline
Lavdislav
Участник
 
34 / 10 (1) +
Регистрация: 28.02.2014
Цитата:
Сообщение от maksii Посмотреть сообщение
Код:
Entity record = crmService.Retrieve(TargetEntity.LogicalName, TargetEntity.Id, new ColumnSet("subject", "regardingobjectid"));
Пум пум, ты просто передвинул ошибку выше.

Код:
Entity record = new Entity();
Кажется так должно сработать
Ты даже не предстовляешь как я рад, 2 дня я дрюкал этот код (бедный), но с твоей помощью при создании появляется именно то, что мне надо.)) Спасибо тебе огромное, респект!
Старый 04.04.2014, 14:32   #14  
maksii is offline
maksii
Участник
 
15 / 16 (1) ++
Регистрация: 02.04.2014
Адрес: Харьков
Обращайся, если что. Все начинали с подобных ошибок.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
CRM 2011. Проблема при создании отчетов SergeyP Dynamics CRM: Разработка 22 04.12.2013 10:28
Как подтянуть поле при создании записи, если отношения 1:N? DOlga Dynamics CRM: Разработка 2 05.05.2012 15:53
Ошибки авторизации (помогите найти корень зла) Aza123 Dynamics CRM: Функционал 1 27.01.2012 12:37
Плагин на создании Заказа Krom Dynamics CRM: Разработка 4 04.08.2010 14:48
Проблема при создании отчета в CRM 4.0 Kizickii Dynamics CRM: Администрирование 0 24.06.2009 16:34

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 11:12.