我们经常有这样一种需求,子表里新加或修改一数值后,要马上在主表里把它们的和显示在主表上。如果用插件来实现,可以实现求和,但页面上还要刷新一下才能显示正确。这时就考虑到用JS来实现这一功能,并自动刷新页面,让求和的值马上显示在主表上。

子表上新加或修改完,保存并关闭后,系统会自动刷新子表列表,以显示新的子表数据行,这时就想到是不是可以利用这个子表的刷新功能来计算并显示值。

下面介绍详细的实现方法:

1. 重写SubGrid的Refresh事件,SubGrid刷新的时候注册一个事件,完成SubGrid item的累加计算

  1: (function (window, undefined) {
  2:     var preRefresh = Mscrm.GridControl.prototype.Refresh;
  3:     Mscrm.GridControl.prototype.Refresh = function () {
  4:         preRefresh.apply(this);
  5:         fireCallback.apply(this);
  6:     }
  7:     var oneEvent = null;
  8:     Mscrm.GridControl.add_onRefresh = function (json) {
  9:         oneEvent = json;
 10:     }
 11:     function fireCallback() {
 12:         if (oneEvent && oneEvent.controlId && oneEvent.controlId == this.get_id()) {
 13:             oneEvent.callback.apply(this, null);
 14:         }
 15:     }
 16: })(window);
 17:
 18: Mscrm.GridControl.add_onRefresh({
 19:     controlId: "chart_btl_postm", callback: function () {
 20:         sumCost("new_sum_cost_bp", "new_cost", "new_btl_posm");
 21:     }
 22: });
这里的sumCost的方法就是计算并显示值到主表上
 
2.计算并显示方法
  1: function sumCost(sumFieldNmae, subFiledName, subEntityName) {
  2:     var amount = 0;
  3:     var key = "new_marketing_planid/Id";
  4:     var value = Xrm.Page.data.entity.getId();
  5:     //var query = "new_btl_posmSet?$select=new_cost&$filter=new_marketing_planid/Id eq guid'123'";
  6:     var query = subEntityName + "Set?$select=" + subFiledName + "&$filter=" + key + " eq guid'" + value + "'";
  7:     var result = ODataRetrieve(query);
  8:     if (result != null && result.results.length > 0) {
  9:         for (var i = 0; i < result.results.length; i++) {
 10:             amount += Number(result.results[i].new_cost);
 11:         }
 12:     }
 13:
 14:     Xrm.Page.getAttribute(sumFieldNmae).setValue(amount);
 15: }
 
3. 把js文件加到form上,刷新页面,马上就可以看到效果了
 
 
Dynamic CRM 2013学习笔记 系列汇总
 
 
 

Dynamic CRM 2013学习笔记(十一)利用Javascript实现子表合计(汇总,求和)功能的更多相关文章

  1. Dynamic CRM 2013学习笔记(三十一)自定义用excel批量导入实体数据

    有一个实体的子表数据量太大,于是客户想用execel来导入实体数据.首先想到的是用系统自带的Import Data,客户嫌太麻烦,比如lookup字段要做map等. 下面是具体的实现步骤: 一.定义e ...

  2. Dynamic CRM 2013学习笔记(二十一)自定义审批流2 - 配置按钮

    上次介绍了 Dynamic CRM 2013学习笔记(十九)自定义审批流1 - 效果演示 现在开始介绍如何配置审批流,首先在form上添加三个按钮,Submit, Agree, Reject: 1. ...

  3. Dynamic CRM 2013学习笔记(四十一)流程4 - 异步工作流(Workflow)用法图解

    在CRM 2013 里,工作流被分成二类:异步工作流和实时工作流.异步工作流依赖一个windows 服务: Microsoft Dynamics CRM Asynchronous Processing ...

  4. Dynamic CRM 2013学习笔记 系列汇总

    这里列出所有 Dynamic CRM 2013学习笔记 系列文章,方便大家查阅.有任何建议.意见.需要,欢迎大家提交评论一起讨论. 本文原文地址: Dynamic CRM 2013学习笔记 系列汇总 ...

  5. Dynamic CRM 2013学习笔记(十二)实现子表合计(汇总,求和)功能的通用插件

    上一篇 Dynamic CRM 2013学习笔记(十一)利用Javascript实现子表合计(汇总,求和)功能 , 介绍了如何用js来实现子表合计功能,这种方法要求在各个表单上添加js方法,如果有很多 ...

  6. Dynamic CRM 2013学习笔记(十三)附件上传 / 上传附件

    上传附件可能是CRM里比较常用的一个需求了,本文将介绍如何在CRM里实现附件的上传.显示及下载.包括以下几个步骤: 附件上传的web页面 附件显示及下载的附件实体 调用上传web页面的JS文件 实体上 ...

  7. Dynamic CRM 2013学习笔记(九)CrmFetchKit.js介绍:Fetchxml、多表联合查询, 批量更新

    CrmFetchKit.js是一个跨浏览器的一个类库,允许通过JavaScript来执行fetch xml的查询,还可以实现批量更新,分页查询等.目前已支持Chrome 25, Firefox 19 ...

  8. Dynamic CRM 2013学习笔记(十八)根据主表状态用JS控制子表自定义按钮

    有时要根据主表的审批状态来控制子表上的按钮要不要显示,比如我们有一个需求审批通过后就不能再上传文件了. 首先打开Visual Ribbon Editor, 如下图,我们可以利用Enable Rules ...

  9. Dynamic CRM 2013学习笔记(二十三)CRM JS智能提示(CRM 相关的方法、属性以及页面字段),及发布前调试

    我们知道在CRM的js文件里引用XrmPageTemplate.js后,就可以实现智能提示,但每个js文件都引用太麻烦了,其实可以利用vs的功能让每个js文件自动实现智能提示CRM的js: 另外,我们 ...

随机推荐

  1. numpy.linalg.eig

    1.转置对于二维数组有用,对一位数组无效 2.理解特征值和特征向量的对应关系 a=np.array([[1 ,2, 3],[4, 5, 6],[7, 8, 9]]) a Out[27]: array( ...

  2. avalon2学习教程12数据验证

    avalon2砍掉了不少功能(如ms-include,ms-data),腾出空间加了其他更有用的功能.数据验证就是其中之一.现在avalon2内置的验证指令是参考之前的oniui验证框架与jquery ...

  3. [Tomcat 源码分析系列] (附件) : setclasspath.bat 脚本

    @echo off rem Licensed to the Apache Software Foundation (ASF) under one or more rem contributor lic ...

  4. Python全栈开发day3

    1.Pycharm使用介绍 1.1 新建py文件自动添加python和编码 1.2 更改pycharm默认字体和风格 点击左上角“file”-->“Settings”(或者用“Ctrl+Alt+ ...

  5. Web前端之CSS_day1-2

    1.div和span div的语义是division“分割”: span的语义就是span“范围.跨度” div标签是一个容器级标签,里面什么都能放,甚至可以放div自己 span是一个“文本级”的标 ...

  6. c++学习笔记——构造函数

    构造函数定义:每个类都分别定义了它的对象被初始化的方式,类通过一个或几个特殊的成员函数来控制其对象的初始化过程,这些函数叫做构造函数. 需要注意的几点: 1:构造函数不能被声明为const的,当我们创 ...

  7. 实现MFC菜单画笔画圆,并且打钩

    这个是用最简单的方法,移动客户区,圆会不见,所以下一篇我还要改进. 首先新建一个MFC单文件,在资源那里的菜单下,建立画笔,可以弹出红画笔,蓝画笔和绿画笔,,给出ID_RED,ID_BLUE,ID_G ...

  8. 违反并发性: UpdateCommand影响了预期 1 条记录中的 0

    今天遇到这个错误,看到下面这种说法都没解决问题: 1 检查是否设有主键.2 DeleteCommand的问题:检查是否含有自动编号字段(Access的自动编号字段可能会引发此异常):  UpdateC ...

  9. HDOJ 4508 湫湫系列故事——减肥记I (完全背包带优化)

    完全背包的模版题.. 加了一个小优化  n^2的写法 O(V+N)在本题中复杂度较高 不采纳 完全背包问题有一个很简单有效的优化,是这样的:若两件物品i.j满足c[i]<=c[j]且w[i]&g ...

  10. 修改myeclipse的servlet模板

    今天修改myeclipse的servlet模板时,发生 Could not create the view: An unexpected exception was thrown.错误. 解决方案:1 ...