Dynamic CRM 2013学习笔记(九)CrmFetchKit.js介绍:Fetchxml、多表联合查询, 批量更新
CrmFetchKit.js是一个跨浏览器的一个类库,允许通过JavaScript来执行fetch xml的查询,还可以实现批量更新,分页查询等。目前已支持Chrome 25, Firefox 19 和 IE9/10 .
它的最大优势是可以通过fetchxml 来查询,这样我们就可以实现真正的多表联合查询,虽然可以用OData终结点的$expand来进行多表的联合查询,但这种方式没办法过滤多表的条件,它只能过滤主表的条件。
下面来看下简单的多表查询的例子:
1.首先定义一个fetchxml:
1: var fetchxml = ['<fetch version="1.0" output-format="xml-platform" ',2: 'mapping="logical" ',3: 'returntotalrecordcount="true" >',4: '<entity name="new_floor_price">',5: '<attribute name="new_floor_priceid" />',6: '<order attribute="modifiedon" descending="true" />',7: '<filter type="and">',8: '<condition attribute="new_approval_status" operator="eq" value="" />',9: '</filter>',10: '<link-entity name="new_fp_item" from="new_fp" to="new_floor_priceid" alias="ar">',11: '<attribute name="new_floor_price" />',12: '<filter type="and">',13: '<condition attribute="new_modelid" operator="eq" value="' + modelid + '" />',14: '</filter>',15: '</link-entity>',16: '</entity>',17: '</fetch>'].join('');
我一般先写好sql语句,然后在 http://sql2fetchxml.com/ 这里生成fetchxml 语句,再小改下参数就成了。
在上面的框里输入SQL 语句,点击 中间的Convert,就可以在下面的框里生成 Fetchxml的语句。
2. 调用很简单:
1: CrmFetchKit.Fetch(fetchxml).then(function (results) {2: if(results!=null)3: setAttributeValue("new_floor_price", Number(results[0].getValue("ar.new_floor_price")));4: }, onFetchError);
3. 错误处理:
1: function onFetchError(xhr, status, errorThrown) {2:3: var errormsg = $(xhr.responseXML).find('Message').text();4:5: alert('CrmFetchKit-Error occured: ' + errormsg);6: }
4. 另一种写法:
1: // execute the query (async)2: CrmFetchKit.Fetch(fetchxml)3: .fail(function(xhr, status, errorThrown){4:5: // get the error-message6: var msg = $(xhr.responseXML).find('Message').text();7:8: alert('Error occured: ' + msg);9: })10: .done(function(results){11:12: var contactid = null;13:14: for( var i = 0, max = results.length; i < max; i++) {15:16: contactid = results[i].getValue('contactid');17:18: // Assign (async)19: CrmFetchKit.Assign(contactid, 'contact', bId);20: }21: });这个示例中,还介绍了CrmFetchKit.Assign的用法
CrmFetchKit.Assign(contactid, 'contact', bId);这样就可以实现批量更新了
5. FetchMore 用法
1: var fetchxml = ['<fetch version="1.0" output-format="xml-platform" ',2: 'mapping="logical" ',3: 'returntotalrecordcount="true" ',4: 'count="10">',5: ' <entity name="contact">',6: ' <attribute name="lastname" />',7: ' <attribute name="contactid" />',8: ' <filter type="and">',9: ' <condition attribute="lastname" operator="like" value="test%" />',10: ' </filter>',11: ' </entity>',12: '</fetch>'].join('');13:14: CrmFetchKit.FetchMore(fetchxml).then(function (response) {15:16: // 获取实体名17: var entityname = response.entityName;18:19: // fetchxml里必须设置 'returntotalrecordcount="true" '20: var total = response.moreRecords;21:22: // 取得实体的数组23: var set = response.entities;24:25: // 分页就需要这个 page-cookie26: var pageCookie = response.pagingCookie;27:28: ...29:30: }, onFetchError);6. FetchAll用法:
1: var fetchxml = ['<fetch version="1.0" output-format="xml-platform" ',2: 'mapping="logical" ',3: 'count="10">',4: ' <entity name="contact">',5: ' <attribute name="lastname" />',6: ' <attribute name="contactid" />',7: ' <filter type="and">',8: ' <condition attribute="lastname" operator="like" value="test%" />',9: ' </filter>',10: ' </entity>',11: '</fetch>'].join('');12:13: CrmFetchKit.FetchAll(fetchxml).then(function (entities) {14:15: /* success-handler */16:17: }, onFetchError);
7. 下载地址
注意事项:
1. 要注意全部是小写
2. 给lookup赋值时,要注意lookup类型是正确的
Dynamic CRM 2013学习笔记(九)CrmFetchKit.js介绍:Fetchxml、多表联合查询, 批量更新的更多相关文章
- Dynamic CRM 2013学习笔记(十二)实现子表合计(汇总,求和)功能的通用插件
上一篇 Dynamic CRM 2013学习笔记(十一)利用Javascript实现子表合计(汇总,求和)功能 , 介绍了如何用js来实现子表合计功能,这种方法要求在各个表单上添加js方法,如果有很多 ...
- Dynamic CRM 2013学习笔记 系列汇总
这里列出所有 Dynamic CRM 2013学习笔记 系列文章,方便大家查阅.有任何建议.意见.需要,欢迎大家提交评论一起讨论. 本文原文地址: Dynamic CRM 2013学习笔记 系列汇总 ...
- Dynamic CRM 2013学习笔记(十六)用JS控制Tab可见,可用
一个Form里经常会有好几个Tab,有时要根据一些条件设置哪些Tab可用,可见.下面就介绍下如何用JS对Tab进行控制. 1. 控制可见 function setTabVisableByName( ...
- Dynamic CRM 2013学习笔记(十八)根据主表状态用JS控制子表自定义按钮
有时要根据主表的审批状态来控制子表上的按钮要不要显示,比如我们有一个需求审批通过后就不能再上传文件了. 首先打开Visual Ribbon Editor, 如下图,我们可以利用Enable Rules ...
- Dynamic CRM 2013学习笔记(二十三)CRM JS智能提示(CRM 相关的方法、属性以及页面字段),及发布前调试
我们知道在CRM的js文件里引用XrmPageTemplate.js后,就可以实现智能提示,但每个js文件都引用太麻烦了,其实可以利用vs的功能让每个js文件自动实现智能提示CRM的js: 另外,我们 ...
- Dynamic CRM 2013学习笔记(二十五)JS调用web service 实现多条记录复制(克隆)功能
前面介绍过如何克隆一条当前的记录: Dynamic CRM 2013学习笔记(十四)复制/克隆记录 , 主要是通过界面上加一个字段,单击form上的clone 按钮时,改变这个字段的值以触发插件来实现 ...
- Dynamic CRM 2013学习笔记(二十八)用JS动态设置字段的change事件、必填、禁用以及可见
我们知道通过界面设置字段的change事件,是否是必填,是否可见非常容易.但有时我们需要动态地根据某些条件来设置,这时有需要通过js来动态地控制了. 下面分别介绍如何用js来动态设置. 一.动态设 ...
- Dynamic CRM 2013学习笔记(十七)JS读写各种类型字段方法及技巧
我们经常要对表单里各种类型的字段进行读取或赋值,下面列出各种类型的读写方法及注意事项: 1. lookup 类型 清空值 var state = Xrm.Page.getAttribute(" ...
- Dynamic CRM 2013学习笔记(二十九)报表设计:reporting service 报表开发常见问题
在报表开发过程中,经常会遇到各种各样的问题,比如The report cannot be displayed. (rsProcessingAborted),一点有意义的提示都没有:再就是分页问题,经常 ...
随机推荐
- DEBUG STACK TRACE for PoolBackedDataSource.close().
我使用generator生成的代码,xml里面的内容没有覆盖重写,而是在下面直接追加,所以需要把以前的全部删除,然后在用generator生成.如果这个不能解决问题,就查查别人的问题.
- C# 远程网络唤醒介绍及代码
一.定义 网络唤醒:唤醒休眠状态下的计算机,而不是已关机的计算机. 优势:可通过定时功能实现自动唤醒计算机,减少人力使用. 实现方法:通过被唤醒机的MAC地址进行广播发送请求,唤醒计算机. 二.硬件设 ...
- 4.0以后的新布局方式GridLayout
<?xml version="1.0" encoding="utf-8"?> <GridLayout xmlns:android=" ...
- cocos2d-js版本A*算法
[转]http://blog.csdn.net/realcrazysun1/article/details/43054229 A*算法的东西网上讲了很多~但还是不可避免的要去研究一下,cocos官网上 ...
- ORACLE数据库存储结构
一.数据块 Oracle对数据库数据文件中的存储空间进行管理的单位是数据块.数据块是数据库中最小的(逻辑)数据单位,是最小的I/O单位.与数据块对应的,所有数据在操作系统级的最小物理存储单位是字节.每 ...
- 详解log4j2(上) - 从基础到实战
log4j2相对于log4j 1.x有了脱胎换骨的变化,其官网宣称的优势有多线程下10几倍于log4j 1.x和logback的高吞吐量.可配置的审计型日志.基于插件架构的各种灵活配置等.如果已经掌握 ...
- 调试CS5343总结报告
一周前接到新任务,调试CS5343,百度一下,CS5343是一款音频采集的AD芯片,CS5343驱动代码是现成的,我的工作是提高芯片的采样速率,看了一边芯片的Datesheet,辛好东西不是很多. 概 ...
- 生产力工具之vimwiki 和 calendar
vimwiki下载地址: http://www.vim.org/scripts/script.php?script_id=2226 calendar下载地址: https://github.com/i ...
- mybatis(二)接口编程 、动态sql 、批量删除 、动态更新、连表查询
原理等不在赘述,这里主要通过代码展现. 在mybatis(一)基础上,新建一个dao包,并在里面编写接口,然后再在xml文件中引入接口路径,其他不变,在运用阶段将比原始方法更节约时间,因为不用再去手动 ...
- struts2的result的type属性
一共有两个属性name和type name这里就不介绍了 type 返回结果的类型,值可以从default-struts.properties中看到看到 常用的值:dispatcher (默认) ...
