Источник:
http://axforum.info/forums/blog.php?b=405
==============
В одном из своих прошлых постов
Правила поиска дубликатов (Duplicate Detection Rules) CRM 2011. Как это работает и почему правила иногда автоматически становятся черновиками? я писал о проблеме, которая иногда портит жизнь администраторам систему. Суть в том, что проблема автоматической деактивации правил не неизлечима, так как является функционалом "by design" (так и задумано), однако можно попробовать автоматизировать повторную публикацию правил.
Сегодня мне надоело тренировать бдительность при обновлении решения и я решил написать плагин, который будет публиковать нужные мне правила при публикации всех настроек:
X++:
QueryExpression query =
new QueryExpression { EntityName =
"duplicaterule", ColumnSet =
new ColumnSet(
"duplicateruleid"), Criteria =
new FilterExpression { Conditions = {
new ConditionExpression { AttributeName =
"name", Operator = ConditionOperator.BeginsWith, Values = {
"AlwaysOn:" } },
new ConditionExpression { AttributeName =
"statuscode", Operator = ConditionOperator.Equal, Values = { 0 } } }, FilterOperator = LogicalOperator.And } }; EntityCollection rules = localContext.OrganizationService.RetrieveMultiple(query); ExecuteMultipleRequest publishRulesRequest =
new ExecuteMultipleRequest { Settings =
new ExecuteMultipleSettings { ContinueOnError =
true, ReturnResponses = false }, Requests =
new OrganizationRequestCollection() }; foreach (Entity rule in rules.Entities) { publishRulesRequest.Requests.Add(
new PublishDuplicateRuleRequest() { DuplicateRuleId = rule.Id }); } ExecuteMultipleResponse publishRulesResponse = (ExecuteMultipleResponse)localContext.OrganizationService.Execute(publishRulesRequest);
if (publishRulesResponse.IsFaulted ==
true) { String message = String.Format(
"{0} rules where not published. First error: {1}", publishRulesResponse.Responses.
Count, publishRulesResponse.Responses[0].Fault.Message);
throw new InvalidPluginExecutionException(message); }
В идеале плагин должен стартовать при установке и обновлении решения (
solution), но, к сожалению, система не поддерживает это сообщение.
Как он работает? Плагин ищет правила в состоянии черновиков, название которых начинается с "AlwaysOn:" и публикует их. Его следует регистрировать на шаге пост обработки события "PublishAll" в асинхронном режиме. Результат работы можно увидеть в системном журнале:
Источник:
http://axforum.info/forums/blog.php?b=405