Разработка
28
Ноя
0

OnChange для связанного Представления

Задача: подписаться на события изменения связанного Представления, такие как его загрузка, сохранение, обновление, выделение записей и т.д. И при их возникновении выполнять какой-либо JS-код.

Суть фокуса состоит в том, чтобы повесить на «Ленту» связанного Представления неактивную кнопку, активность которой будет просчитываться с помощью скрипта и в нем же будет выполнятся нужная бизнес-логика (при этом скрипт всегда будет оставлять кнопку скрытой).

Начнем:

  1. Создайте JS-веб ресурс, в котором поместите функцию, которую мы будем вызывать при изменение связанного Представления. В нашем примере это будет:
    function test(input) {
        alert(input);
    }
    

    Прикрепите этот Веб-ресурс к форме основного объекта (в данном случаем это Организация);

  2. Выгрузите из системы Решение содержащее только связанный объект (в данном случае это Контакт). Выгрузите его и добавьте в файл кастомизации примерно следующий код:
    <RibbonDiffXml>
      <CustomActions>
        <CustomAction Id="HideButton.CustomAction" Location="Mscrm.SubGrid.contact.MainTab.Management.Controls._children" Sequence="5">
          <CommandUIDefinition>
            <Button Command="HideButton.Command" Id="HideButton.Button" LabelText="Кнопка" Sequence="5" TemplateAlias="o1" />
          </CommandUIDefinition>
        </CustomAction>
      </CustomActions>
      <Templates>
        <RibbonTemplates Id="Mscrm.Templates" />
      </Templates>
      <CommandDefinitions>
        <CommandDefinition Id="HideButton.Command">
          <EnableRules>
            <EnableRule Id="HideButton.EnableRule" />
          </EnableRules>
          <DisplayRules />
          <Actions>
            <Url Address="http://crm:5555" WinMode="0" />
          </Actions>
        </CommandDefinition>
      </CommandDefinitions>
      <RuleDefinitions>
        <TabDisplayRules />
        <DisplayRules />
        <EnableRules>
          <EnableRule Id="HideButton.EnableRule">
            <CustomRule FunctionName="test" Library="$webresource:new_account.js" Default="false">
              <CrmParameter Value="SelectedControlSelectedItemIds" />
            </CustomRule>
          </EnableRule>
        </EnableRules>
      </RuleDefinitions>
      <LocLabels />
    </RibbonDiffXml>
    
    
  3. Здесь у нас простая кнопка, к которой привязано действие (в CRM 2013 кнопки без команд всегда скрываются). Активность кнопки определяется в JS Веб-ресурсе. При этом наш JS ничего не возвращает (а должен true или false), но в правиле определено значение по умолчанию — false — поэтому кнопка всегда будет неактивна (и скрыта — неактивные кнопки в CRM 2013 автоматически скрываются);


Комментарии (0)

*

code