Разукрашиваем Представления
Сегодня будем разукрашивать Представления. Как-то уже делали такое, но для этого приходилось вмешиваться в работу стандартных файлов 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 (как и положе в таком случае), скрипт занимается своими делами 🙂 А именно: разукрашивает Представление.