前段时间微软发布了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";

}

};

})();

Dynamics CRM记录页面上隐藏子网格“+”标识的更多相关文章

  1. Dynamics CRM定制子网格添加按钮实例之二:调试代码、打开Web资源及获取选择的记录

    关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复222或者20160501可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong. ...

  2. Dynamics CRM定制子网格添加按钮实例之一

    关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复221或者20160430可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong. ...

  3. Dynamics CRM 在表单上显示更改历史记录(审核历史记录)

    前言 虽然Dynamics CRM自带的审计很好,但是对于缺乏使用CRM经验的用户来说,自带的UCI界面实在是太隐藏了: 于是乎就出现了需求:想通过在表单上直接看到看审计历史记录: 在网上搜索了很多中 ...

  4. Dynamics 365 你所期待的子网格编辑终于来了

    Dynamics 365的online版本已经在11月1号发布了,on-premises版也在没几天后发布,今天略看了一眼 what's new 一眼就看到了 editable grids,这个不用我 ...

  5. Microsoft Dynamics CRM 增删改子表汇总子表的某个字段到主表的某个字段(通用插件)

    背景 经常有某个汇总子表的数量到主表的总数量,或者汇总子表的总价到主表的总价这种需求. 传统的做法: 1.就是为每个子表实体单独写成一个插件,但是这样不好复用. 2.主表的汇总字段是汇总货币类型,但是 ...

  6. 在Dynamics CRM中自定义一个通用的查看编辑注释页面

    关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复162或者20151016可方便获取本文,同时可以在第一时间得到我发布的最新的博文信息,follow me! 注释在CRM中的显示是比较特别, ...

  7. Microsoft Dynamics CRM 2011 面向Internet部署 (IFD) ADFS虚拟机环境搭建的步骤(CRM与ADFS装在同一台服务器上) 摘自网络

    1: 安装windows server 2008 R2 中文版 (过程略) 安装完成后设置机器名和IP地址, 本过程机器名 crm5dev,192.168.0.110 dns: 192.168.0.1 ...

  8. Dynamic CRM 2015学习笔记(6)没有足够的权限 - 您没有访问这些记录的权限。请联系 Microsoft Dynamics CRM 管理员

    我们经常遇到下面这种问题:没有足够的权限 - 您没有访问这些记录的权限.请联系 Microsoft Dynamics CRM 管理员.  下面将详细介绍下如何解决这种问题:进不了CRM系统:进了CRM ...

  9. 在标准实体特殊消息上注册插件及Dynamics CRM 2015中计算字段的使用

    关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复157或者20151005可方便获取本文,同时可以在第一时间得到我发布的最新的博文信息,follow me! 前面的 插件系列博客教程 讲述了 ...

随机推荐

  1. CSS3 3D转换

    CSS3允许你使用3D转换来对元素进行格式化. 3D转换方法: rotateX() rotateY() 浏览器支持 属性 浏览器支持 transform           IE10和Firefox支 ...

  2. JS 实现 Tab标签切换功能

    Tab标签切换 效果图: HTML部分: <div class="wrap">     <ul id="tag">       < ...

  3. memcache锁,解决查询过多email查询为空的问题

    /* 设置memcache锁,解决查询过多email查询为空的问题 Begin */ $mmc = new Memcache; $mmc->connect('127.0.0.1', 11211) ...

  4. MVC中不能使用原生态的#include ,可替代的解决方案

    <!--#include file="../stuff/foo/box.aspx"--> 1.可以用 <%: Html.Partial("~/Views ...

  5. Qt5-控件-QMenu,QMenuBar-菜单栏详解-菜单热键-菜单校验功能

    #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QMenu> #inclu ...

  6. C#中的委托(Delegate)和事件(Event)

    原文地址:C#中的委托(Delegate)和事件(Event) 作者:jiyuan51 把C#中的委托(Delegate)和事件(Event)放到现在讲是有目的的:给下次写的设计模式--观察者(Obs ...

  7. [转]C++ list 类学习笔记

    双向循环链表list list是双向循环链表,,每一个元素都知道前面一个元素和后面一个元素.在STL中,list和vector一样,是两个常被使用的容器.和vector不一样的是,list不支持对元素 ...

  8. vs code(egret wing) php配置与调试

    所需插件 下面是便于编写以及调试php的插件,可以从IDE Store中搜索. PHP Debug,PHP IntelliSense,PHP IntelliSence Cranne. 环境配置 找到项 ...

  9. centos 开启apache rewrite模式

    mod_rewrite能使网页伪静态,对于搜索引擎友好,下面就是开启这个功能的说明!启用mod_rewrite模块在conf目录的httpd.conf文件中找到 LoadModule rewrite_ ...

  10. Golang http包下FileServer的使用

    FileServer文档:https://godoc.org/net/http#FileServer 今天看到http的 Handle 方法,所以就像试试,就找到FileServer FileServ ...