2016-12-16 80 views
0

我有一個實體窗體(實體A),它包含一個子窗格來顯示另一個實體(實體B)的鏈接記錄,其中多個B記錄鏈接到一條A記錄。 實體B的記錄通過點擊子網格上的'+'圖標鏈接到實體A,填寫實體B的快速創建表單並保存。保存之後,新創建的記錄B以記錄A的形式顯示在子網格中:全部按預期方式顯示。快速創建記錄後刷新字段值的基礎記錄

填寫實體B的快速創建表單時,需要填寫包含金額的字段。在保存之後,服務器端插件獲取鏈接到實體A的特定記錄的實體B的所有記錄,計算其全部金額的總和並填充實體A的記錄形式的字段中的總金額。這也適用如預期的那樣,新計算的值存儲在數據庫中。問題是顯示錶單A上總金額的字段不會刷新。它會一直顯示與載入表單時相同的數量,並且只會在整頁刷新後纔會更新。每當實體B的新記錄鏈接時,值會更新。 A上的值僅在頁面刷新時顯示爲'新'值。

問題是用戶連接超過B的10+條記錄,無需刷新。我們獲得了自動刷新字段的請求,但我不知道這是否可以完成,因此:是否可以在保存時以實體A的形式刷新(/重新呈現)字段實體B的事件?我認爲這必須在JavaScript中完成,因爲它是字段值的客戶端表示,並且字段值已經正確存儲在數據庫中。

謝謝!

回答

0

如果有幫助。它可以在C#中完成。你可以使用你在這裏描述的邏輯來製作插件。

該插件將使用Plugin Registration Tool進行註冊。您將不得不爲Entity B添加兩個步驟。首先會有Create消息,第二個Update。對於第二步,您只需選擇amount提交的更新,因此只有在更新該字段時纔會觸發它。

它也可以使用Rollup Fields來完成。他們可以點擊更新,但每12小時都會自動更新,如果這對您來說足夠頻繁。

我不知道如何使用JavaScript,但我是CRM新手,所以其他人可能會出現這種類型的解決方案,我也很樂意閱讀它。

0

使用JavaScript,可以訂閱一個網格刷新事件。從那裏你有幾個選項。

  1. 在刷新事件中,您可以觸發休息調用以從服務器檢索值,然後更新表單上的值。我也會禁用該字段的提交,因爲您不希望客戶端更新它。
  2. Or-明確呼叫保存。您必須確保表單有效,或者將所有必填字段更改爲不再需要以允許保存發生。保存事件將從數據庫中返回更新的值並自動更新表單。

如果你以前從未做過休息電話,第一個選項可能會更難,但恕我直言,這是更好的選擇。

0

我能想到的最簡單的解決方案是通過爲實體A的表單OnLoad事件添加新的處理程序來輪詢值。

然後代碼將使用setTimeout不斷從REST API讀取字段的值,比較字段的內容,如果更改它將調用Xrm.Page.data.refresh異步地重新加載表單,而無需整頁重新加載。

另一個(恕我直言更好)選項:升級到更新的版本。從2015年更新1開始,子網格也有OnLoad事件:您只需要處理該事件,即可調用Xrm.Page.data.refresh,而無需重複ping服務器。