MS CRM 2011的自定义与开发(12)——表单脚本扩展开发(4)
除了在上一篇文章中介绍的Xrm.Page.data.entity对象本身包含的方法之外,Xrm.Page.data.entity对象还包含一个当前实体记录所有属性的集合,名为Xrm.Page.data.entity.attributes,其中包含了表单中所有字段的信息。同时,对每个字段,根据其数据类型的不同,Microsoft Dynamics CRM也提供了相应的一组方法进行操纵、管理与控制。
方法 |
描述 |
适用的字段类型 |
||||||||||||||||||||||
addOnChange | 输入参数为方法指针,添加字段OnChange事件的处理函数 | 所有 | ||||||||||||||||||||||
fireOnChange | 触发相应字段的OnChange事件,以执行该字段的OnChange事件的处理函数 | 所有 | ||||||||||||||||||||||
getAttributeType | 获取字段的数据类型,返回值为字符串,根据字段的数据类型不同,返回值可以是:"boolean"、"datetime"、"decimal"、"double"、"integer"、"lookup"、"memo"、"money"、 "optionset"、"string" |
所有 | ||||||||||||||||||||||
getFormat | 获取字段的格式化选项,返回值为字符串 | 所有 | ||||||||||||||||||||||
getInitialValue | 获取在表单打开时,bool类型或者OptionSet类型字段的初始值,返回值是数字 | bool、OptionSet | ||||||||||||||||||||||
getIsDirty | 获取一个bool值,以标明特定的字段在本次表单打开后,该字段值是否曾经被更改过 | 所有 | ||||||||||||||||||||||
getMax | 获取特定类型字段(money、decimal、integer、double)的最大值,返回值为数字 | money, decimal, integer, double | ||||||||||||||||||||||
getMaxLength | 获取string或者memo字段的最大长度,返回值为数字 | string、memo | ||||||||||||||||||||||
getMin | 获取特定类型字段(money、decimal、integer、double)的最小值,返回值为数字 | money, decimal, integer, double | ||||||||||||||||||||||
getName | 获取字段的逻辑名称,返回值为字符串 | 所有 | ||||||||||||||||||||||
getOption | 输入参数为数字或者字符串,返回一个对应于输入参数的option对象 | OptionSet | ||||||||||||||||||||||
getOptions | 返回OptionSet字段的所有下拉选项 | OptionSet | ||||||||||||||||||||||
getParent | 返回给定字段的实体记录对象 | 所有 | ||||||||||||||||||||||
getPrecision | 获取给定字段的精度值,所谓精度值指的是小数点右边的位数 | money, decimal, integer, double | ||||||||||||||||||||||
getRequiredLevel | 获取字段的需求级别,返回值包括有: none:无需求级别; required:业务必需; recommanded:建议填写 |
所有 | ||||||||||||||||||||||
getSelectedOption | 获取OptionSet字段的当前选定的选项 | OptionSet | ||||||||||||||||||||||
getSubmitMode | 获取字段的提交的模式,也就是说,在表单被保存时,特定字段的提交方式,返回值包括有: always:总是被提交 never:从不被提交 dirty:只有在值发生变化的时候才提交 |
所有 | ||||||||||||||||||||||
getText | 返回一个字符串,代表了当前OptionSet字段的选择项的文本信息 | OptionSet | ||||||||||||||||||||||
getUserPrivilege | 返回一个对象,以确定当前用户对本记录的操作权限,该对象的属性包括有: canRead:是否有读权限 canUpdate:是否有更新权限 canCreate:是否有创建权限 |
所有 | ||||||||||||||||||||||
getValue | 获取字段的值,对于不同类型的字段,值的类型是不同的,包括有:
|
所有 | ||||||||||||||||||||||
removeOnChange | 和addOnChange对应,将某个处理函数从相应字段的OnChange事件处理函数列表中移除 | 所有 | ||||||||||||||||||||||
setRequiredLevel | 设置字段的需求级别,接受的输入参数包括有: none:无需求级别; required:业务必需; recommanded:建议填写 |
所有 | ||||||||||||||||||||||
setSubmitMode | 设置提交模式,接受的输入参数包括有: always:总是被提交 never:从不被提交 dirty:只有在值发生变化的时候才提交 |
所有 | ||||||||||||||||||||||
setValue | 设置字段的值,不同类型的字段接收的值的类型也是不同的,具体的可以参见getValue部分的字段类型与字段值类型的对比介绍 | 所有 |
从Xrm.Page.data.entity.attributes集合中,获取属性的途径有以下几种:
第一,通过Xrm.Page.data.entity.attributes对象的get方法,获取所有的当前表单中的属性集合,例如:
var attributeList = Xrm.Page.data.entity.attributes.get();
另外,可以将方法指针作为参数传递给get()方法,从而可以根据条件对返回的属性进行筛选,例如下面的代码就是获取表单中所有lookup类型属性的样例代码:
var lookupAttrList = Xrm.Page.data.entity.attributes.get(isLookup);
function isLookup(attribute, index)
{
attribute.getAttributeType == “lookup”;
}第二,通过为Xrm.Page.data.entity.attributes.get()方法传入参数,获取参数指定的某个属性,输入参数是某个属性的逻辑名称,例如:
var firstNameAttr = Xrm.Page.data.entity.attributes.get(“firstname”);
就是在客户表单中,获取“名”这个属性。
第三,通过简写方式获取某个属性,即通过Xrm.Page.getAttribute()方法,并传入需要获取的属性的逻辑名称,得到某个属性,例如上面第二种途径的简化的写法:
var firstNameAttr = Xrm.Page.getAttribute(“firstName”);
关于操作属性的方法,有几个是需要注意的:
首先,操作Lookup类型的属性,由于该类字段的值是一个lookup对象的数组,所以在操作该字段的时候,需要小心。下面是获取lookup类型字段的方法:
1 var createdByAttr = Xrm.Page.getAttribute(“createdby”);
2 if (createdByAttr != null)
3 {
4 createdByAttr = createdByAttr.getValue();
5 if (createdByAttr != null)
6 {
7 createdByAttr = createdByAttr[0];
8 //lookup对应的关联的主要实体记录的逻辑名称
9 var createdBy_entityType = createdByAttr.entityType;
10 //一个GUID值,形如xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
11 var createdBy_id = createByAttr.id;
12 //lookup字段对应的关联的主要实体记录的主要名称
13 var createdBy_name = createdByAttr.name;
14 }
15 }为lookup字段赋值,就是一个反方向的操作:拼装一个lookup对象,将其作为数组的第一个元素,通过setValue()方法将数组赋值给一个lookup字段;
其次,Optionset类型的字段,简单而言,类似于HTML中的select元素。故此,该类型字段,包含有多个下拉选项option,每个选项有一个显示文本text,一个值value。
第三,对于datetime类型的字段,赋值的时候,需要使用Date类型的对象。
第四,表单中被禁用的字段,默认情况下,在保存的时刻,是不会被提交给服务器的,可以使用setSubmitMode()方法,并设置输入参数为“dirty”,可以将被禁用字段修改后的值提交给服务器。那么如何修改被禁用字段的值呢,当然是使用setValue()方法了。