Действия по событию для работы приложения "Чек-листы"

В разделе описаны скриптовые действия по событию, которые обеспечивают автосоздание чек-листов и их создание из шаблонов вручную. В скриптах действий по событию используются методы скриптового модуля приложения, см. Скриптовый модуль приложения "Чек-листы".

Действие по событию "[Чек-листы] Прикрепить чек-листы при добавлении объекта"

Действие обеспечивает автоматический подбор чек-листов при создании объекта, см. Автоматическое добавление чек-листа.

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

  • Название: [Чек-листы] Прикрепить чек-листы при добавлении объекта.
  • Объекты: Запрос.
  • Событие: Добавление объекта.
  • Действие: Скрипт.
  • Выполнять синхронно:

    • флажок снят (рекомендуется) — действие по событию выполняется асинхронно;
    • флажок установлен — действие по событию выполняется синхронно.
  • Скрипт:
    • Название скрипта: [Чек-листы] Прикрепить чек-листы при добавлении объекта.
    • Текст скрипта:
      Copy
      /*! UTF8 */
      //Автор: pkuzmin
      //Дата создания: 02.09.22
      //Код: CheklistyPrikrepitCheklisyPriDobavleniiObekta
      //Назначение:
      /**
      * [Чек-листы] Прикрепить чек-лисы при добавлении объекта
      */
      //Версия чек-листов: 1.0.0
      //Версия SMP: 4.14.0.9
      //Категория:
      //Параметры------------------------------------------------------
      //Функции--------------------------------------------------------
      //Основной блок -------------------------------------------------
       
      String subjectUUID = subject.UUID 
       
      boolean result = modules.checkLists.createObjectChecklists(subjectUUID) //до версии 2.5.0
       
      //с версии 2.5.1 boolean result = modules.checkLists.updateObjectChecklists(subjectUUID)
       
      if (result)
      {
        logger.info("Создание и прикрепление чек-листов для ${subjectUUID} прошло успешно")
      }
      else

        logger.error("При создании и прикреплении чек-листа для ${subjectUUID} произошла ошибка")
      }

Действие по событию "[Чек-листы] Переприкрепить чек-листы при изменении объекта"

Действие обеспечивает создание и прикрепление чек-листов к объекту при изменении этого объекта.

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

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

  • Название: [Чек-листы] Переприкрепить чек-листы при изменении объекта.
  • Объекты: Запрос.
  • Событие: Изменение объекта.
  • Действие: Скрипт.
  • Выполнять синхронно:

    • флажок снят (рекомендуется) — действие по событию выполняется асинхронно;
    • флажок установлен — действие по событию выполняется синхронно.
  • Скрипт:
    • Название скрипта: [Чек-листы] Переприкрепить чек-листы при изменении объекта.
    • Текст скрипта:
      Copy
      /*! UTF8 */
      //Автор: pkuzmin
      //Дата создания: 02.09.22
      //Код: CheklistyPereprikrepitCheklistyPriIzmeneniiObekta
      //Назначение: 
      /**
      * [Чек-листы] Переприкрепить чек-листы при изменении объекта
      */
      //Версия чек-листов: 1.0.0
      //Версия SMP: 4.14.0.9
      //Категория: 
      //Параметры------------------------------------------------------
      //Функции--------------------------------------------------------
      //Основной блок -------------------------------------------------

      String subjectUUID = subject.UUID  

      if (!utils.load(subject.UUID))
      {
        logger.info("CheckLists объект ${subject.UUID} еще не создан. Запуск действия по событию на обновление прерывается")      
      }

      logger.info('CheckLists changedAttributes -> ' + changedAttributes)

      boolean result = modules.chklsts_checkLists?.updateObjectChecklists(subjectUUID)

      if (result)
      {
        logger.info("Обновление чек-листов для ${subjectUUID} прошло успешно")
      }
      else
      {  
        logger.error("При обновлении чек-листов для ${subjectUUID} произошла ошибка")
      }

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

Условие выполнения действия позволяет запускать повторный подбор чек-листов только при изменении определенных атрибутов объекта — указанных в группе "[Чек-листы] Для настройки правила выбора шаблона чек-листа" класса, к объектам которого будут добавляться чек-листы, см. Настройки класса "Запрос" для работы с чек-листами.

Общее описание настройки условий, см. Условия выполнения действия по событию.

Поля на форме добавления условия выполнения действия:

  • Название: [Чек-листы] Переприкреплять чек-листы только при изменении атрибутов, от которых зависит подбор чек-листа.
  • Выполнять проверку синхронно: флажок установлен.
  • Скрипт:
    • Название скрипта: [Чек-листы] Переприкреплять чек-листы только при изменении атрибутов, от которых зависит подбор чек-листа.
    • Текст скрипта:
      Copy
      /*! UTF8 */
      //Автор: ashukstov
      //Дата создания: 16.11.22
      //Код: CheklistyPereprikreplyatCheklistyTolkoPriIzmeneniiAtributovOtKot
      //Назначение: 
      /**
      * [Чек-листы] Переприкреплять чек-листы только при изменении атрибутов, от которых зависит подбор чек-листа
      */
      //Версия чек-листов: 1.0.0
      //Версия SMP: 4.14.0.9
      //Категория: 
      //Параметры------------------------------------------------------
      //Функции--------------------------------------------------------
      //Основной блок -------------------------------------------------

      // Группа атрибутов, на которые завязывается автоподбор чек-листов
      def GROUP_CODE = 'chklstSelectRuleConditionAttrs'

      // Список атрибутов, которые должны быть изменены, чтобы начать переподбор чек-листов.
      // По умолчанию - атрибуты из группы для подбора чек-листов
      // Если нужны другие атрибуты - вставьте их коды в список ниже и закомментируйте
      // строчку, отмеченную комментарием ниже.
      def ATTRIBUTES_FOR_START_RESELECTION = []

      def METACLASS = api.metainfo.getMetaClass(subject)

      // Закомментируйте следующую строку, если чек-листы должны переподбираться по другому набору атрибутов.
      ATTRIBUTES_FOR_START_RESELECTION = METACLASS.getAttributeGroup(GROUP_CODE).getAttributeCodes()

      if (changedAttributes.intersect(ATTRIBUTES_FOR_START_RESELECTION).size() > 0)
      {
        return null
      }
      return "Переподбор чек-листов не был вызван, так как изменения объекта не касались нужных атрибутов."

Действие по событию "[Чек-листы] Добавить чек-лист из шаблона с карточки объекта"

Действие позволяет пользователю самостоятельно добавлять чек-листы к объекту из шаблона.

Действие выполняется при нажатии на пользовательский элемент управления (кнопку Добавить из шаблона на карточке объекта), для действия указывается дополнительный параметр, который позволяет при создании чек-листа выбрать шаблон, см. Настройка чек-листов на карточке запроса в веб-интерфейсе.

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

  • Название: [Чек-листы] Добавить чек-лист из шаблона с карточки объекта.
  • Объекты: Запрос.
  • Событие: [Пользовательское событие].
  • Действие: Скрипт.
  • Выполнять синхронно:

    • флажок снят (рекомендуется) — действие по событию выполняется асинхронно;
    • флажок установлен — действие по событию выполняется синхронно.
  • Скрипт:
    • Название скрипта: [Чек-листы] Прикрепить к объекту чек-лист из шаблона.
    • Текст скрипта:
      Copy
      /*! UTF8 */
      //Автор: pkuzmin
      //Дата создания: 02.09.22
      //Код: CheklistyPereprikrepitCheklistyPriIzmeneniiObekta
      //Назначение: 
      /**
      * [Чек-листы] Прикрепить к объекту чек-лист из шаблона
      */
      //Версия чек-листов: 1.0.0
      //Версия SMP: 4.14.0.9
      //Категория: 
      //Параметры------------------------------------------------------
      //Функции--------------------------------------------------------
      //Основной блок -------------------------------------------------

      String result = modules.chklsts_checkLists?.createChecklistFromTemplate(params.template.UUID, subject.UUID)

      if (result)
      {
        logger.info("Чек-лист ${result} для объекта ${subject.UUID} из шаблона ${params.template.UUID} добавлен успешно")
        result.reload(true)
      }
      else
      {  
        logger.error("Добавление чек-листа для объекта ${subject.UUID} из шаблона ${params.template.UUID} завершилось ошибкой")
      }

Параметры действия по событию настраиваются в карточке действия по событию "[Пользовательское событие]" → блок "Параметры".

Общее описание настройки параметров, см. Настройка параметров пользовательского действия.

Поля формы добавления параметра:

  • Название: "Выберите шаблон".
  • Код: template.
  • Тип значения: Ссылка на бизнес-объект.
  • Обязательный: флажок установлен.
  • Класс: Шаблон чек-листа.
  • Типы: Шаблон чек-листа для запроса.
  • Скрипт в параметре "Фильтрация значений при редактировании":
    • Название скрипта: [Чек-листы] Показывать только шаблоны нужного типа при выборе шаблона на карточке объекта.
    • Текст скрипта:
      Copy
      /*! UTF8 */
      //Автор: ashukstov
      //Дата создания: 04.09.22
      //Код: CheklistyPokazyvatTolkoShablonyNuzhnogoTipaPriVyboreShablonaNaKa
      //Назначение: 
      /**
      * [Чек-листы] Показывать только шаблоны нужного типа при выборе шаблона на карточке объекта
      */
      //Версия чек-листов: 1.0.0
      //Версия SMP: 4.14.0.9
      //Категория: 
      //Параметры------------------------------------------------------
      //Функции--------------------------------------------------------
      //Основной блок -------------------------------------------------

      def PARAMS_FOR_UPDATE_ON_FORMS = []

      if (form == null) {
          return PARAMS_FOR_UPDATE_ON_FORMS
      }

      def classCode = subject.UUID.split('\\$')[0]

      return utils.find('chklstTemplate$' + classCode, [:])