Запуск расчетов и отображение их результатов

Расчеты можно запускать:

Чтобы запустить расчеты по схеме и отобразить их результаты в интерфейсе системы, необходимо выполнить следующие действия:

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

    Если схема автоматизации выключена в разделе Экспертиза, при запуске связанного с ней плейбука любым способом расчеты по ней производиться не будут.
  2. Настроить метод запуска плейбука расчетов.

Создание плейбука для запуска расчетов

Плейбук для запуска расчетов по схеме должен использовать SDK calculate.

Пример плейбука для запуска расчета
id: calculation_sdk_test_exec
name: Вызов exec через SDK расчётов
version: 1.0.0
author: John Doe <johndoe@example.com>
tags: [audit, calculations]
type: playbook
body:
  input:
    properties: {}
  modules:
    - id: module_0
      body:
        type: rawscript
        input: {}
        source: !bun |
          import * as sdk from '@playbooks/sdk';
          export async function main() {
            // Получение ID текущего объекта из контекста.
            const objectId = await JSON.parse(get_context()).objectId;

            // Формирование объекта с аргументами расчета.
            const command = {
              calculationSchemaId: "calculate_test",
              calculationId: "test",
              object: {
                domainId: "evo.entity.category.standards",
                entityId: "Requirement",
                id: objectId
              },
              cacheFirst: false
            }

            // Выполнение расчета и получение его результатов.
            const result = await sdk.calculation.exec(command);
            console.log('result', result);
            return result;
          }

Настройка метода запуска расчетов

Запуск расчетов при нажатии кнопки

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

  1. создать действие типа playbook, в котором указать идентификатор ранее созданного плейбука;

  2. создать кнопку (виджет типа button) и связать ее с действием;

  3. добавить кнопку в представление (например, таблицу или карточку) сущности, для которой производится расчет.

Пример описания кнопки для запуска расчетов
actions:
  - id: actions.countComplianceIndex
    name: Вычислить индекс соответствия
    type: playbook
    entity: Audit
    playbook: count_compliance_index

views:
  - id: auditView
    type: entity
    entity: Audit

    widgets:
      - id: countComplianceIndexButton
        type: action
        action: actions.countComplianceIndex
        control:
          type: regular_button
          label: "Вычислить индекс соответствия"

    groups:
      - id: infoAuditBlock
        description: Информация об аудите
        type: block
        layout:
          direction: column
          expandable: false
        components:
          - widget: countComplianceIndexButton

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

  1. Действие actions.countComplianceIndex связано с плейбуком count_compliance_index, который запускает схему расчета индекса соответствия для аудита.

  2. Кнопка countComplianceIndexButton запускает действие actions.countComplianceIndex.

  3. Представление карточки аудита infoAuditBlock содержит кнопку countComplianceIndexButton.

Запуск расчетов с помощью триггера

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

Запуск расчетов при изменении связанного объекта

Если в конфигурации расчета установить для свойства auto_recalculation значение true, при изменении свойств или связей объекта, связанного с расчетом, расчет будет выполнен заново.

Для этого метода запуска создавать плейбук не требуется.

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

  • При перезапуске дочернего расчета родительские расчеты, использующие его результаты, будут выполнены заново.

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

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

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

Отображение результатов расчетов в интерфейсе

Чтобы отобразить результат расчетов в интерфейсе системы, нужно создать атрибут сущности с типом, соответствующим типу результата расчета, и указать идентификатор этого атрибута в поле target расчета.

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

Атрибут, содержащий результат расчета, можно вывести в интерфейс:

Пример вывода результатов расчетов в карточку аудита
entities:
  - id: Audit
    name: Аудит
    attributes:
      - id: name
        name: Наименование аудита
        dataType: String
      - id: assessmentIndexCalculation
        name: Результат расчета индекса соответствия
        dataType: Float
      - id: isKii
        name: Аудит объекта КИИ
        dataType: Bool

...

views:
  # Табличное представление списка аудитов.
  - id: audits
    label: Аудиты
    type: list
    source:
      entity: Audit
      type: operational
    table:
      columns:
        # Вывод атрибута-строки.
        - attribute: name
          id: name
          label: Наименование
          layout:
            width:
              default: 250
              max: 400
              min: 40
        # Вывод результатов расчетов в столбцы таблицы аналогичен выводу других атрибутов.
        - attribute: assessmentIndexCalculation
          id: assessmentIndexCalculation
          label: Результат расчета индекса соответствия
          layout:
            width:
              default: 250
              max: 400
              min: 40
        - attribute: isKii
          id: isKii
          label: Аудит объекта КИИ
          layout:
            width:
              default: 100
              max: 200
              min: 40

  # Карточка аудита.
  - id: auditView
    type: entity
    entity: Audit
    widgets:
      # Список виджетов карточки аудита.
      - id: editors.name
        type: attribute
        attribute: name
        description: Наименование аудита
      - id: editors.assessmentIndexCalculation
        type: attribute
        attribute: assessmentIndexCalculation
        description: Результат расчета индекса соответствия
      - id: editors.isKii
        type: attribute
        attribute: isKii
        description: Аудит объекта КИИ

    groups:
      - id: blocks.info.audit
        description: Информация об аудите
        type: block
        layout:
          direction: column
          expandable: false
        components:
          - widget: editors.name
          - widget: editors.assessmentIndexCalculation
          - widget: editors.isKii

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

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