1

Я хотел подтвердить свое понимание об управлении транзакциями в Dynamics CRM и проверить, не пропал ли я что-то.Сделки в плагине и веб-сервисах Dynamics CRM

1) Операции в CRM Плагины: Плагины, зарегистрированные в стадии 20 и 40 из трубопровода событий запуска под БД транзакции. Поэтому, если у меня есть три плагина, зарегистрированных при до/после операции любого сообщения, и если третий плагин генерирует исключение, изменения, сделанные двумя первыми плагинами, также будут отменены. Правильно ли это понимание?

2) Операции в CRM Web Service: В случае написания кода с CRM Web Services, я могу использовать ExecuteTransactionRequest запрос и все сообщения запроса, предоставляемые с этим сообщением будут работать под одной транзакции CRM DB. Это сообщение, похоже, было введено в версии 2016 года, и каков был бы идеальный способ справиться с такими сценариями до 2016 года?

+0

Изменения, внесенные в базу данных CRM, будут отброшены плагинами. Если ваш плагин обновляет другую базу данных (например, операции синхронизации), то изменения в этой другой базе данных не будут отменены. – jasonscript

ответ

3

1) Предполагая, что плагины работают синхронно, тогда да, все изменения должны быть отброшены назад.

Inclusion in database transactions

подключаемые модули могут или не могут выполнить в пределах транзакции базы данных на платформы Microsoft Dynamics CRM. Независимо от того, является ли подключаемый модуль частью транзакции, зависит от того, как запрос сообщения обрабатывается конвейером. Вы можете проверить, выполняется ли подключаемый модуль в транзакции, прочитав свойство IsInTransaction , унаследованное IPluginExecutionContext, которое передается плагину . Если в транзакции базы данных выполняется подключаемый модуль, а разрешает передачу исключения на платформу, вся транзакция будет отклонена. Стадии 20 и 40 гарантируются как часть транзакции базы данных , а этап 10 может быть частью транзакции .

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

2)

  • Да ExecuteTransactionRequest это новая функция CRM 2016.
  • Если у вас есть CRM 2013+, вы можете поставить логику внутри Action, которая поддерживает автоматический откат. Затем вызовите действие со входами.
  • Для CRM 2011 положите логику внутри плагина. Затем вызывают запуск плагина, например, путем создания записи в CRM. Вы также можете записывать ввод в новую запись.
+0

Спасибо Джеймсу. Просто некоторые последующие вопросы. 1) Практически, поддерживает ли транзакции в плагинах aync? И применимо ли это только к нескольким плагинам, зарегистрированным в сообщении, или применяется даже в пределах одного плагина? – Ashish

+0

Сам асинхронный плагин может быть транзакционным, но он не будет возвращаться к предыдущему плагину синхронизации, поскольку он будет выполняться вне транзакции плагина синхронизации. –