2014-02-11 126 views
10

我有一個關於複合材料屬性的問題,如果你能幫助我,我將不勝感激。 我之前在其他問題博客上發佈了這篇文章,但沒有得到任何回覆,我很滿意。複合材料領域在MSCRM 2013

我正在編寫將更新組合(address1_composite)中的字段(即address1_line1,address1_line2,address1_line3,address1_city,address1_stateorprovince,address1_postalcode,address1_country)的JavaScript。更新字段時,組合似乎不會更新。我必須打開組合並再次關閉它。有沒有辦法在JavaScript中自動執行此操作?

我曾嘗試以下思路:

理念1:

Xrm.Page.data.entity.save(); 

這是在http://community.dynamics.com/crm/b/magnetismsolutionscrmblog/archive/2013/10/22/working-with-dynamics-crm-2013-composite-fields-fly-out-menu.aspx recomended這不是什麼好爲我的客戶想要保存頁面之前查看的複合材料。我也不想爲我的客戶保存頁面,因爲他們不想要這個。他們想自己決定什麼時候這樣做。

理念2:

Xrm.Page.data.refresh(); 

這是不是真的是我想要的,因爲我不想刷新整個頁面。我只是想刷新組合。此外,它會彈出一個彈出窗口,提醒您未保存將爲我的客戶煩人的頁面。

想法3:

將地址從地址行寫入複合。 這感覺像一個討厭的黑客。 可能有多種方法。我使用的功能

Xrm.Page.getAttribute("address1_composite")._attribute.setValueForCompositeField(); 

我不喜歡這樣,原因如下:

  1. 這是一個黑客,因爲它沒有使用完成按鈕的系統功能寫入數據。
  2. 你沒有得到你用done按鈕得到的系統格式,儘管當表單被保存時它會完成,所以它不是那麼糟糕。
  3. 未來,如果客戶被允許添加自己的複合字段,可能會導致問題,因爲字段名稱可能會有所不同。
  4. 它需要我爲每個具有不同模式名稱字段的組合的表單編寫額外的代碼。例如。我必須爲ShipTo和BillTo地址編寫不同的代碼,因爲帳戶代碼不起作用。

另一個想法是在對合成內部的任何字段進行更改後,將焦點設置到合成字段。

Xrm.Page.data.entity.attributes.get("address1_composite").controls.get(0).setFocus(); 

這是最好的想法,但它遠非完美。這迫使用戶按下完成按鈕,因此字段將被寫入。我希望有更多的自動化。

我的問題: 如果有一種方法可以單擊JavaScript中的合成完成按鈕,那將會是一個不錯的選擇。這將給我完成按鈕的格式和我需要的自動化。

更新 - 2014年4月14日 自發布此問題以來,我一直在與Microsoft聯繫,他們說沒有支持通過程序單擊完成按鈕的方式。

+2

我想我會評論這個問題。我有同樣的問題(截至09年4月14日ddmmyy)。看起來複合屬性更新與確認或點擊飛出編輯框的動作相關聯。我曾預料,只要有一個相關屬性發生變化(即使使用fireOnChange,而不是手動),組合控件也會更新。通常的MS東西不幸。 – Raine

+4

14/04/2014自從發佈這個問題以來,我一直在與微軟聯繫,他們說沒有支持通過程序點擊完成按鈕的方式。我已將此添加到上述問題的主體中。 – Oly

+0

你做了什麼決定? – Kye

回答

1

如果該字段被鎖定,CRM不會將數據發送回服務器進行更新。另一種方法是:

  1. 使用JavaScript執行更新(以便用戶看到更改);和
  2. Update事件上使用服務器端plugin,以便該值保持不變。
+0

你好。謝謝你。但是,這會產生與上述想法1相同的問題。客戶需要能夠在複合材料被保存回服務器之前檢查複合材料。 – Oly

+0

在這種情況下,你堅持定製的Javascript。 – Kye