Как предотвратить запуск плагина Dynamics CRM при обновлении объекта с помощью веб-службы? - PullRequest
0 голосов
/ 03 марта 2020

Я реализовал плагин для моей Dynamics CRM, который запускает сообщение об обновлении для объекта инцидента. Также у меня есть веб-сервис для внешних пользователей, который может обновлять только два атрибута объекта инцидента извне.

Проблема в том, что когда внешние пользователи используют веб-сервис для обновления сущности, плагин также будет запускаться. Я хочу связать плагин, который будет запущен только внутри CRM, когда изменилась инцидентная сущность, и предотвратить его запуск внешними запросами.

Я проверил следующие условия в своем плагине для предотвращения бесконечной l oop, и это работает, но не работает для предотвращения запуска внешними запросами на обновление.

    if (context.Depth > 1 || 
        context.Mode != 1 || 
        context.MessageName != "Update" || 
        context.IsolationMode != 1)
    {
        return;
    }

Чтобы зарегистрировать плагин, я использовал инструмент регистрации плагинов и установил для шага сообщение «Обновление» и «Запуск в контексте пользователя как вызывающий пользователь».

enter image description here

В своем веб-сервисе я использовал 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?

1 Ответ

1 голос
/ 03 марта 2020

Плагин запускается в каждой серверной транзакции и запускается, что является ожидаемым поведением (в этом и состоит вся цель).

Вы можете использовать другой флаг (дополнительный атрибут или любую учетную запись службы), который обновляется только / используется для внешней интеграции, в этом случае вы можете проверить контекст выполнения / целевую сущность и игнорировать дальнейшее выполнение.

Для внешней интеграции - вы должны создать пользователя приложения (неинтерактивная учетная запись службы). Читать дальше

...