CRM2011 脚本

来源:互联网 发布:已有淘宝账号怎么开店 编辑:程序博客网 时间:2024/05/16 13:43

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-xxxxxxxxxxxx11         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);
}

原创粉丝点击