【问题标题】:Disable System Ribbon in CRM 2011在 CRM 2011 中禁用系统功能区
【发布时间】:2013-01-15 17:46:10
【问题描述】:

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

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

【问题讨论】:

    标签: ribbon dynamics-crm-2011


    【解决方案1】:

    为了扩展 Anwar 的答案,让它发挥作用的关键是拦截并重新利用 AddNew 功能区按钮的功能,但是一旦你这样做了,就不需要破解功能区 DOM。以下是您可以采取的几个步骤。

    1) Create a solution with the Application Ribbon included.

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

    \sdk\resources\exportedribbonxml

    \sdk\samplecode\cs\client\ribbon\exporttribbonxml\exportedribbonxml

    3) 在应用程序功能区模板中找到您感兴趣的控件,在本例中我假设它是实体子网格中的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,添加您自己的自定义规则(在本例中为一个新的@987654329 @)。

    <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) 这里是安华的答案所在:同时使用OrRuleValueRule,定义您的EnableRule 以检查实体的statuscodes。链接的演示与新的功能区按钮相关,但相同的规则也适用于重新调整用途的功能区控件。

    完成后发布您的更改,您的功能区应该已全部设置好。因为我不确定您对RibbonXml 的熟悉程度,我还要提一下Microsoft has some comprehensive walkthroughs,这对学习它很有帮助(经过大量研究!)。

    【讨论】:

    • 非常感谢大家 :-)
    【解决方案2】:

    这篇文章准确地解释了你在寻找什么。

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

    【讨论】:

      【解决方案3】:

      这就是我如何隐藏发票表单上的删除按钮,基于状态代码,表单的加载:

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

      你可以获取元素 span 的 id,你想从页面源中隐藏它。

      【讨论】:

      • 试试top.document.querySelector("li[title*=' BUTTON NAME']")
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多