上一篇 Dynamic CRM 2013学习笔记(十一)利用Javascript实现子表合计(汇总,求和)功能 , 介绍了如何用js来实现子表合计功能,这种方法要求在各个表单上添加js方法,如果有很多实体要实现这个功能,有人觉得有点麻烦了,就不太喜欢这种方式,于是我写了一个通用的子表合计功能的通用插件,只用在注册插件时,填写不同的参数就可以实现这个功能了。

1. 首先看下效果:

 

2. 注册方法:

我们需要在子表上对create和update方法进行注册:

注册时要填写4个参数:

第一个参数是要被合计的子表字段,第二个参数是主表的主健,第三个参数是主表实体名,第四个参数是主表上显示合计值的字段。

注册update时,要注意把子表里关联主表的字段,也是主表的主健要加到image里,以方便插件里使用,而且可以加上filter 属性,只用在这个字段时才触发这个插件:

 

3. 实现方法

  • 获取当前实体
  1: Entity entity = (Entity)context.InputParameters["Target"];
  2: Entity preEntity = msg == "update" ? (Entity)context.PreEntityImages["preEntity"] : entity;

 

  • 获取参数
  1: public SumSubgrid(string unsecure)
  2: {
  3:     m_config = unsecure;
  4: }

 

  • 合计获取子表

            使用 OrganizationServiceContext svcContext = new OrganizationServiceContext(adminService) 来读写实体

  1: var ents = svcContext.CreateQuery(entity.LogicalName).Where(e => e[parameters[1]] == preEntity[parameters[1]] && e[parameters[0]] != null).Select(e => e[parameters[0]]);
  2: decimal amount = 0;
  3: foreach (var ent in ents)
  4: {
  5:   amount += Convert.ToDecimal(ent);
  6: }

 

  • 把合计值保存到主表上的合计字段
  1: var primaryEnt = svcContext.CreateQuery(parameters[2]).Where(e => e[parameters[1]] == preEntity[parameters[1]]).FirstOrDefault();
  2: primaryEnt[parameters[3]] = amount;
  3: svcContext.UpdateObject(primaryEnt);
  4: svcContext.SaveChanges();

 

是不是很简洁,大功告成!

 

Dynamic CRM 2013学习笔记 系列汇总

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

  1. Dynamic CRM 2013学习笔记(二十八)用JS动态设置字段的change事件、必填、禁用以及可见

    我们知道通过界面设置字段的change事件,是否是必填,是否可见非常容易.但有时我们需要动态地根据某些条件来设置,这时有需要通过js来动态地控制了. 下面分别介绍如何用js来动态设置.   一.动态设 ...

  2. Dynamic CRM 2013学习笔记(二十七)无代码 复制/克隆方法

    前面介绍过二种复制/克隆方法:<Dynamic CRM 2013学习笔记(十四)复制/克隆记录> 和<Dynamic CRM 2013学习笔记(二十五)JS调用web service ...

  3. Dynamic CRM 2013学习笔记(二十)字段改变事件的二种实现方法

    CRM里有二种方式实现字段change事件,一种是在form里,一种完全通过js来实现.本文介绍下二者的用途及区别. 1. Form里用法 这种方式估计其实也是添加一个js的function. 这种方 ...

  4. Dynamic CRM 2013学习笔记(二十六)报表设计:Reporting Service报表 动态参数、参数多选全选、动态列、动态显示行字体颜色

    上次介绍过CRM里开始报表的一些注意事项:Dynamic CRM 2013学习笔记(十五)报表入门.开发工具及注意事项,本文继续介绍报表里的一些动态效果:动态显示参数,参数是从数据库里查询出来的:参数 ...

  5. Dynamic CRM 2013学习笔记(二十九)报表设计:reporting service 报表开发常见问题

    在报表开发过程中,经常会遇到各种各样的问题,比如The report cannot be displayed. (rsProcessingAborted),一点有意义的提示都没有:再就是分页问题,经常 ...

  6. Dynamic CRM 2013学习笔记(二十五)JS调用web service 实现多条记录复制(克隆)功能

    前面介绍过如何克隆一条当前的记录: Dynamic CRM 2013学习笔记(十四)复制/克隆记录 , 主要是通过界面上加一个字段,单击form上的clone 按钮时,改变这个字段的值以触发插件来实现 ...

  7. Dynamic CRM 2013学习笔记(二十二)插件里调用WCF服务

      1. 添加service:     2.调用WCF BasicHttpBinding myBinding = new BasicHttpBinding(); myBinding.Name = &q ...

  8. Dynamic CRM 2013学习笔记(二十四)页面保存前进行逻辑验证

    我们有时要验证下页面上的一些逻辑,比如开始时间不能晚于结束时间,不对时不让保存.我们可以在相关的字段事件上处理,但这如果要判断的字段比较多时,就比较麻烦了. 这时候我们就可以利用Form的OnSave ...

  9. Dynamic CRM 2013学习笔记(二)插件基本用法及调试

      插件是可与 Microsoft Dynamics CRM 2013 和 Microsoft Dynamics CRM Online 集成的自定义业务逻辑(代码),用于修改或增加平台的标准行为.也可 ...

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

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

随机推荐

  1. apache+tomcat分布式集群搭建

    今天搭建apche+tomcat分布式集群,遇到很多问题,在网上找到的很多都不成功,然后和同事一起研究了一下,最终搭建成功了.做个笔记,以备自己以后参考. 1,下载apache.在下载Apache(2 ...

  2. linux 驱动学习笔记02--应用实例:在内核中新增驱动代码目录和子目录

    下面来看一个综合实例,假设我们要在内核源代码 drivers 目录下为 ARM 体系结构新增如下用于 test driver 的树型目录:| --test  | -- cpu  | -- cpu.c ...

  3. 在Linux下使用RAID--使用mdadm工具创建软件Raid 0(1)

    在Linux下使用RAID--使用mdadm工具创建软件Raid 0(1) RAID即廉价磁盘冗余阵列,其高可用性和可靠性适用于大规模环境中,相比正常使用,数据更需要被保护.RAID是一些磁盘的集合, ...

  4. SQL in与exists

    无可置疑,如果in()的结果集非常庞大,那么效率必然是低的. 但EXISTS subquery根据其语法可知在SQL中的作用是:检验查询是否返回数据.如果在 Dictionary 对象中指定的关键字存 ...

  5. eclipse tomcat maven热部署

    1.  tomcat插件 如果是Kepler的话,已经自带了tomcat插件,如果没有,到http://www.eclipsetotale.com/tomcatPlugin.html下载安装或在线安装 ...

  6. addClass() 和 toggleClass()

    addClass()是在原有的类基础上增加类属性,仍然保留原有的类的样式.语法格式为:addClass(class0 class1 ...) ,例如: $("p").addClas ...

  7. pause 和 title

    -------siwuxie095 pause 暂停批处理程序,并显示:请按任意键继续- 暂停高级技巧: pause>nul 只暂停,不显示任何信息,且光标移到下一行 如果不想用默认提示语:请按 ...

  8. phpexcel相关函数

    1.header [php] header("Content-Type:application/vnd.ms-excel"); header("Content-Dispo ...

  9. CentOS7安装mysql5.7.11

    开始安装 yum update yum install wget wget http://repo.mysql.com/mysql57-community-release-el7-7.noarch.r ...

  10. 测试C++代码与WebBrowser HTML的互动

    testWebBrowserDlg.h // testWebBrowserDlg.h : 头文件 // #pragma once #include "explorer1.h" #i ...