Выноски CRM 3.0, запущенные в CRM 4.0, вызывают бесконечный цикл - PullRequest
1 голос
/ 04 января 2010

Я перекомпилировал библиотеку выносок CRM 3.0 и развернул их в своем экземпляре CRM 4.0. Один из моих вызовов PostUpdate вызывает service.Update (). Это вызывает многократное срабатывание метода обновления. Это в конечном итоге останавливается из-за ошибок тайм-аута. Этого не происходит, когда эти выноски используются с CRM 3.0.

Подпись метода для точки входа в этот пользовательский код следующая.

public override void PostUpdate(CalloutUserContext userContext, CalloutEntityContext entityContext, string preImageEntityXml, string postImageEntityXml)

1 Ответ

1 голос
/ 04 января 2010

Один из атрибутов в IPluginExecutionContext - это глубина. Это указывает на то, насколько «глубоко» в плагине «call-stack» выполняется ваш плагин. Когда вы нажимаете «Сохранить» в форме CRM, вы начинаете с глубины 1. Каждый раз, когда ваше обновление обновляется после вызова, глубина увеличивается.

Вы обнаружите, что некоторые люди просто проверят, что глубина равна 1, прежде чем выполнять свою логику плагина. Это не подходит для всех, однако. Если рабочий процесс должен был обновить эту сущность, то глубина была бы 2 (рабочий процесс был 1, теперь ваше обновление - 2).

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

Мы разработали собственный код для всего нашего решения, где мы должны проверять рекурсию. Я не в состоянии поделиться всем этим, но у вас может быть идея, если вам это нравится.

Еще одна пара идей - добавить собственный атрибут к вашей сущности. Не помещайте это в форму. Обычно этот атрибут не существует в вашем наборе свойств обновления. Когда вы вызываете обновление из кода, который должен закорачивать ваш плагин обновления в следующий раз, установите атрибут. Если атрибут установлен, вы бы замкнули накоротко и не обработали плагин.

Надеюсь, это поможет.

...