Кастомизация
06
Фев
0

Разукрашиваем Представления

Сегодня будем разукрашивать Представления. Как-то уже делали такое, но для этого приходилось вмешиваться в работу стандартных файлов CRM. Сегодня попробуем реализовать менее радикальный способ, но все же в конечном счете тоже не поддерживаемый.

Для примера будем разукрашивать Представление Организаций: если столбец Отрасль = «Строительство», то подкрашиваем всю строку.

Начнем:

  • Создайте JS Веб-ресурс с именем new_colorgrid.js и таким кодом:
    function BackGroundColorGrid (items, grid) {
        try {
            if (items) {
                var index = $("#gridBodyTable").find("col[name=industrycode]").index();
                if (index != -1) {
                    for (var i = 0; i < items.length; i++) {
                        var id = items[i].Id;
                        $(grid._element).find("tr[oid='" + id + "']").each(function () {
                            var theTr = $(this);
                            if (theTr.find("td").slice(index, index + 1).text() == "Строительство") {
                                theTr.find("td").css("background-color", "#84E324");
                            }
                        });
                    }
                }
            }
        }
        catch (e) {
            alert(e.description);
        }
    }
    

    Что тут у нас:

    • Функция на входе принимает массив элементов в Представлении и контрол Представления (все это передается стандартными средствами настройки Ленты).
    • Далее мы ищем в Представлении строки содержащие столбец industrycode.
    • Отбираем из грида тэги TR.
    • И если в строке столбец industrycode = «Строительство», закрашиваем всю строку.
  • Добавьте для объекта Организации (в данном примере) такую кнопку:
    <RibbonDiffXml>
      <CustomActions>
        <CustomAction Id="Mscrm.HomepageGrid.account.MainTab.Actions" Location="Mscrm.HomepageGrid.account.MainTab.Actions.Controls._children" Sequence="20">
          <CommandUIDefinition>
            <Button Id="Mscrm.HomepageGrid.account.Colorization.Button" Command="Mscrm.HomepageGrid.account.Colorization.Button.Command" CommandType="General" Image32by32="/_imgs/Ribbon/Actions_32.png" LabelText="Colorize" Sequence="22" TemplateAlias="o1" />
          </CommandUIDefinition>
        </CustomAction>
      </CustomActions>
      <Templates>
        <RibbonTemplates Id="Mscrm.Templates"></RibbonTemplates>
      </Templates>
      <CommandDefinitions>
        <CommandDefinition Id="Mscrm.HomepageGrid.account.Colorization.Button.Command">
          <EnableRules>
            <EnableRule Id="ColorizeRule" />
          </EnableRules>
          <DisplayRules />
          <Actions />
        </CommandDefinition>
      </CommandDefinitions>
      <RuleDefinitions>
        <TabDisplayRules />
        <DisplayRules />
        <EnableRules>
          <EnableRule Id="ColorizeRule">
            <CustomRule Default="false" InvertResult="false" FunctionName="BackGroundColorGrid" Library="$webresource:new_colorgrid.js">
              <CrmParameter Value="SelectedControlAllItemReferences" />
              <CrmParameter Value="SelectedControl" />
            </CustomRule>
          </EnableRule>
        </EnableRules>
      </RuleDefinitions>
      <LocLabels />
    </RibbonDiffXml>
    

    Это очень хитрая кнопка. Визуально она не отображается, потому что отображать или нет определяет скрипт. Скрипт честно выполняется, но вместо того, чтобы вернуть true или false (как и положе в таком случае), скрипт занимается своими делами 🙂 А именно: разукрашивает Представление.


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

*

code