Dynamics CRM - js中用webapi基于fetchxml查询遇到的问题 -- Invalid URI: The Uri scheme is too long.
最近用WebApi做基于Fetchxml的查询的时候,遇到一个很蛋疼的报错:Invalid URI: The Uri scheme is too long.
检查了整个URL,也没发现有什么问题.
----------------------------------------------------
我这边是基于原来的代码做了一点点改动,就是把基于Date的查询修改为基于DateTime.
原来查询条件是:
<condition attribute="createdon" operator="on-or-before" value='2019-06-01' />
<condition attribute="createdon" operator="on-or-after" value='2019-06-12' />
修改后的条件==>
<condition attribute="createdon" operator="on-or-before" value='2019-06-01 16:00:00'' />
<condition attribute="createdon" operator="on-or-after" value='2019-06-12' 16:00:00 />
然后就出现了Invalid URI: The Uri scheme is too long.的错误信息.
于是乎,开始了艰辛的问题排查.
初步发现的问题:
1.on-or-before\on-or-after并不支持时分秒
2.如果把查询的字段减少一部分,则不会报错
-----修改代码继续排错-----修改后的条件==>--------
<condition attribute="createdon" operator="ge" value='2019-06-01 16:00:00' />
<condition attribute="createdon" operator="lt" value='2019-06-12 16:00:00' />
然而,还是同样的问题(减少一部分查询字段,跟上面一样,不会报错)...
既然还是提示too long..那我就把GET改为POST,总该行了吧..
var fetchUri = "http://xxxxxx/api/data/v8.2/$batch"; var body = [];
body.push('--batch_postfetch');
body.push('Content-Type: application/http');
body.push('Accept: application/json');
body.push('Content-Transfer-Encoding: binary');
body.push('');
body.push('GET ' + "http://xxxxxx/api/data/v8.2/accounts" + "?fetchXml=" + encodeURI(fetchXMLQuery) + ' HTTP/1.1');
body.push('Content-Type: application/json');
body.push('Accept: application/json');
body.push('OData-Version: 4.0');
body.push('OData-MaxVersion: 4.0');
body.push('Prefer:odata.include-annotations=OData.Community.Display.V1.FormattedValue');
body.push('');
body.push('--batch_postfetch--'); var req = new XMLHttpRequest();
req.open("POST", fetchUri, true);
req.setRequestHeader("Content-Type", 'multipart/mixed;boundary=batch_postfetch');
req.setRequestHeader("Accept", "application/json");
req.setRequestHeader("OData-MaxVersion", "4.0");
req.setRequestHeader("OData-Version", "4.0");
req.setRequestHeader("Prefer", "odata.include-annotations=OData.Community.Display.V1.FormattedValue");
req.onreadystatechange = function () {//此处省略1w行代码} req.send(body.join('\r\n'));
没错,还是同样的问题..在一次偶然的机会中,发现在CRM REST Builder的Predefined Query中查询,则可以正常查询~
fetchXML还是那段fetchXML,唯一的区别则是我的代码,xml是经过了encodeURI进行编码.
于是乎,用encodeURIComponent编码后再进行查询,正确运行...
想了一下,大概原因是,时分秒那里包含了冒号:,而encodeURI遇到冒号:时,并不会对其进行转义;
关于encodeURI跟encodeURIComponent的区别,可看下这篇博文,有比较形象的说明:https://www.cnblogs.com/shuiyi/p/5277233.html
-------------------------------
至此,问题似乎已经得到了解决,其实,还有一个细节上的东西,就是在用le,ge,lt,gt操作符的时候,如果记得使用UTC格式的时间
所以,最终我们的condition还需要做下修改:
<condition attribute="createdon" operator="ge" value='2019-06-01T16:00:00Z' />
<condition attribute="createdon" operator="lt" value='2019-06-12T16:00:00Z' />
到这里,问题才是真正的得到了解决~~
Dynamics CRM - js中用webapi基于fetchxml查询遇到的问题 -- Invalid URI: The Uri scheme is too long.的更多相关文章
- Dynamics CRM JS的调试的弊端解决办法
说道CRMJS的调试的博客,之前已经有人写过.很简单,和平常网站JS的调试过程大致相同. 但是Dynamics 中JS调试最麻烦的莫过于出错之后需要修改代码了.因为随着JS代码的修改,伴随着需要保存和 ...
- Microsoft Dynamics CRM 常用JS语法(已转成vs2017语法提示)
背景 最近接触到Microsoft Dynamics CRM的开发.前端js是必不可少的部分,奈何没有一个语法提示,点不出来后续的语句. 在vscode上面搜索插件的时候发现,有一个大神写的插件htt ...
- Dynamics CRM 2011编程系列(60):JS编程之CRUD辅助类(JQuery版)
今天给大家分享一个JQuery版的REST辅助类,在一年前我分享过一个只能在IE环境下运行的REST辅助类:<JS编程之实体CRUD辅助类 >.为什么要推出JQuery版的CRUD辅助类呢 ...
- Dynamics CRM 警惕Odata查询的陷阱
Dynamics CRM可以很方便的通过用Odata通过AJAX查询到数据.查询分为两种:精确查找和模糊查找. 精确查找是指通过GUID匹配得到一条数据,如: http://CRMURL/org/XR ...
- Dynamics CRM 2011 FetchXml QueryExpression LINQ
Dynamics CRM 2011支持三种查询语句 FetchXml QueryExpression LINQ 查询 功能 保存 FetchXml 支持QueryExpression的所有功能,额外支 ...
- Dynamics CRM使用元数据之一:查询实体的主字段(托管代码版本)
关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复159或者20151013可方便获取本文,同时可以在第一时间得到我发布的最新的博文信息,follow me! Dynamics CRM是基于元 ...
- Microsoft Dynamics CRM 2011 当您在 大型数据集上执行 RetrieveMultiple 查询很慢的解决方法
症状 当您在 Microsoft Dynamics CRM 2011 年大型数据集上执行 RetrieveMultiple 查询时,您会比较慢. 原因 发生此问题是因为大型数据集缓存 Retrieve ...
- Dynamics CRM 日常使用JS整理(一)
整理下平时CRM开发中用到的一些基本的js操作 取值: var oResult = Xrm.Page.getAttribute(sFieldName).getValue(); var oResult ...
- Dynamics CRM 2015/2016 Web API:聚合查询
各位小伙伴们,今天是博主2016年发的第一篇文章.首先祝大家新年快乐.工资Double,哈哈.今天我们来看一个比較重要的Feature--使用Web API运行FetchXML查询! 对的,各位.你们 ...
随机推荐
- JS---DOM---案例:模拟百度搜索框
模拟百度搜索框 我的思路整理: 1. 注册文本框抬起事件(onkeyup) 2. 处理函数: --->创建临时数组,循环遍历文本框键入的文字内容和keywords数组,用keyWords[i]. ...
- Azure 上的高可用概念
更多内容,添加公众号关注: 场景一: 某智能家居厂家,用户喊出“小X同学,帮我扫地”后,服务器宕机了,扫地机器人不能立即启动,于是,用户可能再连续喊几次后,无奈又习惯的按下了扫地机器人的启动按钮. 场 ...
- java bean 属性验证框架 valid
项目介绍 java 开发中,参数校验是非常常见的需求. 但是 hibernate-validator 在使用过程中,依然会存在一些问题. 特性 支持 fluent-validation 支持 jsr- ...
- 精通awk系列(2):本教程测试所用示例文件
回到: Linux系列文章 Shell系列文章 Awk系列文章 本系列的awk教程中,将大量使用到如下示例文件a.txt. ID name gender age email phone 1 Bob m ...
- Centos7通过yum跟源码编译安装Nginx
源码编译安装 http://nginx.org/en/download.html 到官网下载,然后用XFTP上传到root目录 把文件解压出来 tar -zxvf nginx-1.16.0.tar.g ...
- 一个有意思的自我介绍PPT快闪
模版来源:http://ppt.dede58.com/peixunyanjiang/27066.html
- node、npm、chrome、v8、sandbox是什么?
这些东西有些比较常用,有些仅知道个名称,但无论是熟悉还是陌生的,要比较精确地解释这些东西,是有一定的难度,可这些东西对前端开发非常重要,还是需要有明确的概念. PS:内容点到即止,不然一个东西一篇文章 ...
- C#实现将图片设置成圆形形式显示
首先在Form中添加一个控件,然后将控件的背景BackColor设置成透明 . 然后分别设置控件的Image: Image image = Image.FromFile(UserLoginInfor. ...
- 字段明明存在,用Web API使用该字段进行查询报错?
我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...
- CentOS 安装nginx服务
安装nginx服务 sudo yum install nginx 启动nginx systemctl start nginx 加入启动项 systemctl enable nginx 测试nginx服 ...