Создание виджета из списка объектов
Описание
Виджет может быть создан на основе списка объектов.
Формирование виджета зависит от того, где находится дашборд, на который он перенаправляется при построении. При построении кроме наложенных на сам список фильтраций, добавляется фильтрация расположения объекта.
Пример, на карточке сотрудника выведен список его заявок и на панель действий списка добавлена кнопка формирования виджета:
- Если открывается дашборд, расположенный на карточке сотрудника, то все заявки сотрудника будут отражены в виджете.
- Если открывается дашборд, расположенный на карточке компании, то заявки сотрудника на виджете не отображаются.
Предварительные настройки
-
Чтобы дашборд был доступен для выбора при создании виджета в списке объектов, атрибут компании с кодом dashboardCode должен быть заполнен.
Для заполнения атрибута можно воспользоваться скриптом:
def subj = utils.get('root', [:]); utils.edit (subj, ['dashboardCode': 'код ВП']) return subj.dashboardCode -
Добавьте пользовательское действие по событию "Построение диаграммы из списка объектов".
Место настройки в интерфейсе: Меню навигации "Настройка системы" → настройки "Действия по событиям".
На странице "Действия по событиям" нажмите Добавить действие, заполните поля на форме добавления и нажмите Сохранить.
Поля на форме добавления:
- Название "Построение диаграммы из списка объектов".
- Код createDiagramFromAdvList.
- Событие "Пользовательское событие".
- Действие "Скрипт".
- Выполнять синхронно — флажок остановлен.
-
Текст скрипта:
//Назначение: /** * Построение диаграммы на основе данных из настроенного списка объектов */ //Версия: 4.11.0 //Категория: Скрипты действий по событию //ОСНОВНОЙ БЛОК-------------------------------------------------------- def dashboard = utils.findFirst('root', [:]).dashboardCode if(!dashboard) { def MSG = 'Ошибка: Не настроен код встроенного приложения Дашборды в системе (атрибут dashboardCode на уровне компании)' utils.throwReadableException(MSG, null, MSG, null); } def PRFX = 'createDiagramFromAdvList >> '; if(!params.dynamicList) { utils.throwReadableException('Должен быть выбран как минимум один вид дашборда!'); } def contentCode = params.dynamicList.keySet()[0] def allDBs = api.apps.listContents(dashboard) def classFqn; def tabUuid; for(def db in allDBs) { if(db.contentUuid == contentCode) { classFqn = db.subjectFqn; tabUuid = db.tabUuid; break; } } if (!classFqn || !tabUuid) { utils.throwReadableException("Дашборд (${dashboard}) не выведен на контент '${contentCode}'"); } def value = api.actionContext.listDescriptorAsJson(objectListContext) def targetObject if (classFqn.toString() == cardObject.metaClass.toString()) { targetObject = cardObject } else { targetObject = utils.findFirst(classFqn, ['removed': false]) } def urlToGo = api.web.openTab(targetObject.UUID, tabUuid) //складываем значения из списка в localstorage def javascript = "localStorage['widgetContext_${classFqn}_${contentCode}'] = '${value}';"; // и открываем в новой вкладке страницу с дашбордом javascript += " window.open('${urlToGo}');" result.executeJavaScript(javascript)
-
Настройте параметры пользовательского действия по событию.
Место настройки в интерфейсе: Меню навигации "Настройка системы" → настройка "Действия по событиям" → карточка действия по событию "[Пользовательское событие]" → блок "Параметры".
В блоке "Параметры" нажмите Добавить параметр, на форме добавления заполните поля и нажмите Сохранить.
Поля формы добавления параметра:
- Название "Список дашбордов".
- Код dynamicList.
- Тип значения "Элемент произвольного справочника".
- Скрипт вычисления элементов справочника "Получение списка контентов ВП (dashForBack)" (PoluchenieSpiskaKontentovVPDashForBack
-
Текст скрипта:
//Назначение: /** * Собираем мапу со всеми дашбордами в системе для выбора пользователем */ //Версия: 4.11.0 //Категория: Скрипты действий по событию //ОСНОВНОЙ БЛОК-------------------------------------------------------- def dashboard = utils.findFirst('root', [:]).dashboardCode if(!dashboard) { return [ 'error' : 'Ошибка: Не настроен код встроенного приложения Дашборды в системе (атрибут dashboardCode на уровне компании)' ] } return api.apps.listContents(dashboard).collectEntries { [ it.contentUuid + '_' + it.subjectFqn, it.contentTitle ] }
-
Добавить пользовательскую кнопку формирования виджета Построить виджет на панель действий списка объектов, из которого планируется создание виджет.
Место настройки в интерфейсе: Меню навигации "Классы" → класс → вкладка "Карточка объекта" → контент со списком. Форма настройки панели действий открывается при нажатии на иконку настройки

-
Нажмите на элемент "Новая кнопка" и в меню возможных действий с элементом выберите пункт "Добавить на панель действий".
-
На форме "Добавление элемента" заполните параметры пользовательского элемента управления:
- Название "Построить виджет".
- Внешний вид "кнопка с подписью".
- Применяется к "к объектам списка".
- Действие "Построение диаграммы из списка объектов".
- Нажмите Сохранить. Новый элемент управления будет отображаться в списке объектов.
-
Выполнение действия
-
Выполните настройки фильтрации списка объектов.
-
Нажмите Построить виджет.
-
На форме добавления виджета из списка выберите дашборд, на который будет добавлен виджет.
После выбора дашборда, в новой вкладке будет открыт выбранный дашборд с открытой панелью редактирования виджета.
-
Заполните недостающие параметры виджета (название, тип диаграммы, параметр, показатель, разбивку если необходимо) и нажмите Сохранить.
Набор параметров зависит от типа виджета, подробнее в отдельных подразделах раздела Построение виджетов разных типов.
Будет построен виджет по данным из списка объектов.