Xrm.Page.getAttribute().getValue();
Xrm.Page.getAttribute().setValue();
var controls=Xrm.Page.ui.controls.get();
for(var i in controls){
var control=controls[i];
control.setVisible(false;
}
Xrm.Page.data.entity (addOnSave)
第一,通过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()方法了。
// JScript source code
//需要把lookup类型的字段的单选变为多选 document.getElementById("new_account").setAttribute("_lookupstyle", "multi");
//系统一个lookup字段new_account 一个文本类型字段储存xml new_txtxml
function formOnload() {
//设置lookup多选
document.getElementById("new_account").setAttribute("_lookupstyle", "multi");
getarrfromxml();
}
function formOnsave() {
PartyListSave("new_account", "new_txtxml");
}
//解析xml为数组,赋值给lookup类型字段
function getarrfromxml() {
if (Xrm.Page.ui.getFormType() != 1) {
var contentXml = Xrm.Page.getAttribute("new_txtxml").getValue();
if (contentXml != null) {
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.loadXML(contentXml);
var value = new Array();
var nodeList = xmlDoc.getElementsByTagName("li");
for (var i = 0; i < nodeList.length; i++) {
value[i] = new Object();
value[i].id = nodeList[i].getAttribute("oid");
value[i].name = nodeList[i].getAttribute("title");
value[i].typename = nodeList[i].getAttribute("otypename");
}
// alert(value);
crmForm.all["new_account"].DataValue = value;
// alert("赋值成功");
}
}
}
/*
* 保存,此方法两个参数 PartyListSave(textControl, multiTextControl)
*textControl 防lookup类型控件名称,其实这个控件的值是根据multiTextControl实时赋值的,在数据库中数值为空
* multiTextControl 多行文本类型字段储存xml字符串
*用法在onsave 时调用此方法 例子:函数中输入PartyListSave 在将传递给函数的以逗号分隔的参数列表中输入 'new_textControl','new_multiTextControl'
*/
function PartyListSave(textControl, multiTextControl) {
var url = window.location.host;
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.loadXML("<r></r>");
var root = xmlDoc.firstChild;
var tbl = document.getElementById(textControl + "_d").firstChild;
var div = tbl.rows[0].cells[0].firstChild;
var ul = div.childNodes[0];
var targetObject = Xrm.Page.getAttribute(textControl);
var targetObjectContent = Xrm.Page.getAttribute(multiTextControl);
root.setAttribute("tabIndex", div.tabIndex);
for (var i = 0; i < ul.childNodes.length; i++) {
var uNode = root.appendChild(xmlDoc.createElement("li"));
uNode.setAttribute("title", ul.childNodes[i].firstChild.title);
uNode.setAttribute("otypename", ul.childNodes[i].firstChild.otypename);
uNode.setAttribute("otype", ul.childNodes[i].firstChild.otype);
uNode.setAttribute("oid", ul.childNodes[i].firstChild.oid);
uNode.setAttribute("src", ul.childNodes[i].firstChild.firstChild.firstChild.src.replace("http://" + url, ""));
}
targetObjectContent.setValue(xmlDoc.xml);
targetObject.setValue(null);
}
方案二
// JScript source code
//此方法需要新建两个文本类型的字段new_txtxml一个存xml,new_txtarr一个存数组,一个lookup类型字段 new_account
//通过lookup字段给字段赋值数组
//lookup加载多选数组赋值,在onload时调用此方法
function fundinfoValue() {
document.getElementById("new_account").setAttribute("_lookupstyle", "multi");
if (Xrm.Page.ui.getFormType() != 1) {
var hor_arry = new Array();
var test = Xrm.Page.getAttribute("new_txtarr").getValue();
if (test != null) {
hor_arry = test.split(";");
var value = new Array();
var i = 0; var j = 0;
var id = new Array();
var name = new Array();
var typename = "实体名称";//例如 account
for (i = 0, j = 0; i < (hor_arry.length - 1); i = i + 2, j++) {
id[j] = hor_arry[i + 1];
name[j] = hor_arry[i];
}
for (i = 0; i < ((hor_arry.length - 1) / 2); i++) {
value[i] = new Object();
value[i].id = id[i];
value[i].name = name[i];
value[i].typename = typename;
}
crmForm.all["new_account"].DataValue = value;
}
}
}
//保存时调用此方法,给文本赋值数组
function onchangename() {
var value = crmForm.all["new_account"].DataValue;
var index;
var temp = "";
if (value != null) {
for (index = 0; index < value.length; index++) {
var temp2 = "";
temp2 = value[index].name + ";" + value[index].id + ";";
temp = temp + "" + temp2;
}
Xrm.Page.getAttribute("new_txtarr").setValue(temp);
}
}
/*
* 保存,此方法两个参数 PartyListSave(textControl, multiTextControl)
*textControl 防lookup类型控件名称,其实这个控件的值是根据multiTextControl实时赋值的,在数据库中数值为空
* multiTextControl 多行文本类型字段储存xml字符串
*用法在onsave 时调用此方法 例子:函数中输入PartyListSave 在将传递给函数的以逗号分隔的参数列表中输入 'new_textControl','new_multiTextControl'
*/
function PartyListSave(textControl, multiTextControl) {
var url = window.location.host;
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.loadXML("<r></r>");
var root = xmlDoc.firstChild;
var tbl = document.getElementById(textControl + "_d").firstChild;
var div = tbl.rows[0].cells[0].firstChild;
var ul = div.childNodes[0];
var targetObject = Xrm.Page.getAttribute(textControl);
var targetObjectContent = Xrm.Page.getAttribute(multiTextControl);
root.setAttribute("tabIndex", div.tabIndex);
for (var i = 0; i < ul.childNodes.length; i++) {
var uNode = root.appendChild(xmlDoc.createElement("li"));
uNode.setAttribute("title", ul.childNodes[i].firstChild.title);
uNode.setAttribute("otypename", ul.childNodes[i].firstChild.otypename);
uNode.setAttribute("otype", ul.childNodes[i].firstChild.otype);
uNode.setAttribute("oid", ul.childNodes[i].firstChild.oid);
uNode.setAttribute("src", ul.childNodes[i].firstChild.firstChild.firstChild.src.replace("http://" + url, ""));
}
targetObjectContent.setValue(xmlDoc.xml);
targetObject.setValue(null);
}