zoukankan      html  css  js  c++  java
  • Dynamics CRM 2013 subgrid刷新后刷新主表单

             项目中会遇到这样的需求,会根据subgrid中的数据变化去更新主表单中的某个或多个字段值,一般的做法就是写插件根据subgrid中实体数据的变化在后台更新主表数据库,但后台更新了要反映到前台就得使用刷新操作了。

          为实现这个功能有两种方式:

          1、在主表单加一个定时任务,定时的去捞取后台数据库的数据和前台比较,看是否一致如果不一致则刷新主页面加载最新的数据,代码如下,第一行放在onload事件中

    setTimeout(checkTable, 5000);
    function checkTable() {
        retrieveRecord(Xrm.Page.data.entity.getId(), 'xxSet',
                                   function (data, textStatus, XmlHttpRequest) {
                                       if (data != null && data.new_money.Value != Xrm.Page.getAttribute("new_money").getValue()) {
                                           Xrm.Page.data.entity.save();
                                           Xrm.Page.data.refresh();
                                       }
                                   }, null, false);
        setTimeout(checkTable, 5000);
    }

    2、向subgrid的refresh事件追加一个事件来刷新主表单。这种方式优于第一种,因为前者会不停的向后台发送查询请求显然影响性能。代码如下,第一行放在onload事件中

    setTimeout(SubGridRefresh, 2500);
    
    function SubGridRefresh() {
        var grid = document.getElementById("subgridName");
        if (grid) {
            grid.control.add_onRefresh(function () { window.location.reload(true);; });
        }
    }

     这边给绑定事件添加了2.5秒的延迟,因为这样能保证整个页面都加载完后再执行。这里的刷新事件可以用SDK中提供的Xrm.Page.data.refresh(),但实际使用后会发现会无限刷所以弃用。但用window.loaction.reload()也有个问题,当我点击主表单的保存按钮后系统会调用refresh方法进行局部刷新,那subgrid就会刷新导致调用一次页面的reload刷新整个页面,用户体验不是很好。

    所以上述两种方式看你选择哪种了,如果你有第三种方式还望不吝赐教。

    

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    Win7 华硕电脑自带摄像头无法打开 方法思路介绍
    P3520 [POI2011]SMI-Garbage
    二分图的最大匹配(模板)
    #数列分块入门 2
    数列分块入门#1
    线段树(标记下传乘法和加法)
    最小费用最大流
    最大流算法(模板)
    编译器出现/mingw32/bin/ld.exe:Permission denied 错误
    1298 圆与三角形
  • 原文地址:https://www.cnblogs.com/VicTang/p/4799570.html
Copyright © 2011-2022 走看看