8

Update プラグインの場合、変更された場合にプラグインが起動する属性のリストが指定されていると想定しました。

したがって、 に対してプラグインを登録し、 に対してFoo1 つのフィルタリング属性のみを指定するとBar、エンティティが更新されるたびにFoo、CRM は が更新されているかどうかを確認し、Bar更新されている場合はプラグインを実行します。したがって、以下のコードでは、プラグインが 1 回実行されることが期待されます。

Foo foo = new Foo();
foo.Bar = 0;
foo.Id = service.Create(foo);
foo.Bar = 1;
service.Update(foo.Bar); // My plugin would execute
service.Update(foo.Bar); // Bar hasn't changed, I would assume the plugin will not  execute

私はこの仮定で正しいですか?

4

2 に答える 2

14

最初の分析は大まかに正しいですが (つまり、フィルタリング属性は、1 つ以上のフィルタリング属性が変更された場合にのみプラグインを起動させます)、これは完全には正確ではありません。

連絡先の電子メール アドレスなどのエンティティが変更されると、プラットフォーム (およびプラグイン) は差分のみを受け取ります。私の例でTargetは、単一の属性 ( email) のみを含むエンティティが InputParameter に存在します。これは、連絡先レコードにさらに多くのデータが含まれている場合でも当てはまります。変更されたデータのみがプラットフォームに送信されます。(余談ですが、Retrieve を発行することなく、変更されていないエンティティの値にアクセスできるようにするため、ここで Pre エンティティ イメージと Post エンティティ イメージの出番です)。

したがって、これを念頭に置いて、フィルタリング属性は、1 つ以上のフィルタリング属性がリクエストに存在する場合にのみプラグインが起動することを意味すると言うのが正しいです。通常、CRM UI は値が変更されない限り値を送信しません (forcesubmit はこの動作をオーバーライドします)。あなたの例の Daryl では、フィルタリング属性が両方のリクエストに存在するため、プラグインは 2 回起動します。

于 2012-12-08T08:21:48.113 に答える
-1

これは、プラグインの実行を絞り込むためです。プラグインは、登録された属性の 1 つ以上が変更された場合にのみ起動します。

于 2012-12-08T07:22:50.333 に答える