禁用CRM 2011中的系统功能区

时间:2012-01-20 14:13:02

标签: ribbon dynamics-crm-2011

我想使用javascript在CRM 2011表单中有条件地禁用System Ribbon = AddNew。这意味着如果statusCode是X或Y禁用功能区,我该怎么做?

我尝试获取功能区的ID以便将功能区的类名更改为禁用,但我得到Null,因为功能区是异步加载的!

3 个答案:

答案 0 :(得分:3)

为了扩展Anwar的答案,让这个工作起作用的关键是截取并重新调整AddNew功能区按钮的功能,但是一旦你这样做,就不需要攻击Ribbon DOM了。 。以下是您可以采取的几个步骤。

1)Create a solution with the Application Ribbon included.

2)在SDK中查找应用程序功能区的示例功能区,或使用SDK中包含的解决方案自行构建。

  
    

\ SDK \资源\ exportedribbonxml

         

\ SDK \ samplecode \ CS \客户\色带\ exportribbonxml \ exportedribbonxml

  

3)在Application Ribbon模板中找到您感兴趣的控件,我假设在这种情况下是实体子网格中的AddNew按钮。在CustomAction中重新调整此控件的位置,并使CustomAction的位置与您要重新调整用途的控件的名称相同。

<CustomAction Id="YourOrg.SubGrid.{!EntityLogicalName}.AddNewStandard" 
    Location="Mscrm.SubGrid.{!EntityLogicalName}.AddNewStandard">
  <CommandUIDefinition>
    <Button Id="Mscrm.SubGrid.{!EntityLogicalName}.AddNewStandard" 
        Command="Mscrm.AddNewRecordFromSubGridStandard" Sequence="20" 
        LabelText="$Resources(EntityDisplayName):Ribbon.SubGrid.AddNew" 
        Alt="$Resources(EntityDisplayName):Ribbon.SubGrid.AddNew" 
        Image16by16="/_imgs/ribbon/NewRecord_16.png"
        Image32by32="/_imgs/ribbon/newrecord32.png" TemplateAlias="o1" 
        ToolTipTitle="$Resources(EntityDisplayName):Mscrm_SubGrid_EntityLogicalName_MainTab_Management_AddNewStandard_ToolTipTitle" 
        ToolTipDescription="$Resources(EntityDisplayName):Mscrm_SubGrid_EntityLogicalName_MainTab_Management_AddNewStandard_ToolTipDescription" />
  </CommandUIDefinition>
</CustomAction>

4)在Application Ribbon模板中查找此按钮命令的定义,并使用确切定义作为新CommandDefinition的基础,添加您自己的自定义规则(在本例中为新的EnableRule)。

<CommandDefinition Id="Mscrm.AddNewRecordFromSubGridStandard">
  <EnableRules>
    <EnableRule Id="Mscrm.AppendToPrimary" />
    <EnableRule Id="Mscrm.EntityFormIsEnabled" />
    <EnableRule Id="YourOrg.DisableNewStuff" /> <!--your custom rule-->
  </EnableRules>
  <DisplayRules>
    <DisplayRule Id="Mscrm.ShowForOneToManyGrids" />
    <DisplayRule Id="Mscrm.AppendToPrimary" />
    <DisplayRule Id="Mscrm.CreateSelectedEntityPermission" />
    <DisplayRule Id="Mscrm.AppendSelected" />
    <DisplayRule Id="Mscrm.HideAddNewForChildEntities" />
  </DisplayRules>
  <Actions>
    <JavaScriptFunction FunctionName="Mscrm.GridRibbonActions.addNewFromSubGridStandard" 
          Library="/_static/_common/scripts/RibbonActions.js">
      <CrmParameter Value="SelectedEntityTypeCode" />
      <CrmParameter Value="PrimaryEntityTypeCode" />
      <CrmParameter Value="FirstPrimaryItemId" />
      <CrmParameter Value="PrimaryControl" />
    </JavaScriptFunction>
  </Actions>
</CommandDefinition>

5)以下是Anwar的回答:同时使用OrRuleValueRule,定义EnableRule以检查实体的statuscode。链接演示与新的功能区按钮有关,但相同的规则也适用于重新调整的功能区控件。

完成后发布您的更改,并且您的功能区应全部设置完毕。因为我不确定你对RibbonXml的熟悉程度如何,所以我还会提到那些非常有帮助的Microsoft has some comprehensive walkthroughs(经过很长时间研究它们之后!)。

答案 1 :(得分:1)

本文将准确解释您的需求。

请点击此链接 How To Use "ValueRule" and "OrRule" in Ribbon Customizations - CRM 2011

答案 2 :(得分:0)

这是我隐藏发票表单上的删除按钮的方式,基于状态代码,表单的上传:

    var statusVal = Xrm.Page.getAttribute("statuscode").getValue();
    if (statusVal==4 || statusVal==6) {
    //Disable delete button
    var x =top.document.getElementById("invoice|NoRelationship|Form|Mscrm.Form.invoice.Delete-Medium");
    x.style.display='none';  

您可以获取要从页面源隐藏的元素范围的ID。