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();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Dynamics 365 WebApi 是一种用于与 Dynamics 365 应用程序进行交互的 RESTful API。通过 WebApi,开发人员可以使用 HTTP 请求与 Dynamics 365 中的实体进行交互,包括创建、更新、删除和检索等操作。 以下是一些常见的 Dynamics 365 WebApi 的用法和功能: 1. 认证和授权:在使用 WebApi 之前,需要进行身份验证和授权。可以使用 Azure Active Directory (AAD) 或其他支持 OAuth 2.0 的身份验证提供程序进行身份验证,并获取访问令牌用于访问 Dynamics 365。 2. 实体操作:使用 WebApi 可以对 Dynamics 365 中的实体进行各种操作,如创建、更新、删除和检索。可以使用 HTTP 请求(如 POST、PUT、DELETE 和 GET)来执行这些操作,并通过请求的 URL 和有效载荷指定要操作的实体和属性。 3. 查询和筛选:WebApi 支持使用 OData 查询语言来执行高级查询和筛选操作。可以使用查询字符串参数来指定要检索的实体类型、要筛选的属性、排序方式、过滤条件等。 4. 关联和导航属性:Dynamics 365 中的实体之间可能存在关联关系,WebApi 允许通过关联属性和导航属性来处理这些关系。可以使用关联属性来创建、更新和删除关联记录,使用导航属性来检索关联记录。 5. 批量操作:WebApi 支持批量操作,可以在单个 HTTP 请求中执行多个操作。可以将多个实体的创建、更新和删除操作组合到一个批处理请求中,以提高性能和减少网络延迟。 总的来说,Dynamics 365 WebApi 提供了一个强大且灵活的方式来与 Dynamics 365 应用程序进行集成和操作数据。开发人员可以根据业务需求使用 WebApi 来构建自定义的应用程序、集成系统或扩展现有功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值