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

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

1. 首先看下效果:

image

 

2. 注册方法:

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

image

注册时要填写4个参数:

image

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

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

image

 

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学习笔记 系列汇总



如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。
posted @   疯吻IT  阅读(2133)  评论(3编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示