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學習筆記 系列匯總


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM