setDisable用于在CRM表单

问题描述:

我需要禁用一个部分,如果从其他字段中的值是真科的各个领域,通常我会做:setDisable用于在CRM表单

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.. 
} 

我看到你有使用用途sectionLable最答案nd做以下比较: controlIHave.getParent().getLabel()=="name of the section

但经过一些试验后,我发现我可以使用Xrm.Page.ui.tabs.get(tabNumber).sections.get(sectionNumber).controls.get()来获取该节内的控件。这允许我使用下面的功能:通过使用controls[i].getAttribute()那么你可以得到一个部分的属性

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) 
    } 
} 

我结束了创建一个对象,让我关闭并清除所有字段中的一段:

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); 

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); 
      } 
     } 
    } 

在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); 
     }); 
}