7

フィールドが変更された同期プラグインでどのように判断できますか?
プラグインは更新時に登録されます。
JavaScriptのisDirty()のようなもの:

// TODO: Implement your custom Plug-in business logic.
IOrganizationService service = localContext.OrganizationService;
Entity account = (Entity)localContext.PluginExecutionContext.InputParameters["Target"];
if (account.GetAttributeValue<String>("address1_latitude").isDirty())
{
    service.Create(new Lead { FirstName = "LOCATION CHANGED" }); // this is a stub
} 
4

2 に答える 2

15

ターゲットに実際に存在する属性は、変更された属性です。変更されていない属性はそこに表示されません。

于 2013-03-26T10:19:57.120 に答える
13

GCATNMの答えを少し拡張します。ターゲットには、現在DBに存在する値とは異なる値だけでなく、更新要求に含まれていたすべての値が含まれています。

フォームで非常に「ハッキーな」JavaScriptを実行しない限り、CRM UIのJavaScriptは次の値のみを送信するため、CRMWebフロントエンドからの更新/作成のターゲットエンティティには常に変更された値のみが含まれます。変更されました。

ただし、他の方法(OData呼び出し、SDKを使用したC#更新)を介してデータを更新していて、実際には変更されていない値が更新要求に含まれている場合、それらはプラグインのターゲットに表示されます。たとえば、特定のエンティティのすべての属性を取得してから1つの属性を更新するC#プロセスがある場合、エンティティのすべての属性がターゲットに表示されます。

つまり、実際のターゲットは変更されたものではなく、プラグインが完了した後のエンティティになります。値が実際に変更されたかどうかを判断できるようにするには、変更を検査するプレイメージに属性を含める必要があります。

于 2013-03-26T12:19:03.007 に答える