Dynamic CRM 2013学习笔记(十一)利用Javascript实现子表合计(汇总,求和)功能

我们经常有这样一种需求,子表里新加或修改一数值后,要马上在主表里把它们的和显示在主表上。如果用插件来实现,可以实现求和,但页面上还要刷新一下才能显示正确。这时就考虑到用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学习笔记 系列汇总
 
 
 


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