crm表单中Section的所有字段的setDisable

时间:2014-07-11 22:58:59

标签: javascript dynamics-crm-2011 dynamics-crm dynamics-crm-2013 disabled-input

如果其他字段的值为true,我需要禁用一个部分,通常我会这样做:

function disableSection1(disabledStatus){
    Xrm.Page.getControl("section1field1").setDisabled(disabledStatus);
    Xrm.Page.getControl("section1field2").setDisabled(disabledStatus);
    Xrm.Page.getControl("section1field3").setDisabled(disabledStatus);
    Xrm.Page.getControl("section1field4").setDisabled(disabledStatus);
}

但是我必须为很多部分做这个,所以我正在寻找这样的函数:

function sectionSetDisabled(tabNumber, sectionNumber, disabledStatus){
    //some code..
}

4 个答案:

答案 0 :(得分:2)

我见过的大多数答案都使用了sectionLable并进行了以下比较: controlIHave.getParent().getLabel()=="name of the section

但经过一些试验后,我发现我可以使用Xrm.Page.ui.tabs.get(tabNumber).sections.get(sectionNumber).controls.get()获取该部分内的控件。这让我可以使用以下功能:

function sectionSetDisabled(tabNumber, sectionNumber, disablestatus) {
    var section = Xrm.Page.ui.tabs.get(tabNumber).sections.get(sectionNumber);
    var controls = section.controls.get();
    var controlsLenght = controls.length;

    for (var i = 0; i < controlsLenght; i++) {
        controls[i].setDisabled(disablestatus)
    }
}

使用controls[i].getAttribute(),您就可以获得某个部分的属性。

我最终创建了一个对象,允许我禁用和清除部分中的所有字段:

function sectionObject(tabNumber, sectionNumber) {
    var section = Xrm.Page.ui.tabs.get(tabNumber).sections.get(sectionNumber);

    this.setDisabled = function (disablestatus) {
        var controls = section.controls.get();
        var controlsLenght = controls.length;
        for (var i = 0; i < controlsLenght; i++) {
            controls[i].setDisabled(disablestatus)
        }
    };

    this.clearFields = function () {
        var controls = section.controls.get();
        var controlsLenght = controls.length;
        for (var i = 0; i < controlsLenght; i++) {
            controls[i].getAttribute().setValue(null);
        }
    };

}

var section=new sectionObject(0,1);
section.setDisabled(true/false);

答案 1 :(得分:2)

function TabObject(tabName, DisableStatus) {  
         var sectionName = Xrm.Page.ui.tabs.get(tabName).sections.get();
         for (var i in sectionName) {
         var controls = sectionName[i].controls.get();
         var controlsLenght = controls.length;
         for (var i = 0; i < controlsLenght; i++) {
             controls[i].setDisabled(DisableStatus);
          }
        }
    }

答案 2 :(得分:1)

在CRM 2013(及更高版本)中,您可以使用forEach迭代器。这基本上允许单行中的功能。

/* Parameters:
 * tabNumber = Tab Name/Id assigned in the form editor.
 * sectionNumber = Section Name/Id assigned in the form editor.
 */

function sectionSetDisabled(tabNumber, sectionNumber, disabledStatus) {
    // Pull the tab, then section (within the tab) and create an iterator.
    Xrm.Page.ui.tabs.get(tabNumber).sections.get(sectionNumber).controls.forEach(
        // Delegate to set the status of all controls within the section.
        function (control, index) {
            control.setDisabled(disabledStatus);
        });
}

答案 3 :(得分:0)