2011-08-31 24 views
0

を保存するときに保存しないPostRetrieveの間に更新フィールド私はPostAccountRetrieve(私は行を削除した)中にいくつかのコードを持っています。フォーム上のCRM 2011:フォームが


Entity entity = (Entity)localContext.PluginExecutionContext.OutputParameters["BusinessEntity"]; 
Account account = entity.ToEntity(); 
... 
account.test_TerminationDate = DateTime.SpecifyKind((DateTime)subscriber.TerminationDate, DateTimeKind.Local); 
account.test_MaxPositions = subscriber.MaxLivePos; 
account.test_Locked = subscriber.Locked; 

entity.EntityState = Microsoft.Xrm.Sdk.EntityState.Changed; 
... 

フィールドは、コードによって記入されています、ただし、ユーザーが[保存]を押すと、これらの値はアカウントに保存されません。私はEntityStateを設定することでこれが処理されると考えました。私は何が欠けていますか?

答えて

0

Post RetrieveプラグインでEntityStateが役に立ちません。あなたの問題は、CRMフォームが実際に変更された値だけを送信するほどスマートであるということです。フォームの読み込み時に発生するPost Retrieveでこれらの値を「変更」しているため、フォームではこれらの値が変更されたとはみなされず、[保存]をクリックしたときに送信されません。

ソリューションは、フォーム負荷でこのJavaScriptを使用することです:

Xrm.Page.getAttribute(“test_TerminationDate”).setSubmitMode(“always”); 
Xrm.Page.getAttribute(“test_MaxPositions”).setSubmitMode(“always”); 
Xrm.Page.getAttribute(“test_Locked”).setSubmitMode(“always”); 

これは非常にこれらのフィールドは、常に保存に提出しますCRMの「知性」をバイパスする必要があります。

+0

答えに感謝します。プラグイン内からこれらのフォーム属性にアクセスする方法があると思いますか?すべてのコードを1つの場所に保存しようとしています。 – Wavel

+0

いいえ - あなたは2つの異なる「層」を扱っています。クライアント・フォームがレンダリングされる前に、Retrieveプラグインがサーバー上で実行されているため、プラグインにはまだフォームの概念がありません。 興味深いのは、 "FieldsToForceSubmit"などの4番目のフィールドを追加することです。 Retrieveプラグインで、他の3つのフィールドのコンマ区切りリストに設定します。次に、クライアント側で、これらのフィールドをループし、setSubmitModeをループするジェネリックJavascriptを記述します。この方法では、少なくともクライアント側のコードを維持する必要はありません。 –

+0

解決策を試してみました。送信モードを設定すると、これらのフィールドを保存する必要があることがフォームに通知されますが、フォーム上で何かが手動で変更され、IsDirtyフラグが設定されている場合に限ります。この問題を回避するためのアイデアはありますか? – Wavel