• Dynamics CRM使用Web Api时如果参数里面包含"&"的时候的处理方法


    当我们使用Dynamics CRM的Api的时候如果遇到查询字段的参数里面有&符号的话会影响Api的取值直接报错。原因是因为&符号在Url上面是一个关键字,这个关键字可以截断Url表示后面跟一个参数。然而我们的&符号并不是作为关键字使用而是作为参数值使用的这样就影响我们代码的运行。

    这个问题比较让人头疼,查找了一下发现使用转义字符也会有问题,因为我们使用的是encodeURI进行转码的,但是它转码是有限制的,对于&符号是不会进行自动转码(详见下图)。这样就导致我们的数据传递给浏览器的时候还是以&的格式传递的。

     那么直接给&做转义行不行呢?尝试着把&转义成26%后又发现了新的问题,就是encodeURI虽然不会把&做转义但是会把%转义为25%,这样导致我们传递的参数值被改变了。

    通过调试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();
    }
  • 相关阅读:
    音频波谱通用类|超酷的说
    跟随鼠标的星星实例
    AS3放大镜工具类
    caurina缓动类
    AS3中 is,as,typeof的区别
    Loader ,URLLoader ,URLStream的区别
    (转)AS3正则:元子符,元序列,标志,数量表达符
    动态绘制扇形实例
    AS3.0绘图API
    as3效率优化
  • 原文地址:https://www.cnblogs.com/bzpfly/p/14200548.html
Copyright © 2020-2023  润新知