我是微軟Dynamics 365 & Power Platform方面的工程師羅勇,也是2015年7月到2018年6月連續三年Dynamics CRM/Business Solutions方面的微軟最有價值專家(Microsoft MVP),歡迎關注我的微信公眾號 MSFTDynamics365erLuoYong ,回復376或者20191105可方便獲取本文,同時可以在第一間得到我發布的最新博文信息,follow me!
我這里假設一個場景,測試自定義實體需要一個自動編號字段,編號為創建這個記錄的人所屬業務部門的address1_country的值加上一個6位數的流水號,比如 ZH-000001。
這個一定要用插件寫代碼來實現嗎?不一定,利用自動編號類型的字段,計算字段加上實時工作流可以配置出來。
首先我需要為這個測試實體TestEntity創建一個Autonumber格式的字段,此種字段的介紹請參考我的博文 Dynamics 365 Customer Engagement V9.X新引入的自動編號屬性介紹 ,如圖。
然后我需要在用戶顯示用戶所屬業務部門的address1_country字段值,怎么辦?用計算字段來做。為用戶(systemuser)實體添加一個計算字段如下:
計算公式如下,可以看到是該用戶所屬業務部門的address1_country字段的值。
將這個新增的字段增加顯示到用戶實體表單發布后你可以看到效果。但是默認情況下你改不了根業務部門的字段值,因為不能為其選擇一個父業務部門,保存的時候會報錯 You must provide a value for Parent Business.,如下。
那怎么辦?參考我的博文:不借助工具在瀏覽器中通過Web API執行Dynamics 365操作(Action)實例 ,我是用如下的JS代碼來設置根業務部門這個字段的值。
var clientURL = Xrm.Page.context.getClientUrl(); var req = new XMLHttpRequest() req.open("PATCH", encodeURI(clientURL + "/api/data/v9.1/businessunits(3B4C4300-9AD7-E911-AA0E-000D3AA3715F)"), true); req.setRequestHeader("Accept", "application/json"); req.setRequestHeader("Content-Type", "application/json; charset=utf-8"); req.setRequestHeader("OData-MaxVersion", "4.0"); req.setRequestHeader("OData-Version", "4.0"); req.onreadystatechange = function () { if (this.readyState == 4 /* complete */) { req.onreadystatechange = null; if (this.status == 204) { Xrm.Utility.alertDialog("記錄修改成功!"); } else { var error = JSON.parse(this.response).error; Xrm.Utility.alertDialog("修改記錄出錯." + error.message); } } }; var requestMsg = {}; requestMsg["address1_country"] = "ZH"; req.send(JSON.stringify(requestMsg));
可以看到我更新成功了。
然后我需要建立一個實時工作流,實時工作流就是創建的流程種類選擇 工作流(Workflow),然后 Run this workflow in the background (recommended) 這個選項不要選中。
該實時工作流觸發的實際選擇 After Record is created,一般我選擇Execute as the owner of the workflow,以免實時工作流運行碰到權限問題。
添加一個步驟來設置當前實體這個自定義編號字段的值,字段值設置為兩個字段值的組合,分別如下:
這兩個字段值組合起來的值如下:
然后我去測試下,我新建一條記錄,保存,可以看到生成了我想要的自定義編號格式。