2013-03-26 9 views
6

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

// 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 
} 

答えて

13

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

+0

変更されていない属性はどのようにアクセスされますか? – Bvrce

+8

プレイメージまたはポストイメージの使用(http://msdn.microsoft.com/en-us/library/gg309673.aspx#bkmk_preandpost) –

+0

私はIOrganization.Retrieveを使用しようとしていました。より効率的に見えます。 – Bvrce

11

GCATNMの回答を少し拡大します。ターゲットには更新されるすべての値が含まれますが、必ずしも変更された値のすべてではありません。

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

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

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

+0

あなたの答えは非常に重要です。私はResco Mobile CRMを介してgpsコーディネートを更新しています。プラグインは緯度や経度が変化したときに起動し、営業担当者がその場所にいることを証明します。この場合、すべてのフィールド値はlocalContext.PluginExecutionContext.InputParameters ["Target"]にありますので、プレイメージ値と["Target"]値を比較して、それらが変更されているかどうかを確認します。 – Bvrce

+0

+1のために使用する画像: – glosrob

関連する問題