MSCRM2011 通过JS脚本操作ribbon按钮(显示隐藏、是否可用等)

一.在MSCRM2011里新增了ribbon工具条,官方修改ribbon工具条的方法是通过修改配置文件(修改导出实体里的ribbondiffxml节点),这里就不介绍官方的修改方法了。

二.在最新的项目里遇到了对ribbon按钮的操作,本来想通过修改自定义的ribbondiffxml节点去实现,后来发现不是太方便,而且貌似只能修改自定义的按钮,无法修改系统原来的按钮(比如“保存”按钮)

三.因此考虑是否能从JS的角度去操作,经过一番测试发现,窗体加载时是无法找到ribbon按钮的,因为Form表单是嵌在iframe里,而ribbon按钮是在iframe之外,并且通过测试发现,在表单加载完成之后才会加载ribbon工具条,所以直接用JS去获取ribbon按钮对象是不行的。

四.另外想办法,忽然想到由于ribbon工具条是在表单加载完后才加载的,那是否可以考虑用JS模拟一个多线程的机制去获取ribbon按钮,即在不阻止当前表单加载的情况下,从另外的线程去找ribbon按钮。这里注意:如果直接用while循环之类的方法去找ribbon按钮,当前表单会卡死,因为会导致死循环。

五.实现

1.下载Concurrent.Thread.js (百度搜下),这是别人写得一个模仿多线程的JS。

2.引用Jquery(别说没用过Jquery啊),我写的JS基本都是基于Jquery的,懒嘛。。呵呵

3.调用以下方法

//设置ribbon工具栏按钮是否可用,index-从左向右数第几个按钮(从0开始),text-按钮中文名称(如"保存"),disabled-是否可用
(true/false)

//这里解释下为什么有了index还要用按钮中文名称呢,因为如果你当前表单嵌套了1:N的子网格的话,当你点击子网格时ribbon工具栏里的按钮会加载子网格实体的相关按钮,这时候就可能隐藏的是父实体的按钮而非子实体的按钮

function SetRibbonDisabled(index, text, disabled) {
    Concurrent.Thread.create(function (i, t, d) {
        while ($('.ms-cui-tabContainer a', parent.document).eq(i).find("span").eq(2)[0].innerText != t) {

        }
        if ($('.ms-cui-tabContainer a', parent.document).eq(i).find("span").eq(2)[0].innerText == t) {
            $('.ms-cui-tabContainer a', parent.document).eq(i).children().attr("disabled", d);
            $('.ms-cui-tabContainer a', parent.document).eq(i).attr("disabled", d);
        }
    }, index, text, disabled);
}

//调用

SetRibbonDisabled(0, "保存", true);

注:一定要引用jquery,Concurrent.Thread.js

如有问题欢迎交流:peterqiu@wicresoft.com

 

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值