1

ウェブ上で適切な解決策を見つけることができなかったという奇妙な問題に直面しています。このリンクの下の Microsoft Dynamics CRM フォーラムで同様の質問がされていますが、この状況を処理する方法については言及されていません。

CRM 2011 でワークフローを設計しました。このワークフローは、アプリケーションの 1 つのフィールド変更 (アプリケーション ステージ) でトリガーされる必要があります。これは、 [次の場合に開始]の下の[アプリケーション ステージ] フィールドをチェックしたためです: "レコード フィールドの変更"

ここでの問題は、ワークフローが JavaScript コードを介して 2 回、おそらく 1 回トリガーされることです。

Xrm.Page.data.entity.save();  

もう 1 つは、上記の JavaScript コードに応答して実行される同じエンティティの Update プラグインです。

私が設計したワークフロー/プロセスは、それぞれのApplication Stageに基づいて開始される他のサブプロセスを持つ一種のマスター ワークフローです。子プロセスで、アプリケーションステージに関連するアクティビティを作成し、他のことを行いますが、ワークフローの開始が2回あるため、アクティビティを作成し、他のタスクを複数回実行しています。

このシナリオに対処するための実行可能な解決策は何ですか?

4

2 に答える 2

1

その JavaScript は間違いなくワークフローを 1 回トリガーします。これは、ユーザーが単に [保存] をクリックするのと同じです。

更新を実行するプラグイン (例: service.Update(...)) もワークフローをトリガーします。これはすべて意図された動作です。

プラグインを調べることから始めますが、主に更新呼び出しを実行する必要がありますか? 問題を解決する二重更新を回避できれば。

プラグインは update 呼び出しでデータを変更できることをご存知ですか? プラグインが同期的に登録され、イベント前に登録されている場合、ターゲット エンティティ オブジェクトに加えた変更はレコードに反映されます。これにより、元のメッセージの一部である追加の更新はトリガーされません。

たとえば、次のコードがイベント前の同期プラグインに登録されている場合、'new_field'「My new value」が入力され、追加の更新呼び出しは必要ありません。

//get the entity 
Entity entity = (Entity)context.InputParameters["Target"];

//set new field
entity["new_field"] = "My new value";

//end of plugin

他のオプションを検討する価値があるかもしれないことに失敗した場合:

  1. プラグインがアプリケーション ステージを設定している場合、なぜ JavaScript もそれを設定するのですか?
  2. プラグインは必要ですか? ワークフローにすべて入れることはできますか?
  3. フィールドを使用して見ることができますdo not run workflow。フィールドはプラグイン/JavaScript によって設定されます。そのフィールドが設定されている場合、ワークフローが実行されると何もしませんが、フィールドはクリアされます (実際には推奨されるオプションではありません)。
  4. プラグインはワークフローをトリガーできますか? おそらく、これは構成レコードから読み取ることができますか?
于 2013-07-07T17:46:36.843 に答える
0

プラグインに関しては、更新時にトリガーされると、コンテキストには変更されたフィールドのみが含まれます。

Javascriptについて..すべてのフィールドがコンテキストに送信されると思うので、それらすべてに更新があるように見えるので、ワークフローが起動します。

最も簡単な解決策は、レコードにフラグを設定して、一度だけトリガーすることです。このフィールドは、たとえば「フラグ」という名前のブール値にすることができます。ワークフローの開始時に値を確認し、それに応じて続行できます。

例えば:

  • if (フラグ == false)

    • 私の論理を実行してください........
  • フラグを設定 = true

どう思いますか?

乾杯、

マリオ

于 2013-07-08T09:40:22.280 に答える