1

CRM 3.0コールアウトのライブラリを再コンパイルし、CRM4.0インスタンスに展開しました。PostUpdateコールアウトの1つがservice.Update()を呼び出します。これにより、updateメソッドが何度も起動します。タイムアウトエラーのため、最終的には停止します。これらのコールアウトがCRM3.0で使用されている場合、これは発生しません。

このカスタムコードへのエントリポイントのメソッドシグネチャは次のとおりです。

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

1 に答える 1

1

IPluginExecutionContextの属性の1つは、深さです。これは、プラグインの「深い」「call-stack」プラグインがどのように実行されているかを示します。CRMフォームで[保存]を押すと、深さ1から開始します。更新後の呼び出しが更新を呼び出すたびに、深さが増加します。

プラグインロジックを実行する前に、深さが1に等しいことを確認する人もいます。ただし、これはすべての人に適しているわけではありません。ワークフローがこのエンティティを更新する場合、深さは2になります(ワークフローは1でしたが、更新は2になります)。

深さが8に達すると、CRMは実行を停止して再帰的に呼び出します。実際にタイムアウトになっているのか、このエラーになっているのかわかりません。彼らがどんなエラーを投げるのか見てから久しぶりです。

ソリューション全体でカスタムコードを開発し、再帰をチェックする必要があります。私はこれらすべてを共有する立場にはありませんが、気に入ったらアイデアを得ることができます。

もう1つのアイデアは、エンティティにカスタム属性を追加することです。フォームに入れないでください。通常、その属性は更新プロパティバッグには存在しません。次回アップデートプラグインをショートさせるコードからアップデートを呼び出す場合は、属性を設定してください。属性が設定されている場合、プラグインを短絡して処理しません。

お役に立てれば。

于 2010-01-04T18:26:05.780 に答える