Построение виджета из списка объектов

Описание действия

Виджет может быть создан на основе списка объектов.

Формирование виджета зависит от того, где находиться дашборд, на который он перенаправляется при построении. При построении кроме наложенных на сам список фильтраций, добавляется фильтрация расположения объекта.

Пример, на карточке сотрудника выведен список его заявок и на панель действий списка добавлена кнопка формирования виджета. Если при нажатии на кнопку открывается дашборд, расположенный на карточке сотрудника, то все заявки сотрудника будут отражены в виджете. Если при нажатии на кнопку открывается дашборд, расположенный на карточке компании, то заявки сотрудника на виджете не отображаются.

Предварительные настройки

  1. Чтобы дашборд был доступен для выбора при создании виджета в списке объектов, атрибут компании dashboardCode должен быть заполнен.

    Можно воспользоваться скриптом:

    def subj = utils.get('root', [:]);
    utils.edit (subj, ['dashboardCode': 'код ВП'])
    return subj.dashboardCode
  2. Добавить действие по событию "Построение диаграммы из списка объектов".

    Параметры действия по событию:

    • Название — Построение диаграммы из списка объектов.
    • Код — createDiagramFromAdvList.
    • Событие — Пользовательское событие.
    • Выполнять синхронно.
    • Действие — Скрипт

      Copy
      //Назначение:
      /**
       * Построение диаграммы на основе данных из настроенного списка объектов
       */
      //Версия: 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]
       
      //updated: mpleshhyov 22.11.2019
      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)
  3. Настроить параметр пользовательского действия по событию.

    Параметр пользовательского действия по событию:

    • Название — Список дашбордов.
    • Код — dynamicList.
    • Тип значения — Элемент произвольного справочника.
    • Скрипт вычисления элементов справочника - "Получение списка контентов ВП (dashForBack)" (PoluchenieSpiskaKontentovVPDashForBack

      Copy
      //Назначение:
      /**
       * Собираем мапу со всеми дашбордами в системе для выбора пользователем
       */
      //Версия: 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 ] } //update kkasyan 
  4. Добавить пользовательскую кнопку на панель действий списка объектов, из которого планируется создание виджет.

Выполнение действия

  1. Выполните настройки фильтрации списка объектов

  2. Нажмите пользовательскую кнопку "Построить виджет".

  3. На форме добавления виджета из списка выберите дашборд, на который будет добавлен виджет.

    После выбора дашборда, в новой вкладке будет открыт выбранный дашборд с открытой панелью редактирования виджета.

  4. Заполните недостающие параметры виджета (название, тип диаграммы, параметр, показатель, разбивку если необходимо) и сохраните настройки

Результат действия

Будет построен виджет по данным из списка объектов.

Последующие действия