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