在页面交互脚本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. Python <算法思想集结>之抽丝剥茧聊动态规划

    1. 概述 动态规划算法应用非常之广泛. 对于算法学习者而言,不跨过动态规划这道门,不算真正了解算法. 初接触动态规划者,理解其思想精髓会存在一定的难度,本文将通过一个案例,抽丝剥茧般和大家聊聊动态规 ...

  2. Java包机制和JavaDoc

    目录 包机制 JavaDoc 视频课程 包机制 包的本质就是文件夹 为了更好的组织类, Java提供了包机制, 用于区别类名的命名空间, 使项目看起来更加整洁 一般公司庸域名倒置作为包名 为了能够使用 ...

  3. 用STM32玩SR04(测距、串口显示、OLED显示)

    目录 用STM32玩SR04(测距.串口显示.OLED显示) 超声波模块使用 SR04初始化 SR04使用串口打印数据 SR04使用OLED来传输数据,并显示在OLED上 用STM32玩SR04(测距 ...

  4. element-ui table组件使用v-if时的问题

    element-ui项目中经常遇到需要使用v-if指令来根据情况动态显示隐藏某些列情况,这时就会出现滚动条样式异常.列错乱.列宽错乱等问题 解决办法:在el-table上添加:key="Ma ...

  5. Linux服务器启动jstatd服务

    Linux服务器启动jstatd服务 1.查找jdk所在目录 2.在jdk的bin目录下创建文件jstatd.all.policy touch jstatd.all.policy 3.写入安全配置 g ...

  6. ebook下载 | 灵雀云发布《 企业高管IT战略指南——为何选择容器与Kubernetes》

    发送关键词[高管指南]至灵雀云公众号,立即下载完整版电子书 "本书将提供企业领导者/IT高管应该了解的,所有关于容器技术和Kubernetes的基础认知和关键概念,突破技术语言屏障,全面梳理 ...

  7. React项目中 使用 CSS Module

    安装react-app-rewired 由于新的 react-app-rewired@2.x 版本的关系,还需要安装 customize-cra.但是我们这里不需要安装 react-app-rewir ...

  8. nifi从入门到实战(保姆级教程)——环境篇

    背景: 公司领导决定将各种基础数据的导入从代码中分离出来,用Apache Nifi替换.使开发者们更关注在业务上,而不用关心基础的由来. Apache Nifi对于整个团队都是一个全新的工具,之前大家 ...

  9. Spring 核心概念

    Spring 核心概念 引言 本文主要介绍 Spring 源码中使用到的一些核心类 1. BeanDefinition BeanDefinition表示Bean定义,BeanDefinition 中存 ...

  10. Template -「矩阵 - 行列式」

    #include <cstdio> int Abs(int x) { return x < 0 ? -x : x; } int Max(int x, int y) { return ...