Показать сообщение отдельно
Старый 15.07.2014, 13:21   #1  
magicandy is offline
magicandy
Участник
 
111 / 12 (1) ++
Регистрация: 15.07.2014
Конфликт плагина и рабочего процесса
Приветствую, коллеги.

Нужен совет в следующей сложившейся ситуации.
Есть плагин, зарегистрированный на Pre Email Create. Плагин проводит некие манипуляции со связанным с письмом обращением (regarding case). Один из шагов плагина - это обновление связанного обращения (service.Update). Но вот в чём проблема, на шаге апдейта получается рекурсия с другим real-time рабочим процессом, который падает в эксепшн, который в свою очередь не даёт корректно отработать самому плагину. Ниже текст самого эксепшена.
Код:
[Microsoft.Crm.ObjectModel: Microsoft.Crm.ObjectModel.SyncWorkflowExecutionPlugin][7133aad3-f70b-e411-80d9-0050568c1ffc: ]
Starting sync workflow 'Простановка категории организации', Id: 6833aad3-f70b-e411-80d9-0050568c1ffc
Entering UpdateStep1_step: 
Sync workflow 'Простановка категории организации' terminated with error 'Value cannot be null.
Parameter name: culture'
Тут же отмечу, что запуск конфликтного рабочего процесса осуществляется по апдейту одного единственного поля. И, видимо, стартует по событию апдейта обращения, обрабатываемого плагином. Плагином же обновляется атрибут, отличный от атрибута, задействованного в рабочем процессе. Код события апдейта плагина ниже:
Код:
regardingCase = service.Retrieve("incident", regardingCaseId, new ColumnSet(true));
regardingCase["dt_ustomerrating"] = userRating.ToString();
service.Update(regardingCase);
Я пытался ограничить количество передаваемых на апдейт атрибутов:
Код:
regardingCase = service.Retrieve("incident", regardingCaseId, new ColumnSet(new string[] { "dt_ustomerrating" }));
Но это решение выкидывало в эксепшн "The given key was not present in the dictionary". Плюс, на сколько я понял из курения МСДН, ColumnSet возвращает только not null значения. А у меня по основному сценарию атрибут "dt_ustomerrating" не зполнен. Но даже если и заполнен, результат всё равно "The given key was not present in the dictionary".
Ну и на последок, если я отключаю конфликтный рабочий процесс, то плагин отрабатывает без ошибок и проблем. Ещё пробовал утилитой XrmToolBox понизить приоритет запуска проблемного р\п, но это тоже не помогло.

Как лучше всего выйти из сложившейся ситуации и сделать так, чтобы р\п и плагин не мешали и не конфликтовали друг с другом? Заранее благодарю за помощь .