質問

私はCRM 3.0コールアウトのライブラリを再コンパイルし、私のCRM 4.0のインスタンスにそれらを導入しました。私PostUpdateコールアウトの一つはservice.Update()を呼び出します。これは何度も発射する更新方法を引き起こしています。それは最終的にタイムアウトエラーによる停止します。これらのコールアウトがCRM 3.0で使用されているとき、これは起こりません。

このカスタムコードへのエントリ・ポイントのための次のように

メソッドシグネチャである。

public override void PostUpdate(CalloutUserContext userContext, CalloutEntityContext entityContext, string preImageEntityXml, string postImageEntityXml)
役に立ちましたか?

解決

IPluginExecutionContext上の属性の1つは深さです。これはプラグイン「コールスタック」あなたのプラグインが実行されているではどのように「深い」を示しています。あなたはCRMフォームで保存を押すとあなたは1.ポスト更新が更新を呼び出すたびの深さで開始し、深さが増加します。

あなたは何人かの人々はちょうど深さはそのプラグインのロジックを実行する前に、1に等しいことを確認します見つけることができます。しかし、これは皆のために右ではありません。ワークフローは、このエンティティを更新した場合、その深さは2になります(ワークフローが今、あなたの更新は2で、1でした)。

深さが8に当たると

、CRMは、再帰的に呼び出し、実行を停止します。あなたが実際にタイムアウトまたはこのエラーをヒットしている場合、私はよく分かりません。その私は、彼らが投げる何のエラーを見てきましたので、久しぶり。

私たちは、再帰をチェックする必要があり、当社のソリューション全体でカスタムコードを開発しました。私はこのすべてを共有する立場にないんだけど、あなたがそれを好きなら、あなたのアイデアを持つことができます。

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

この情報がお役に立てば幸いです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top