前段时间微软发布了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. Asp.Net Mvc MapRoute .html不起作用(转)

    RegisterRoutes 注册路由示例配置: public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRo ...

  2. 设置Cacti图形标题能显示中文

    1.查看系统是否带有中文字体包 # ls /usr/share/fonts/chinese 如没有则安装 # yum -y install fonts-chinese   2.设置cacti使用的rr ...

  3. 武汉科技大学ACM :1010: 零起点学算法103——一只小蜜蜂...

    Problem Description 有一只经过训练的蜜蜂只能爬向右侧相邻的蜂房,不能反向爬行.请编程计算蜜蜂从蜂房a爬到蜂房b的可能路线数. 其中,蜂房的结构如下所示. Input 输入数据的第一 ...

  4. Ubuntu最小化桌面快捷键Super+D不生效解决

    之前用的Debian,最近研发老大让统一使用Ubuntu来开发,安装了Ubuntu 15.10之后,设置了最小化桌面的快捷键为Super+D(在Systm Settings/系统设置—>Keyb ...

  5. CSS中zoom:1的作用

    兼容IE6.IE7.IE8浏览器,经常会遇到一些问题,可以使用zoom:1来解决,有如下作用:触发IE浏览器的haslayout解决ie下的浮动,margin重叠等一些问题.比如,本站使用DIV做一行 ...

  6. Symfony2源码分析——启动过程1

    本文通过阅读分析Symfony2的源码,了解Symfony2启动过程中完成哪些工作,从阅读源码了解Symfony2框架. Symfony2的核心本质是把Request转换成Response的一个过程. ...

  7. java-map-EnumMap

    在平常的项目中,enumMap是比较少用到的一种map,一般都不会使用到这种容器,那么我将从如下几个方面来阐述我对enumMap的理解 1.使用场景 在key是比较固定的情况下,使用enumMap是最 ...

  8. Linux查看机器是多少位

    命令: file /bin/ls或者file /sbin/init 示例: 如上所示,我的机器是32位的.

  9. HTML5 + CSS3 + JavaScript

    http://www.programmer.com.cn/14761/#more-14761 文/李晶 随着互联网产业的爆炸式增长,与之伴生的Web前端技术也在历经洗礼和蜕变.尤其是近几年随着移动终端 ...

  10. 两段小PYTHON,作啥用的,行内人才懂~~~:(

    哎,作也不是,不作也不是.... 下次有更新文件时,直接刷新一次了. #coding: UTF-8 import sys reload(sys) sys.setdefaultencoding( &qu ...