Отключить системную ленту в CRM 2011 - PullRequest
1 голос
/ 20 января 2012

Я хотел бы условно отключить системную ленту = AddNew в форме CRM 2011 с использованием JavaScript. Это означает, что если statusCode имеет значение X или Y, отключить ленту, как я могу это сделать?

Я попытался получить идентификатор ленты, чтобы изменить имя класса ленты на отключенное, но я получил значение Null, поскольку ленты загружаются асинхронно!

Ответы [ 3 ]

3 голосов
/ 23 января 2012

Чтобы расширить ответ Анвара, ключом к тому, чтобы заставить его работать, является перехват и изменение функциональности кнопки ленты 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 есть несколько всесторонних пошаговых руководств , которые очень полезны (после долгого изучения их!) При поиске.

1 голос
/ 20 января 2012

Эта статья объясняет, что именно вы ищете.

Пожалуйста, перейдите по этой ссылке Как использовать «ValueRule» и «OrRule» в настройках ленты - CRM 2011

0 голосов
/ 15 января 2013

Вот как я скрываю кнопку удаления в форме счета, основываясь на коде состояния, загрузке формы:

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

Вы можете получить идентификатор диапазона элемента, от которого хотите скрытьИсточник страницы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...