2010-01-04 4 views
1

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

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

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

ответ

1

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

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

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

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

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

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

+0

Я использую выноску, а не плагин. См. Строку кода, добавленную мной к моему вопросу. Я думаю о добавлении нового свойства, но беспокоит, что это не было необходимо, когда выноска была выполнена в crm 3.0 – KClough

+0

Я нашел проблему, когда я тестировал в crm 3.0, у сущностей было заполнено первое поле имени. В crm 4.0 они этого не сделали, и логика buisness предотвратила это от цикла. Благодарю. – KClough