当我们使用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();
}

Dynamics CRM使用Web Api时如果参数里面包含"&"的时候的处理方法的更多相关文章

  1. Dynamics CRM 中Web API中的深度创建(Deep Insert)

    我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...

  2. Dynamics CRM 2016 Web API 消息列表

    Function Name Description CalculateTotalTimeIncident Function Calculates the total time, in minutes, ...

  3. 让ASP.NET Web API支持$format参数的方法

    在不使用OData的情况下,也可以让ASP.NET Web API支持$format参数,只要在WebApiConfig里添加如下三行红色粗体代码即可: using System; using Sys ...

  4. [转]让ASP.NET Web API支持$format参数的方法

    本文转自:http://www.cnblogs.com/liuzhendong/p/4228592.html 在不使用OData的情况下,也可以让ASP.NET Web API支持$format参数, ...

  5. 在Angular.js中的H5页面调用Web api时跨域问题处理

    /// <summary> /// 被请求时 /// 在Angular.js中的H5页面调用Web api时跨域问题处理 /// </summary> /// <para ...

  6. Windows Server 部署WEB API时内部错误

    Windows Server 部署WEB API时,发生HTTP 错误 500.21 - Internal Server Error,如图所示: 错误原因:IIS注册Framework4.0 解决方法 ...

  7. Dynamics 365中使用Web API将查找字段的值设置为空值的方法。

    摘要: 本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复270或者20180424可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyon ...

  8. .NET Core WEB API中接口参数的模型绑定的理解

    在.NET Core WEB API中参数的模型绑定方式有以下表格中的几种: 微软官方文档说明地址:https://docs.microsoft.com/zh-cn/aspnet/core/web-a ...

  9. ASP.NET Web API 2 之参数验证

    Ø  前言 目前 C# 比较流行使用 ASP.NET Web API 来承载 Web 接口,提供与客户端之间的数据交互,现在的版本已经是 2.0 了.既然是接口就少不了对输入参数的验证,所以本文主要探 ...

随机推荐

  1. react hooks useEffect 取消 promise

    react hooks useEffect 取消 promise cancel promise https://github.com/facebook/react/issues/15006#issue ...

  2. 什么是NGK节点?NGK的节点有什么作用?

    从2018年EOS竞选超级节点火爆整个区块链圈,节点和超级节点就成为了热议的话题,时至今日,热度依然不减.节点是项目生态发展的重要组成部分,超级节点对项目的运行.安全更是起着至关重要的作用.   什么 ...

  3. epoll使用

    epoll通过下面3个epoll系统调用为用户提供服务. (1)epoll_create系统调用 epoll_create在C库中的原型如下: int epoll_create(int size); ...

  4. Dev GridControl列绑定LookUpEdit数据源:默认值

    在Winform开发过程中,GridControl控件是比较常见的,尤其是其数据源的灵活性,为我们提供了不少的便利. 在使用Dev的GridControl的时候,有时候会在列的Column Edit属 ...

  5. 构建Docker私有仓库

    一.Docker私有仓库   上一篇说了如何利用Dockerfile在已有镜像的基础上构建自己的镜像,那么如果需要让镜像在一个团队中使用,就需要一个仓库,有几种方式可以共享私有镜像. 1.将镜像上传至 ...

  6. JSON的stringify和parse方法

    一.JSON.parse() 方法用于将一个 JSON 字符串转换为对象. 以下代码为将字符串解析为对象,然后再赋值给对象 //页面初始化完成加载,option是传递的参数 onLoad: funct ...

  7. MySQL 导出 select 结果集

    reference: https://blog.csdn.net/huaishuming/article/details/74762652法一:SELECT * from jc_archives wh ...

  8. go的循环

    目录 go的循环 一.语法 二.语法简写 1.省略第一部分 2.省略第二部分 3.省略第三部分 4.全省略:死循环 5.终极写法,简洁变形 go的循环 Go中只有for循环,没有while循环.因为w ...

  9. Python3+pygame实现的俄罗斯方块 代码完整 有演示效果

    一.简单说明 80.90后的小伙伴都玩过"俄罗斯方块",那种"叱咤风云"场景 偶尔闪现在脑海 真的是太爽了:如果没有来得及玩过的同学,这次可以真正的自己做一个了 ...

  10. Mybatis检查SQL注入

    Mybatis 的 Mapper.xml 语句中 parameterType 向SQL语句传参有两种方式:#{ } 和 ${ }. 使用#{ }是来防止SQL注入,使用${ }是用来动态拼接参数. 如 ...