23.07.2012, 21:01 | #1 |
Участник
|
Плагин не срабатывает на Delete crm 2011
Привет! Есть плагин, работает на update и на create, а вот на Delete не срабатывает. Зарегистрирован на Pre. Суть его работы в подсчете числа юзеров.
public void RetrieveCountContacts(IServiceProvider serviceProvider) { int Count = 0; IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext)); if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity) { entity = (Entity)context.InputParameters["Target"]; } IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory)); IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId); ......//условия поиска по связи 1:N foreach (var a in result.Entities) { Count++; } if(context.MessageName=="Delete") { Count--; } |
|
23.07.2012, 22:39 | #2 |
Чайный пьяница
|
Код: if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity)
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
|
За это сообщение автора поблагодарили: Taker1796 (1). |
23.07.2012, 23:22 | #3 |
Участник
|
Цитата:
Код: if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity) //тут я получаю данные { Entity entity = (Entity)context.InputParameters["Target"]; //тут из этих данных формирую сущность } Последний раз редактировалось Taker1796; 23.07.2012 в 23:35. |
|
24.07.2012, 10:36 | #4 |
Участник
|
Пробовал вот так, тоже не работает
if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is EntityReference) { if (context.MessageName == "Delete") { Count = Count - 1; } } |
|
24.07.2012, 12:20 | #5 |
Чайный пьяница
|
Там действительно EntityReference. Если не работает - ошибка у вас в коде. Полный код приведите, пожалуйста.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
24.07.2012, 12:26 | #6 |
Участник
|
Цитата:
Код: public void Execute(IServiceProvider serviceProvider) { int Count = 0; Entity entity = null; // Получаем контекст плагина IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext)); if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity) { // Получаем объект entity = (Entity)context.InputParameters["Target"]; } else { return; } if (entity.Attributes.Contains("parentcustomerid")) { // Получаем сервис через контекст плагина IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory)); IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId); ConditionExpression condition = new ConditionExpression(); condition.AttributeName = "parentcustomerid"; condition.Operator = ConditionOperator.Equal; condition.Values.Add(entity.GetAttributeValue<EntityReference>("parentcustomerid").Id.ToString()); FilterExpression filter = new FilterExpression(); filter.Conditions.Add(condition); QueryExpression query = new QueryExpression("contact"); query.ColumnSet.AddColumns(new string[] { "fullname" }); query.Criteria.AddFilter(filter); EntityCollection result = service.RetrieveMultiple(query); foreach (var a in result.Entities) { Count++; } Entity account = new Entity("account"); ColumnSet attributes = new ColumnSet(new string[] { "new_contactquantity" }); account = service.Retrieve(account.LogicalName, entity.GetAttributeValue<EntityReference>("parentcustomerid").Id, attributes); //Обновляем значение поля "Количество клиентов" account["new_contactquantity"] = Count; // Обновляем запись service.Update(account); } Последний раз редактировалось Taker1796; 24.07.2012 в 12:28. |
|
24.07.2012, 12:28 | #7 |
Чайный пьяница
|
Получите поля удаяемой записи из Image.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
|
За это сообщение автора поблагодарили: Taker1796 (1). |
24.07.2012, 13:39 | #8 |
Участник
|
Код: if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity) { // Получаем объект entity = (Entity)context.InputParameters["Target"]; } else { entity = (Entity)context.PreEntityImages["PreImage"]; } |
|
24.07.2012, 13:52 | #9 |
Чайный пьяница
|
Цитата:
Сообщение от Taker1796
Код: if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity) { // Получаем объект entity = (Entity)context.InputParameters["Target"]; } else { entity = (Entity)context.PreEntityImages["PreImage"]; }
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
24.07.2012, 13:56 | #10 |
Участник
|
|
|
24.07.2012, 14:04 | #11 |
Чайный пьяница
|
Скриншот покажите, пожалуйста.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
|
|