【问题标题】:setDisable for all fields of a Section in a Crm Form为 Crm 表单中某个部分的所有字段设置禁用
【发布时间】:2014-09-02 16:12:57
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    我看到的大多数答案都使用了 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);
    

    【讨论】:

      【解决方案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);
                }
              }
          }
      

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-08-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-05-23
          • 2015-12-10
          相关资源
          最近更新 更多