使用CRM REST Builder的Predefined Query在js结合FetchXML语句进行查询
一般情况下使用拓展工具RESTBuilder编辑器,可以很方便的进行操作js中增删改查均能实现,但在某些较为特殊的场景下,需要根据条件去拼接查询过滤条件的,使用编辑器生成的代码无法实现,需要结合使用fetchXML,比如某个条件多个值都查询需要使用in查询,再或者需要过滤关联表中的某个字段的值。

代码使用示例:
1 /**
2 * 根据出口目的国以及限售区域判断是否存在不可销售的产品,如果存在,返回false
3 */
4 function checkProductRegion() {
5 var isSubmit = true;
6 let returnAnalysisId = commonUtil.delBrackets(Xrm.Page.data.entity.getId());
7 let destcountryId = commonUtil.getLookupId("new_destcountry") // 出口目的国
8 let destcountryName = commonUtil.getLookupName("new_destcountry") // 出口目的国
9
10 let returnAnalysisFetchXml = `<fetch mapping="logical" version="1.0">
11 <entity name="new_return_analysis_detail">
12 <attribute name="new_name"/>
13 <attribute name="new_product_fourthid"/>
14 <link-entity name="new_product_fourth" from="new_product_fourthid" to="new_product_fourthid" alias="PF" link-type="inner">
15 <attribute name="new_issale"/>
16 <link-entity name="new_product_team" from="new_product_teamid" to="new_product_teamid" alias="PT" link-type="inner">
17 <attribute name="new_restrictedsales"/>
18 </link-entity>
19 </link-entity>
20 <filter type="and">
21 <condition attribute="new_return_analysis" operator="eq" value="${returnAnalysisId}"/>
22 </filter>
23 </entity>
24 </fetch>`;
25
26 var url = `/new_return_analysis_details?fetchXml=${encodeURIComponent(returnAnalysisFetchXml.replace(/>\s+</g, '><'))}`;
27 commonUtil.queryWithUrl(url, (result) => {
28 if (result.data.filter(r => r["PF.new_issale"] == false).length > 0) {
29 isSubmit = false;
30 Xrm.Utility.alertDialog(`提交失败 : 明细中有物料不可销售`);
31 return isSubmit;
32 }
33 let restrictedProdList = result.data.filter(r => r["PT.new_restrictedsales"] == 10).map(p => p._new_product_fourthid_value)
34 if (restrictedProdList.length == 0) {
35 return isSubmit;
36 }
37
38 let productRegionRelationShipFetchXml = `<fetch mapping="logical" version="1.0">
39 <entity name="new_productregionrelationship">
40 <attribute name="new_productcode" />
41 <attribute name="new_country_region" />
42 <filter type="and">
43 <condition attribute="new_productcode" operator="in"><value>${restrictedProdList.join('</value><value>')}</value></condition >
44 <condition attribute="new_country_region" operator="eq" value="${destcountryId}" />
45 </filter>
46 </entity>
47 </fetch>`;
48
49 var url = `/new_productregionrelationships?fetchXml=${encodeURIComponent(productRegionRelationShipFetchXml.replace(/>\s+</g, '><'))}`;
50 commonUtil.queryWithUrl(url, (results) => {
51 // 限制区域的产品资源数量 != 查询到的【产品资源与销售区域的关系】数量
52 // 也就是存在当前出库目的国不可销售的产品资源
53 let canntSaleList = restrictedProdList.filter(p => !results.data.some(r =>r.new_productcode === p.id))
54 if (canntSaleList.length) {
55 isSubmit = false;
56 let prodNameList = result.data.filter(r => canntSaleList.indexOf(r._new_product_fourthid_value) >= 0).map(p => p.new_name)
57 Xrm.Utility.alertDialog(`提交失败 : ${`收益分析明细[${prodNameList.join(",")}]在出口目的国[${destcountryName}]不可销售! `}`);
58 }
59 }, false);
60 }, false);
61
62 return isSubmit;
63 }
let shipmentId = commonUtil.delBrackets(Xrm.Page.data.entity.getId())
let fetchXml = `<fetch mapping="logical" version="1.0">
<entity name="new_box_single_detail">
<attribute name="new_customs_receipts"/>
<attribute name="new_is_erp"/>
<link-entity name="new_outbound_order_details" from="new_outbound_order_detailsid" to="new_out_detail" alias="OOD" link-type="inner"/>
<filter type="and">
<condition entityname="OOD" attribute="new_outbound_order" operator="eq" value="${shipmentId}"/>
</filter>
</entity>
</fetch>`
let boxDetailQuery = `/new_box_single_details?fetchXml=${encodeURIComponent(fetchXml.replace(/>\s+</g, '><'))}`
let showButton = false
commonUtil.queryWithUrl(boxDetailQuery, result => {
showButton = result.success && result.data.length
&& result.data.filter(d => !d.new_is_erp && d.new_customs_receipts).length > 0
}, false)
1 let fetchXml = `<fetch mapping="logical" version="1.0">
2 <entity name="foton_kd_claimdetail">
3 <all-attributes />
4 <link-entity name="foton_kd_vehiclelib" from="foton_kd_vehiclelibid" to="foton_vehicle" alias="LIB" link-type="inner"/>
5 <filter type="and">
6 <condition entityname="LIB" attribute="foton_codefoton" operator="eq" value="${vehicleno}"/>
7 <condition attribute="foton_ftcontractno" operator="eq" value="${contractno}"/>
8 <filter type="or">
9 <filter type="and">
10 <condition attribute="foton_status" operator="eq" value="136020000"/>
11 <condition attribute="foton_addtype" operator="eq" value="136020001"/>
12 </filter>
13 <condition attribute="foton_status" operator="eq" value="136020005"/>
14 </filter>
15 </filter>
16 </entity>
17 </fetch>`
18 let queryStr = `/foton_kd_claimdetails?fetchXml=${encodeURIComponent(fetchXml.replace(/>\s+</g, '><'))}`
19 //queryStr += ` and ((foton_status eq 136020000 and foton_addtype eq 136020001) or foton_status eq 136020005)&$orderby=createdon desc,foton_nofoton asc`
20 commonUtil.queryWithUrl(queryStr, result => {
21 debugger
22 if (!result.success || !result.data || result.data.length < 1) {
23 Xrm.Utility.alertDialog("未能查询到索赔明细数据!")
24 return
25 }
26 }
使用CRM REST Builder的Predefined Query在js结合FetchXML语句进行查询的更多相关文章
- Dynamics CRM  REST Builder
		今天介绍个很棒的工具叫CRM REST Builder,不管是2016之前的odata查询或者现在的web api都不在话下,界面如下,选项非常丰富 这里以retrieve multiple举个例子, ... 
- Elasticsearch Query DSL 整理总结(一)—— Query DSL 概要,MatchAllQuery,全文查询简述
		目录 引言 概要 Query and filter context Match All Query 全文查询 Full text queries 小结 参考文档 引言 虽然之前做过 elasticse ... 
- crm使用FetchXml分组聚合查询
		/* 创建者:菜刀居士的博客 * 创建日期:2014年07月09号 */ namespace Net.CRM.FetchXml { using System; using Micr ... 
- Command and Query Responsibility Segregation (CQRS) Pattern 命令和查询职责分离(CQRS)模式
		Segregate operations that read data from operations that update data by using separate interfaces. T ... 
- Dynamic CRM 2013学习笔记(十七)JS读写各种类型字段方法及技巧
		我们经常要对表单里各种类型的字段进行读取或赋值,下面列出各种类型的读写方法及注意事项: 1. lookup 类型 清空值 var state = Xrm.Page.getAttribute(" ... 
- Flashback Query、Flashback Table(快速闪回查询、快速闪回表)
		Flashback Query闪回查询 flashback query是基于undo表空间的闪回,与之相关的参数如下: SQL> show parameter undo NAME ... 
- SQL Server捕获发生The query processor ran out of internal resources and could not produce a query plan...错误的SQL语句
		最近收到一SQL Server数据库服务器的告警邮件,告警内容具体如下所示: DATE/TIME: 10/23/2018 4:30:26 PM DESCRIPTION: The query proc ... 
- 【spring data jpa】使用jpa的@Query,自己写的语句,报错:org.springframework.expression.spel.SpelEvaluationException: EL1007E: Property or field 'status' cannot be found on null
		报错: org.springframework.expression.spel.SpelEvaluationException: EL1007E: Property or field 'status' ... 
- 通过redash query results 数据源实现跨数据库的查询
		redash 提供了一个简单的 query results 可以帮助我们进行跨数据源的查询处理 底层数据的存储是基于sqlite的,期望后期有调整(毕竟处理能力有限),同时 query results ... 
- query.validate.js使用说明+中文API
		转自:http://www.cnblogs.com/hejunrex/archive/2011/11/17/2252193.html 看到一篇好的文章不容易,记录下来以防丢失! 官网地址:http:/ ... 
随机推荐
- OpenFeign简单使用
			OpenFeign入门 什么是 OpenFeign? OpenFeign是一个远程访问的组件,用于两个微服务之间互相访问的中间件 OpenFeign使用步骤 1.添加OpenFeign的依赖 < ... 
- 超级干货!Air780E的串口通信分享
			 猛然发现,Air780E的串口通信还没分享,难怪已经有小伙伴提出了要求! 那我们来讲解低功耗4G模组Air780E的串口通信的基本用法,小伙伴们,学起来吧! 一.硬件准备  780E开发板一套 ... 
- Docker配置Trojan代理
			1.遇到的问题 在做云计算作业,使用阿里云的ECS服务器尝试使用docker拉取镜像的时候,发现一直无法从仓库拉取,更换了多个镜像源也没有解决问题,于是决定学会去配置linux的代理,记录过程. 2. ... 
- CF2030E MEXimize the Score 题解
			题面 假设我们将数组 \(b\) 中的元素分割成任意多个 \(k\) 的非空多集 \(S_1, S_2, \ldots, S_k\) ,其中 \(k\) 是一个任意的正整数.定义 \(b\) 的分值为 ... 
- 使用WebRTC技术搭建小型的视频聊天页面
			目录 目录 参考资料 什么是WebRTC? 能做什么? 架构图 个人理解(类比) 核心知识点 核心知识点类比 ICE框架 STUN(协议) NAT(网络地址转换) TURN SDP(会话描述协议) W ... 
- 【一步步开发AI运动小程序】十二、自定义一个运动分析器,实现计时计数01
			随着人工智能技术的不断发展,阿里体育等IT大厂,推出的"乐动力"."天天跳绳"AI运动APP,让云上运动会.线上运动会.健身打卡.AI体育指导等概念空前火热.那 ... 
- MySQL-8.3.0 innovation 创新版本YUM安装配置
			MySQL-8.3.0 innovation版本已发布了,想抢先体验一下最新的功能,可以用以下的方式快速在虚拟机上安装一下哈 服务器环境:[root@node213 ~]# cat /etc/redh ... 
- Java中的对象池模式
			Java中的对象池模式 Java对象的生命周期分析: Java对象的生命周期大致包括三个阶段: 对象的创建,对象的使用, 对象的清除. 因此,对象的生命周期长度可用如下的表达式表示: T = T1 + ... 
- ClickHouse之基础使用
			[安装] [YUM] 1.添加官方存储库 sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://packag ... 
- Vue.js vuex
			1.前言 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式,它解决了vue中不同组件之间状态共享的问题. 通俗的说,它就是一个带响应式的全局变量管理,它数据的改变会触发相关页面/组件的更 ... 
