除了在上一篇文章中介紹的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()方法了。