您的位置:首页 > Web前端 > JavaScript

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

2014-10-18 20:17 816 查看
我们经常有这样一种需求,子表里新加或修改一数值后,要马上在主表里把它们的和显示在主表上。如果用插件来实现,可以实现求和,但页面上还要刷新一下才能显示正确。这时就考虑到用JS来实现这一功能,并自动刷新页面,让求和的值马上显示在主表上。

子表上新加或修改完,保存并关闭后,系统会自动刷新子表列表,以显示新的子表数据行,这时就想到是不是可以利用这个子表的刷新功能来计算并显示值。

下面介绍详细的实现方法:

1.重写SubGrid的Refresh事件,SubGrid刷新的时候注册一个事件,完成SubGriditem的累加计算

1:(function(window,undefined){

2:varpreRefresh=Mscrm.GridControl.prototype.Refresh;

3:Mscrm.GridControl.prototype.Refresh=function(){

4:preRefresh.apply(this);

5:fireCallback.apply(this);

6:}

7:varoneEvent=null;

8:Mscrm.GridControl.add_onRefresh=function(json){

9:oneEvent=json;

10:}

11:functionfireCallback(){

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:functionsumCost(sumFieldNmae,subFiledName,subEntityName){

2:varamount=0;

3:varkey="new_marketing_planid/Id";

4:varvalue=Xrm.Page.data.entity.getId();

5://varquery="new_btl_posmSet?$select=new_cost&$filter=new_marketing_planid/Ideqguid'123'";

6:varquery=subEntityName+"Set?$select="+subFiledName+"&$filter="+key+"eqguid'"+value+"'";

7:varresult=ODataRetrieve(query);

8:if(result!=null&&result.results.length>0){

9:for(vari=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上,刷新页面,马上就可以看到效果了



DynamicCRM2013学习笔记系列汇总




                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐