アップデート
最初から追加する必要がありました - これは Microsoft Dynamics CRM 2011にあります
CRM についてはよく知っていますが、現在の展開での動作を説明するには途方に暮れています。
私の推測/理解のどれが間違っているか (したがって、このエラーの原因は何か) を理解するために、私のシナリオの概要をお読みください。それは私の期待と一致しません。
基本シナリオ
- 要件では、X 分ごとに Web サービスを呼び出す必要があります (保留中のアイテムをデータベース インデックスに追加します)。
- ワークフロー/カスタム エンティティ トリガー モデルを使用することを選択しました (つまり、CREATE プラグインが登録されたカスタム エンティティがあります。プラグインはロジックを実行します。「完了」時間 + [タイムアウト期間]が経過すると、付随するワークフローが開始されます。有効期限が切れると、新しいトリガー レコードが作成され、ワークフローが終了します)。
- プラグイン ロジックは問題なく動作します。ワークフローの概念はある程度は正常に機能しますが、しばらくするとワークフローが失敗して失速します。
このワークフロー ジョブは、それを開始したワークフローに無限ループが含まれていたためキャンセルされました。ワークフロー ロジックを修正し、再試行してください。ワークフロー ロジックの詳細については、ヘルプを参照してください。
特定の展開
まず、このシナリオではプラグイン コードの内容を無視しても問題ないと思います。それは正常に動作し、原子的であり、CRM にはほとんど触れません (明確にするために、これはリモート Web サービスを実行し、応答を待ってから、トリガー レコードに "完了" 日付/時刻属性を設定してから渡す前のイベント プラグインです)ターゲット エンティティをパイプラインに戻します) 。Trigger レコードが作成されている限り、このコードは実行され、必要な処理を実行します。
プラグインの内容を割り引いたので、エンティティの事前作成ステップでプラグインを登録することに不満があるかもしれません...
したがって、ワークフロー自体は残ります。それは単純なものです。次のように実行されます。
- 新しいトリガー エンティティの作成時...
- Trigger.new_completedon + 15分のタイムアウトがあります
- タイムアウト時に、新しいトリガー レコードを作成します (「完了」値なし - これはプラグインによって設定されます)
- それだけです-明示的な「ワークフローの終了」はありません(ただし、今追加したばかりで、テストに設定します...)
この設定で、新しいトリガー レコードを手動で作成すると、プロセスがうまく実行されます。ロール フォワード 1 時間 58 分 (最後に実行したサイクルに基づく - プラグイン コードの実行が完了するまでに 1 分かかる場合があることを思い出してください)、7 回の実行サイクルが成功した後 (つまり、新しいワークフロー ジョブが作成されて完了)、8 回目のサイクルは失敗し、前述のエラー。
私がすでに知っていること(間違っているところを修正してください)
デフォルトでは、再帰の深さは 8 に設定されています。ワークフロー/プラグインが自分自身を 8 回呼び出すと、無限ループが検出されます。
再帰の深さは 1 時間ごとにリセットされます(または 10 分 - リンクされたブログの「警告」を参照してください?)
再帰の深さの設定は、PowerShellまたは SDK コードを介して、オンプレミス展開でのみ展開 Web サービスを使用して 設定できます( Set-CrmSetting Cmdlet を使用) 。
聞きたくないこと (プリーズ)
「再帰の深さの設定を変更する」
これはオンライン シナリオのオプションではないため、展開の再帰の深さの設定を変更することはできません。最終的には、CRM Online にも展開する予定です。
「ワークフローのタイムアウト期間を増やしてください」
これもオプションではありません。再インデックスは 15 分ごとに、理想的にはそれより早く行う必要があります。
アップデート
@Boone は、再帰の深さのタイムアウトが 60 分ごとではなく、 60 分間非アクティブになった後にリセットされることを以下に提案しました。そこに最初の誤解があります。
@alex と話し合っているときに、ワークフローを介したエンティティの作成と、Ultimate が生成されるワークフローとの間に CorrelationId の永続性がある可能性があることを提案しました...まあ、あります。CorrelationId は、プラグインとワークフロー、およびそのスレッドからスプールするすべてのレコードの両方で同じです。現在、エンティティとワークフローから CorrelationId (またはおそらくレコードの作成) を分離する方法を検討しています。