在页面交互脚本js中实现窗体交互逻辑是很常见的crm场景,一般情况下使用拓展工具RESTBuilder编辑器,可以很方便的进行操作,增删改查均能实现,但在某些较为特殊的场景下,需要根据条件去拼接查询过滤条件的,使用编辑器生成的代码无法实现,需要结合使用fetchXML,当然这个编辑器中也拓展了结合fetchxml的方式,跟webapi调用一样只不过需要传递fetchxml,项目中使用了一个封装好的JS工具库XrmServiceToolkit.js,使用起来更方便,直接调用方法和传递fetchxml即可。
方法如下:
1.解决方案中添加XrmServiceToolkit.js Web资源 
2.业务实体的窗体资源中添加XrmServiceToolkit.js
3.业务实体窗体单独的交互js脚本中 fetchXML方式调用查询
 1 var moduleid = Xrm.Page.data.entity.getId();
2     var fetchXML = '<fetch mapping="logical" version="1.0">'
3         + '<entity name="crm_ordermanage">'
4         + '<attribute name="crm_name" />'
5         + '<filter>'
6         + '<condition attribute="crm_ordermanageid" operator="eq" value="' + moduleid + '" />'
7         + '</filter>'
8         + '<link-entity name="opportunity" from="opportunityid" to="crm_opportunity" alias="b" link-type="inner">'
9         + '<attribute name="crm_oldproject" />'
10         + '<attribute name="crm_approvalstatus" />'
11         + '<filter>'
12         + '<condition attribute="crm_oldproject" operator="not-null" />'
13         + '<condition attribute="crm_approvalstatus" operator="eq" value="171060002" />'
14         + '</filter>'
15         + '</link-entity>'
16         + '</entity>'
17         + '</fetch>'
18     var query = XrmServiceToolkit.Soap.Fetch(fetchXML);
19     if (query.length <= 0) {
20         Xrm.Utility.alertDialog("查询失败!");
21         return;
22     }
可以把查询的FetchXML单独弄一个方法,并且查询的过滤条件可以都放到最下面,也可以在单独link的实体里单独过滤,放到最下方过滤的方式如下:
 1 function getOrderManagerFetchXML(orderdetailid) {
2     var fetchXML = '<fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="false">'
3         + '<entity name = "crm_ordermanage" >'
4         + '<attribute name="crm_orderclassification" />'
5         + '<link-entity name="crm_ordermanagedetails" from="crm_ordermanage" to="crm_ordermanageid" alias="ab" link-type="outer">'
6         + '<attribute name="crm_ordermanagedetailsid" />'
7         + '</link-entity>'
8         + '<filter>'
9         + '<condition entityname="ab" attribute="crm_ordermanagedetailsid"  value="' + orderdetailid + '" operator="eq" />'
10         + '</filter>'
11         + '</entity >'
12         + '</fetch >';
13     return fetchXML;
14 }
调用传值编码问题:
在js中写的fetchXML语句,在发起调用接口前,都需要先用encodeURIComponent转义一下
 
但在转义后,原先进行模糊查询的过滤条件就偶尔调用不成功,后来发现是0开头或者9结尾的都不能查询 查询后发现%连接0或9%都在转义后有特殊意义 所以才会报错无效的xml格式 最后找到解决办法
%的后面加上25 即将原来的%替换成%25 问题就解决了

 
 

Dynamic CRM使用FetchXML在js中查询与调用传递编码问题的更多相关文章

  1. 关于js中函数的调用问题

    js中函数的调用方法 1.直接调用 函数名(参数): 2.通过指向函数的变量去调用 例如: var myval = 函数名: 此刻 myval是指向函数的一个指针: myval(实际参数):此刻调用的 ...

  2. JS中函数的调用和this的值

    调用每一个函数会暂停当前函数的执行,传递控制权和参数给新函数.除了声明时定义的形式参数,每个函数还接收两个附加的参数:this 和 arguments. 参数this在面向对象编程中非常重要,他的值取 ...

  3. 使用另一种方式实现js中Function的调用(call/apply/bind)

    在JavaScript中函数的调用可以有多种方式,但更经典的莫过于call和apply.call跟apply都绑定在函数上,他们两个的第一个参数意义相同,传入一个对象,他作为函数的执行环境(实质上是为 ...

  4. JS中的的Url传递中文参数乱码,如何获取Url中参数问题

    一:Js的Url中传递中文参数乱码问题,重点:encodeURI编码,decodeURI解码: 1.传参页面Javascript代码:<script type=”text/javascript” ...

  5. 在Node.js中使用ffi调用dll

    类似的文章还是比较多的,但或多或少有一些问题没有解决,在此我将其整合并分享给大家: 测试环境: Node.js 9.9.0 VisualStudio 2015 "ffi": &qu ...

  6. js中的apply调用

    今天看了阮一锋老师的一篇文章,感觉很明了对闭包的理解,尤其是文章中的apply的介绍 apply()是函数对象的一个方法,它的作用是改变函数的调用对象,它的第一个参数就表示改变后的调用这个函数的对象. ...

  7. js中字符串可以调用的方法

    var s = "hello,world"   //定义一个字符串 s.length()                   // => 11 s.charAt(0)     ...

  8. js中的方法调用

    <script> var m = {com: { sao: {citi:{}}}}; m.com.sao.citi.init = new function() { this.name = ...

  9. js中通过ajax调用网上接口

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...

随机推荐

  1. PyTorch DataSet Normalization torchvision.transforms.Normalize()

         特征缩放, 在这种情况下,我们不仅仅考虑是一个值的数据集,我们考虑的是具有多个特征和相关的值的样本或元素的数据集. 假如正在处理一个人的数据集,           归一化数据集有许多不同的 ...

  2. Spring cloud gateway 如何在路由时进行负载均衡

    本文为博主原创,转载请注明出处: 1.spring cloud gateway 配置路由 在网关模块的配置文件中配置路由: spring: cloud: gateway: routes: - id: ...

  3. Eureka属性配置

    一:Eureka Instance实例信息配置   里面的配置以"-"隔开 其实也支持驼峰命名代替"-" 首先是入门时的配置: server: port: 80 ...

  4. SpringBoot之:SpringBoot中使用HATEOAS

    目录 简介 我们的目标 构建Entity和Repository 构建HATEOAS相关的RepresentationModel 构建Controller HATEOAS的意义 总结 简介 HATEOA ...

  5. BUUCTF-佛系少年

    佛系少年 这题我感觉超扯,不知道当时环境是不是断网的,断网咋解密的出来.. 下载后有个压缩包,带加密的,首先16进制看看是否是真加密 这里可以看到,压缩包数据区这里都是未加密的方式 但是到了压缩包目录 ...

  6. Vue.js与ElementUI搭建无限级联层级表格组件

    前言 今天,回老家了.第一件事就是回家把大屏安排上,写作的感觉太爽了,终于可以专心地写文章了.我们今天要做的项目是怎么样搭建一个无限级联层级表格组件,好了,多了不多说,赶快行动起来吧!项目一览 到底是 ...

  7. UiPath邮件自动化

    在UiPath中下载Outlook电子邮件附件Outlook电子邮件自动化教程UiPathRPAhttps://www.bilibili.com/video/BV1oK411L72T 在UiPath中 ...

  8. bat-注册表修改win11右键风格

    展开:reg add "HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32&q ...

  9. Tapdata Cloud 版本上新!率先支持数据校验、类型映射等6大新功能

    Tapdata Cloud cloud.tapdata.net Tapdata Cloud 是国内首家异构数据库实时同步云平台,目前支持 Oracle.MySQL.PG.SQL Server.Mong ...

  10. javascript基本属性访问对象的属性和方法

    var myName = "Shelley"; //字符串基本类型 alert(myName.length);  //隐式创建String对象,数值与myName相同,并执行len ...