我想在使用javascript的CRM 2011窗体中有条件地禁用系统功能区= AddNew。这意味着如果statusCode是X或Y禁用功能区,我怎么能做到这一点?在CRM 2011中禁用系统功能区
我尝试获取功能区的ID以便将功能区的类名更改为禁用,但由于功能区是非同步加载的,因此我得到空值!
我想在使用javascript的CRM 2011窗体中有条件地禁用系统功能区= AddNew。这意味着如果statusCode是X或Y禁用功能区,我怎么能做到这一点?在CRM 2011中禁用系统功能区
我尝试获取功能区的ID以便将功能区的类名更改为禁用,但由于功能区是非同步加载的,因此我得到空值!
要在安华的回答扩大,关键要得到这个工作是拦截和重用的AddNew
功能区按钮的功能,但一旦你做,不会有任何需要黑客的功能区DOM。以下是您可以采取的几个步骤。
1)Create a solution with the Application Ribbon included.
2)在SDK查找应用程序功能区中的样品带或使用包括在SDK中的溶液建立它自己。
\ SDK \资源\ exportedribbonxml
\ SDK \ samplecode \ CS \客户\丝带在应用丝带模板\ exportribbonxml \ 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)应用丝带模板找到这个按钮的命令的定义,并使用精确定义的新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)这里是安华的答案来自于:同时使用OrRule
和ValueRule
,定义EnableRule
去检查statuscode
S上的实体。链接的演示涉及一个新的功能区按钮,但同样的规则也适用于重新用途的功能区控件。
当您完成时发布您的更改,并且您的色带应该全部设置好。因为我不知道你对RibbonXml
有多熟悉,所以我还会提及Microsoft has some comprehensive walkthroughs,这对我们来说很有帮助(经过很长时间的研究之后!)。
这篇文章解释了你正在寻找什么。
请点击此链接 How To Use "ValueRule" and "OrRule" in Ribbon Customizations - CRM 2011
也感谢你安华。 – user1160771
我这是怎么隐藏形式发票上的删除按钮,根据状态代码,形式的onload:
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,您希望从隐藏页面的来源。
尝试'top.document.querySelector(“li [title * ='BUTTON NAME']”)' – KingRider
非常感谢所有人:-) – user1160771