Microsoft Dynamics CRM 2011中,Lookup字段的赋值

时间:2021-04-19 07:35:35

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