2012-01-20 64 views
1

我想在使用javascript的CRM 2011窗体中有条件地禁用系统功能区= AddNew。这意味着如果statusCode是X或Y禁用功能区,我怎么能做到这一点?在CRM 2011中禁用系统功能区

我尝试获取功能区的ID以便将功能区的类名更改为禁用,但由于功能区是非同步加载的,因此我得到空值!

回答

3

要在安华的回答扩大,关键要得到这个工作是拦截和重用的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)这里是安华的答案来自于:同时使用OrRuleValueRule,定义EnableRule去检查statuscode S上的实体。链接的演示涉及一个新的功能区按钮,但同样的规则也适用于重新用途的功能区控件。

当您完成时发布您的更改,并且您的色带应该全部设置好。因为我不知道你对RibbonXml有多熟悉,所以我还会提及Microsoft has some comprehensive walkthroughs,这对我们来说很有帮助(经过很长时间的研究之后!)。

+0

非常感谢所有人:-) – user1160771

0

我这是怎么隐藏形式发票上的删除按钮,根据状态代码,形式的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,您希望从隐藏页面的来源。

+0

尝试'top.document.querySelector(“li [title * ='BUTTON NAME']”)' – KingRider

相关问题