Чтобы расширить ответ Анвара, ключом к тому, чтобы заставить его работать, является перехват и изменение функциональности кнопки ленты AddNew
, но как только вы это сделаете, вам не нужно будет взламывать Ribbon DOM.Ниже приведены несколько шагов, которые можно предпринять, чтобы туда добраться.
1) Создание решения с включенной лентой приложения.
2) Найдите в SDK образецлента для ленты приложений или создайте ее самостоятельно с помощью решения, включенного в SDK.
\ sdk \ resources \ exportedribbonxml
\ sdk \ samplecode \ cs \ client \ ribbon \ 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
сущности.Связанная демонстрация относится к новой кнопке ленты, но те же правила работают и для перенастроенных элементов управления ленты.
Публикуйте изменения, когда вы закончите, и ваша лента должна быть полностью настроена.Поскольку я не уверен, насколько вы знакомы с RibbonXml
, я также упомяну, что У Microsoft есть несколько всесторонних пошаговых руководств , которые очень полезны (после долгого изучения их!) При поиске.