在微软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: }