zoukankan      html  css  js  c++  java
  • 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学习笔记 系列汇总

  • 相关阅读:
    js中||与&&的用法
    JVM内存模型及配置参数
    Jmeter进行webSocket接口测试
    解决oracle 物化视图刷新失败
    JAVA处理链表经典问题
    openLdap安装教程
    LDAP基本概念
    深度学习正则化---dropout补充
    深度学习正则化---dropout
    深度学习正则化---集成
  • 原文地址:https://www.cnblogs.com/fengwenit/p/4035132.html
Copyright © 2011-2022 走看看