在微軟CRM中,有一種名為“查找”類型的字段,以代表子表中的外鍵字段,這種字段,被稱為查找類型字段,lookup字段,或者EntityReference字段。該字段的數據類型是Guid——Microsoft Dynamics CRM中,數據表的主鍵的數據類型是Guid類型的。
在MS CRM平台層,查找類型字段包含三方面的信息:
- 第一,Guid值,即主表的主鍵值;
- 第二,name值,即主表的主字段的值。所謂主字段信息,就是一條數據記錄的摘要描述,例如客戶實體的“name”字段——客戶名稱、系統用戶實體的“fullname”字段——系統用戶的全名,等等字段,都是主字段信息;
- 第三,實體類型entityType,即當前外鍵鏈接的數據表信息,當然了,在Dynamics CRM平台范疇內,應該叫做實體名稱;
基於以上的解釋,我們就可以了解,和查找類型字段打交道時,需要:
- 獲取查找類型字段值時,可以從該字段值中解析出Guid、name以及entityType;
- 在為查找類型字段賦值時,需要將Guid、name以及entityType三個值拼裝起來,而后賦值給查找類型字段;
樣例代碼如下:
//讀取電話聯絡表單中的“負責人”字段值
1: var owner = Xrm.Page.getAttribute("ownerid");
2: if (owner == null)
3: return;
4: else
5: owner = owner.getValue();
6:
7: if (owner == null)
8: return;
9:
10: var ownerId = owner[0].id;
11: var ownerName = owner[0].name;
12: var ownerEntityType = owner[0].entityType;
13:
14: var alertMsg = "當前記錄的負責人ID:" + ownerId + "\r\t" +
15: "當前記錄的負責人名字:" + ownerName + "\r\t" +
16: "當前記錄的負責人的實體類型:" + ownerEntityType;
17:
18: alert(alertMsg);
可以在“電話聯絡”表單的OnLoad事件中,執行上述代碼,以驗證效果。
某些表單的查找字段,可以允許關聯多條記錄,例如電話聯絡表單中的“接聽人”字段。而正是由於這種字段的存在,所以才有了上面代碼中使用owner[0]去獲取數據值的代碼。換而言之,無論是允許單選,還是允許多選,都是一個查找類型字段,為了滿足兩種情況,查找類型字段使用了數組去承載該字段所關聯的數據記錄,每個數組元素對應一個關聯的數據記錄,每條數據記錄中包含有三部分信息,即id、name以及entityType。
故此,在進行允許關聯多條記錄的查找字段進行操作的時候,就是拼裝一個數組,每個數組元素對應一個關聯記錄,每個元素有三個屬性:id、name以及entityType。樣例代碼如下:
//魏電話聯絡表單中的“接聽人”字段賦值
1: if (typeof(daemonlin) == "undefined") {
2: daemonlin = {};
3: }
4:
5: if (typeof(daemonlin.PhoneCall) == "undefined") {
6: daemonlin.PhoneCall = {};
7: }
8:
9: daemonlin.PhoneCall.Form =
10: {
11: onLoadHander: function () {
12: var toValue = new Array();
13: toValue[0] = new Object();
14: toValue[0].id = "8C8BEEC7-CAFC-E011-A7EB-0800273C14DE";
15: toValue[0].entityType = "account";
16: toValue[0].name = "小林商店 (示例)";
17:
18: toValue[1] = new Object();
19: toValue[1].id = "3E0AD1DF-3359-E111-9BFB-0800273C14DE";
20: toValue[1].entityType = "account";
21: toValue[1].name = "test";
22:
23: Xrm.Page.getAttribute("to").setValue(toValue);
24: }
25: }