我想使用javascript在CRM 2011表单中有条件地禁用System Ribbon = AddNew。这意味着如果statusCode是X或Y禁用功能区,我该怎么做?
我尝试获取功能区的ID以便将功能区的类名更改为禁用,但我得到Null,因为功能区是异步加载的!
答案 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的回答:同时使用OrRule
和ValueRule
,定义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。