3

毎日自分自身を呼び出すワークフローを CRM で作成しようとしています。これは再帰的なワークフローです。

毎日 50 万のエンティティで実行され、過去 3 日間更新されていない場合はレコードを無効にします。

他の誰かがこれを行ったので、パフォーマンスが心配です。

4

2 に答える 2

3

私は個人的にこのようなものを実装していませんが、それは非同期サービスが追跡しなければならないDBに浮かんでいる500,000のレコードであり、ハードウェアに負担をかけます。さらに、CRMは再帰的なワークフローインスタンスを追跡します。正確な仕様はわかりませんが、ワークフローが特定の時間枠内に設定された回数だけ自分自身を呼び出すと、CRMはワークフローを強制終了します。

3日間更新されていないレコードをCrmサービスに要求し、それらを非アクティブ化するコンソールアプリを作成できますか?スケジュールされたタスクとして1日1回実行すると、CRMシステムで実行中のワークフローインスタンスをすべて追跡する必要がなくなります。

編集:ああ、各レコードで実行されるワークフローではなく、すべてのレコードで実行される1つのワークフローについて考えていたかもしれません。このルートを使用する場合、benjynitoのアドバイスは理にかなっていますが、ワークフローを使用するよりも、スケジュールされたタスクの方が適切だと思います。

于 2009-09-21T21:16:22.740 に答える
1

ワークフローがピーク時以外に実行されていることを確認する必要があります。オンプレミスのインストールがあると仮定すると、それを回避できるはずです。ホステッド インスタンスを使用している場合、ある組織がワークフローを実行しているときに別の組織がシステムを使用していることを心配するかもしれません。タイムアウトを使用し、必要に応じてカスタム ワークフロー アクティビティを使用して、開始時間を特定の期間に強制します。

どのレコードを非アクティブ化するかをできる限り効率的に判断できると思います。(つまり、クエリ式は、非アクティブ化するレコードのみを返します)。

CRM によって提供される組み込みの無限ループ保護は、ワークフロー インスタンスを強制終了するべきではありません。呼び出し深度が 8 になると停止しますが、1 時間呼び出しが行われないと 1 にリセットされます。したがって、これを 1 日に 1 回行っているという事実は、再帰的なワークフローの面で問題ないはずです。

于 2009-09-22T12:49:47.440 に答える