Я реализовал плагин для моей Dynamics CRM, который запускает сообщение об обновлении для объекта инцидента. Также у меня есть веб-сервис для внешних пользователей, который может обновлять только два атрибута объекта инцидента извне.
Проблема в том, что когда внешние пользователи используют веб-сервис для обновления сущности, плагин также будет запускаться. Я хочу связать плагин, который будет запущен только внутри CRM, когда изменилась инцидентная сущность, и предотвратить его запуск внешними запросами.
Я проверил следующие условия в своем плагине для предотвращения бесконечной l oop, и это работает, но не работает для предотвращения запуска внешними запросами на обновление.
if (context.Depth > 1 ||
context.Mode != 1 ||
context.MessageName != "Update" ||
context.IsolationMode != 1)
{
return;
}
Чтобы зарегистрировать плагин, я использовал инструмент регистрации плагинов и установил для шага сообщение «Обновление» и «Запуск в контексте пользователя как вызывающий пользователь».
В своем веб-сервисе я использовал Xrm.Sdk
и Xrm.Sdk.Client
для подключения к CRM и непосредственного обновления сущности.
ColumnSet cs = new ColumnSet(new string[] {
"description", "statuscode"
});
Guid recordId = new Guid(caseID);
Entity currentRecord = crmService.Retrieve("incident", recordId, cs);
OptionSetValue osv = new OptionSetValue(1);
currentRecord["statuscode"] = osv;
currentRecord["new_answers"] = answer;
currentRecord["new_lastanswerdate"] = currentDate;
crmService.Update(currentRecord);
Кто-нибудь имеет какие-либо идеи - как я могу предотвратить запуск плагина при обновлении сущности вне CRM?