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

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

Также расчеты запускаются автоматически при запуске политики, если являются ее условиями или действиями.

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

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

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

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

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

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

Пример плейбука для запуска расчета
id: calculation_sdk_test_exec
name: Вызов exec через SDK расчётов
version: 1.0.0
author: Ivan Ivanov <ivanov@example.ru>
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. создать кнопку (виджет типа action) и связать ее с действием;

  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

Особенности повторного выполнения расчетов при изменении схемы автоматизации

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

  • Все расчеты в текущей схеме автоматизации.

  • Все расчеты, которые используют расчеты из текущей схемы в своих формулах.

  • Все расчеты в схемах, которые расширяют текущую схему.

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

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

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

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