Dynamics crm 中js调用api问题总结

问题1:在js调用api时,传的参数中包含特殊字符,例如:%,&,#等

具体实例如下(个例情况具体处理,其他处理类似,懒得提取公共方法):

function Field_opportunity() {
    var new_value = "";
    var name = Xrm.Page.getAttribute("new_name").getValue();
    var num = 0;
    var clientURL = Xrm.Page.context.getClientUrl();
    var req = new XMLHttpRequest();
    if (name.includes("&")) {
        name = name.replace("&", "%26");
        num = 1;
    }
    var url = encodeURI(clientURL + "/api/data/v9.0/new_opportunityfieldses?$select=new_name&$filter=new_name eq '" + name + "'")
    if (num = 1) {
        url = url.replace("%2526", "%26");
    }
    req.open("GET", url, false);//'
    req.setRequestHeader("Accept", "application/json");
    req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
    req.setRequestHeader("OData-MaxVersion", "4.0");
    req.setRequestHeader("OData-Version", "4.0");
    req.onreadystatechange = function () {
        if (this.readyState == 4) {
            req.onreadystatechange = null;
            if (this.status == 200) {
                var rdata = JSON.parse(this.responseText);
                new_value = rdata.value[0].new_name;
                if (new_value != "") {
                    alert("该名称已存在,请修改");
                    Xrm.Page.getAttribute("new_name").setValue("");
                }
            }
            else {
                var error = JSON.parse(this.responseText).error;
                Xrm.Utility.alertDialog("查询实体记录出错." + error.message);
                result = false;
            }
        }
    };
    req.send();
}

当上面参数name中包含'&'符号时,需要在encodeURI(clientURL + "/api/data/v9.0/new_opportunityfieldses?$select=new_name&$filter=new_name eq '" + name + "'"),处理数据前,先将参数name中的‘&’符号替换掉(参照url中特殊字符处理办法),然后在使用encodeURI方法,处理完的数据再次检查,替换掉包含的特殊字符,就可以正常调用api查询数据。

当然,在数据查询的过程中,尽量避免使用name座位查询条件,一般都采用唯一值的guid值作为查询条件,就要可以不用考虑数据处理问题,但是有一点需要注意:

实例如下:

//执行项目经理查找列表
function ManagerFilter() {
    var ManagerFilter;
    var deliveryDeptid=null;
    var deliveryDeptValue = Xrm.Page.getAttribute("new_deliverydept").getValue();
    if (deliveryDeptValue != null) {
        deliveryDeptid = deliveryDeptValue[0].id.replace(/\{/, '').replace(/\}/, '');
    }
    var new_externalid = '';
    var clientURL = Xrm.Page.context.getClientUrl();
    var req = new XMLHttpRequest();
    var url = encodeURI(clientURL + "/api/data/v9.0/businessunits?$select=new_externalid&$filter=businessunitid eq " + deliveryDeptid)
    req.open("GET", url, false);
    req.setRequestHeader("Accept", "application/json");
    req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
    req.setRequestHeader("OData-MaxVersion", "4.0");
    req.setRequestHeader("OData-Version", "4.0");
    req.onreadystatechange = function () {
        if (this.readyState == 4) {
            req.onreadystatechange = null;
            if (this.status == 200) {
                var rdata = JSON.parse(this.responseText);
                new_externalid = rdata.value[0].new_externalid;
                ManagerFilter = "<filter type='and'>" +
                "<condition attribute='new_bussinessid' operator='eq' value='" + new_externalid + "' />" +                    
                "</filter>";

                Xrm.Page.getControl("new_executiveprojectmanager").addCustomFilter(ManagerFilter, 'new_crm_user');  //对lookup字段值进行过滤处理
            }
            else {
                var error = JSON.parse(this.responseText).error;
                Xrm.Utility.alertDialog("查询实体记录出错." + error.message);
                result = false;
            }
        }
    };
    req.send();

}




上面实例中的方法:var url = encodeURI(clientURL + "/api/data/v9.0/businessunits?$select=new_externalid&$filter=businessunitid eq " + deliveryDeptid),大家经常会习惯于写成

var url = encodeURI(clientURL + "/api/data/v9.0/businessunits?$select=new_externalid&$filter=businessunitid eq  +‘"deliveryDeptid"' "),这样在调用api去send处理数据时,就会报错显示

"string无法转化为guid"的错误。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值