Настройка политик в схеме автоматизации

Данный раздел описывает использование политик в схеме автоматизации на примере практической задачи. Описана настройка скрипта автоматизации, его вызов с помощью политики в схеме автоматизации и запуск по расписанию посредством экземпляра политики.

Содержание раздела:

Пример решаемой задачи

С помощью политики можно автоматически создавать новые сущности в системе согласно заранее заданным условиям и расписанию.

Предварительные условия

В схему домена Аудиты и контроль с идентификатором evo.compliance.audit, которая использовалась в практикуме по настройке схем расчетов, добавлена сущность Мероприятие по устранению замечаний с идентификатором Activity. В системе ежедневно создается и завершается большое количество аудитов.

Задача

Требуется автоматически создавать мероприятия по устранению замечаний для завершенных аудитов, имеющих замечания.

Метод решения задачи

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

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

  • Условие: статус аудита — Завершен и количество замечаний по аудиту больше 0.

  • Действие: запуск скрипта, создающего мероприятия по устранению замечаний.

  • Расписание запусков: ежедневно в 00:00.

Этапы решения задачи:

Создание скрипта автоматизации

При срабатывании политики в схеме автоматизации выполняются действия: запуск скриптов, плейбуков или расчетов.

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

Скрипт создания мероприятия по устранению замечания для заданного аудита может выглядеть следующим образом:

id: create_activity_for_audit
name: Скрипт создания мероприятия по устранению замечаний
type: script
version: 1.0.0
tags: [audit, automation]
status: stable
author: John Doe <johndoe@example.com>
source: !deno |
  import * as sdk from '@playbooks/sdk'
  import { type Context } from '@expertise/policy_batch_action_handler_executor'

  export async function main() {
    // Получение контекста выполнения, содержащего в том числе название аудита, для которого необходимо создать мероприятие.
    const context: Context = JSON.parse(get_context())

    // Извлечение названия аудита из контекста выполнения.
    const audit_name = JSON.parse(context.objects[0].values).name

    // Составление названия мероприятия из префикса, заданного через переменную экземпляра политики, и названия аудита.
    const activity_name = context.policy.context.audit_prefix + " " + audit_name

    // Проверка, что мероприятие для данного аудита ранее не создавалось.
    // 1. Составление условия: "название мероприятия равно названию текущего мероприятия".
    const condition = {
      name: { $eq: activity_name }
    }

    // 2. Преобразование условия в формат, требуемый методом sdk.cms.list().
    const filter = { conditions: JSON.stringify(condition) }

    // 3. Выполнение поиска мероприятий, у которых название совпадает с текущим.
    const existing_activities = await sdk.cms.list({
      domainId: "evo.compliance.audit",
      entityId: "Activity",
      filter: filter
    })

    // 4. Если мероприятие с таким именем уже существует, выполнение скрипта останавливается, чтобы не создавать дубликаты.
    if (existing_activities.length) {
        console.log("Мероприятие для текущего аудита уже создано, выполнение скрипта завершается.")
        return
    }

    // Создание объекта типа Map для передачи на вход методу sdk.cms.create().
    const map_for_create = new Map<string, string>([
        ["name", activity_name]
    ])

    // Создание нового мероприятия с помощью метода sdk.cms.create().
    try {
      const new_activity = await sdk.cms.create({
        domainId: "evo.compliance.audit",
        entityId: "Activity",
        values: map_for_create
      })

      // Отладочный вывод свойств созданного мероприятия.
      console.log("Новое мероприятие:")
      console.log(new_activity)
    } catch (e) {
      // Вывод ошибки в лог запуска, если произошла ошибка при создании мероприятия.
      console.log("Ошибка, мероприятие не создано!")
      console.log(e)
    }
  }

Интерпретация примера

  • При запуске скрипта необходимо получить контекст его выполнения, в том числе информацию об объекте (аудите), который обрабатывается в рамках запуска политики, и контекстные переменные. Настройка контекстных переменных описана в разделе Создание экземпляра политики.

  • Название создаваемого мероприятия составляется из значения контекстной переменной audit_prefix и названия аудита, который обрабатывается в рамках запуска политики.

    Например, переменная audit_prefix имеет значение Устранить замечания по аудиту:, а название аудита — Аудит системы от 30.10.2025. Тогда созданное мероприятие получит название: Устранить замечания по аудиту: Аудит системы от 30.10.2025.

  • Чтобы не создавать мероприятия повторно, если они уже существуют в системе, предусмотрена следующая проверка:

    1. С помощью метода API list запрашивается список мероприятий, имеющих то же название, что и создаваемое мероприятие.

    2. Если такие мероприятия уже существуют (длина полученного списка больше 0), выполнение скрипта завершается без создания мероприятия.

  • Если мероприятие не было ранее создано в системе, создается новое мероприятие с помощью метода API create.

  • В лог запуска скрипта записываются либо свойства созданного мероприятия, либо сообщение об ошибке, если создать мероприятие не удалось.

Добавление политики в схему автоматизации

Добавьте в схему автоматизации evo.compliance.audit.automation политику, вызывающую скрипт create_activity_for_audit для завершенных аудитов с количеством замечаний больше нуля. Политика может выглядеть следующим образом:

policies:
  - id: create_activity_for_finished_audit_with_issues
    name: Создать мероприятие по устранению замечаний, если по завершенному аудиту есть замечания
    entity: evo.compliance.audit/Audit
    conditions:
      - type: expression
        expression: 'equalText({field:status}, "Завершен")'
      - type: expression
        expression: '{field:numOfIssues} > 0'

    actions:
      - type: playbook
        playbook: create_activity_for_audit

Интерпретация примера

Политика create_activity_for_finished_audit_with_issues содержит:

  1. Два условия, которые должны выполниться одновременно (логическое И):

    1. Статус аудита — Завершен. Используется функция библиотеки math.js equalText.

    2. Количество замечаний аудита больше нуля.

  2. Действие — запуск скрипта create_activity_for_audit.

Создание экземпляра политики

Настройте запуск созданной политики раз в сутки. Для этого:

  1. Перейдите в раздел управления экземплярами политик.

  2. Создайте экземпляр политики, указав для него следующие свойства:

    1. Идентификатор схемы автоматизации — evo.compliance.audit.automation.

    2. Идентификатор политики — create_activity_for_finished_audit_with_issues.

    3. Необходимый идентификатор организации.

    4. Тип запуска — по расписанию.

    5. Периодичность запуска — cron-выражение 0 0 * * * (каждый день в 00:00).

      Чтобы составить cron-выражение, можно воспользоваться генератором, например, nettools.club/ru/crontools.
    6. Контекстная переменная audit_prefix со значением Устранить замечания по аудиту:.

    7. Статус — включена.

Теперь политика будет запускаться каждые сутки в 00:00 и создавать мероприятия по устранению замечаний для закрытых аудитов в выбранной организации.

Примеры иных задач, решаемых с помощью политик в схемах автоматизации

В данном разделе представлен базовый пример использования политик в схемах автоматизации. С помощью политик можно решать задачи таких классов, как:

  • Автоматическое изменение свойств объектов.

  • Автоматическое создание связей между объектами.

  • Запуск расчетов для объектов.

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

Была ли полезна эта страница?

Обратная связь