zoukankan      html  css  js  c++  java
  • Dynamics CRM记录页面上隐藏子网格“+”标识

    前段时间微软发布了Dynamics 365,这是Dynamics产品的又一次大的变动,期待新的版本能够更好的满足客户的需求,同时提供更多的可定制化的内容。

    近期做Dynamics CRM项目遇到很多审批的业务,用户A提交审批给用户B,这时如果审批记录没有做分派即审批记录的负责人没有发生改变,通常情况下都会把审批记录对申请人不可编辑。

    常见的做法是:依据记录的审批状态,在记录页面加载时使用JS方法,遍历停用页面上的所有控件。

    但会遇到一个问题,子网格是无法停用的,子网格右上角的”+”仍然可以点击,仍然可以在子网格中直接删除关联记录,该如何处理呢?

    我接触到处理方法:

    1、  在页面加载完成后,使用JS方法隐藏”+”对应的div。(这不是官方支持的方法,而且如果系统升级,随时可能失效)。

    2、  对子网格实体添加插件,当用户编辑子网格数据的时候,通过插件去做检验,抛异常告诉用户该子网格不可编辑。(这种方式用户体验度不是很好,并且增加了开发人员的工作量)。

    下边我以报销申请为例介绍一种官方支持的方式:

    实现思路:

    为 ”+” 按钮添加JS可用规则,当审批条件不是草稿时不显示。

    首先,我们先看下申请页面处理后的效果,图中 报销申请:案例 = 1:N

     

    具体的操作:

    1、  在报销页面上添加“审批状态”字段。

    2、  使用Ribbon Workbench 为 案例 实体的新建、删除、编辑等按钮添加可用规则。

     

    配置好脚本及脚本方法HideSunGridBtn.subGridBtnEnRule

     

    为各按钮添加可用规则

     

     

    最后,发布解决方案。

    JS代码:

    var FORM_TYPE_CREATE = 1;

    var FORM_TYPE_UPDATE = 2;

     

    var HideSunGridBtn = (function () {

        return {

            //页面的onload方法

            onload: function () {

                //审批状态

                var statusValue = Xrm.Page.getAttribute("new_status").getValue();

                //不是草稿状态时停用所有控件

                if (statusValue != 1) {

                    HideSunGridBtn.DisableFormFields();

                }

     

            },

     

            //停用子网格上的“+”和删除功能

            subGridBtnEnRule: function () {

                var statusValue = Xrm.Page.getAttribute("new_status").getValue();

                var statecode = Xrm.Page.getAttribute("statecode").getValue();

                var formType = Xrm.Page.ui.getFormType();

                //审批状态=草稿 状态=可用  窗体类型=2

                if (statusValue == 1 && statecode == 0 && formType == FORM_TYPE_UPDATE) {

                    return true;

                }

                return false;

            },

     

            //停用页面上的所有控件

            DisableFormFields: function () {

                Xrm.Page.ui.controls.forEach(function (control, index) {

                    if (HideSunGridBtn.DoesControlHaveAttribute(control)) {

                        control.setDisabled(true);

                    }

                });

            },

     

            DoesControlHaveAttribute: function (control) {

                var controlType = control.getControlType();

                return controlType != "iframe" && controlType != "webresource" && controlType != "subgrid";

            }

        };

    })();

  • 相关阅读:
    C语言学习11(循环结构:for语句)
    C语言学习9(循环结构:while语句)
    C语言学习8(选择结构的嵌套)
    C语言学习笔记2
    C语言学习笔记1
    C语言的学习5(数据的输出)
    C语言学习12(函数的定义)
    第二十一章流 14临时文件 简单
    第二十一章流 12输出数据到文件指定位置处seekp() 简单
    第二十一章流 11指定读取文件中的数据seekg() 简单
  • 原文地址:https://www.cnblogs.com/supersblog/p/6082532.html
Copyright © 2011-2022 走看看