2011-08-31 47 views
0

我有一個PostAccountRetrieve一些代碼(我已經刪除線)字段更新:CRM 2011:在PostRetrieve不保存時保存表單


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

我不認爲EntityState將幫助您在Post Retrieve插件中。我很確定你的問題在於,CRM表單足夠聰明,只能提交實際改變的值。您正在「更改」後檢索中的這些值(這發生在表單加載時發生),因此表單不認爲這些值已更改,並且在您單擊「保存」時不會提交它們。

的解決方案是在窗體加載使用此javascript:

Xrm.Page.getAttribute(「test_TerminationDate」).setSubmitMode(「always」); 
Xrm.Page.getAttribute(「test_MaxPositions」).setSubmitMode(「always」); 
Xrm.Page.getAttribute(「test_Locked」).setSubmitMode(「always」); 

這應該繞過CRM的「智慧」,讓這些領域始終得到上保存提交。

+0

感謝您的回答。你認爲有一種方法可以從插件中獲取這些表單屬性嗎?試圖將所有的代碼保存在一個地方。 – Wavel

+0

不 - 你正在處理兩個不同的「層」。在客戶端表單甚至呈現之前,您的Retrieve插件正在服務器上運行,因此您的插件將沒有該表單的概念。 一個有趣的可能性是添加一個名爲「FieldsToForceSubmit」或類似的東西的第四個字段。在您的Retrieve插件中,將其設置爲其他3個字段的逗號分隔列表。然後在客戶端,編寫一些通用的Javascript,它們將遍歷這些字段並在其上設置setSubmitMode。這樣你至少不必維護客戶端代碼。 –

+0

終於找到時間來嘗試您的解決方案。設置提交模式確實會告訴表單需要保存這些字段,但只有在手動更改了表單時纔會設置IsDirty標誌。任何想法解決這個問題? – Wavel