Автоматически публикация Правил обнаружения дубликатов
При импорте управляемого или неуправляемого Решения в CRM 2011 если при этом менялись какие-либо метаданные объекта все Правила поиска дубликатов, связанные с объектом, автоматически деактивируются. Администраторы могут забывать об этом и тогда Правила не будут срабатывать в нужное время.
Чтобы избежать этого, можно создать такой плагин и зарегистрировать его на сообщение Publish All (асинхронно):
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.ServiceModel; using Microsoft.Xrm.Sdk; using Microsoft.Xrm.Sdk.Query; using Microsoft.Xrm.Sdk.Messages; using Microsoft.Crm.Sdk.Messages; namespace PublishRules { public class PublishRules : IPlugin { public void Execute(IServiceProvider serviceProvider) { IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext)); try { IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory)); IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId); // Запрашиваем неопубликованные Правила поиска дубликатов QueryExpression query = new QueryExpression { EntityName = "duplicaterule" }; query.Criteria.AddCondition("statecode", ConditionOperator.Equal, 0); // Неактивные query.Criteria.AddCondition("statuscode", ConditionOperator.Equal, 0); // Не опубликованные EntityCollection results = service.RetrieveMultiple(query); // Просматриваем все найденные Правила и публикуем их List<Entity> rules = results.Entities.ToList(); rules.ForEach(r => { service.Execute(new PublishDuplicateRuleRequest { DuplicateRuleId = r.Id }); }); } catch (FaultException<OrganizationServiceFault> ex) { throw new InvalidPluginExecutionException("Ошибка: ", ex); } } } }
Плагин просто получает все неопубликованные Правила обнаружения дубликатов и выполняет PublishDuplicateRuleRequest.
А если изменения публикуют не через PublishAll, то чуда не случится. Правильно?
Можно еще и на Publish повесить.