logologo
Початок
Посібник
Розробка
Плагіни
API
English
简体中文
日本語
한국어
Deutsch
Français
Español
Português
Русский
Italiano
Türkçe
Українська
Tiếng Việt
Bahasa Indonesia
ไทย
Polski
Nederlands
Čeština
العربية
עברית
हिन्दी
Svenska
Початок
Посібник
Розробка
Плагіни
API
logologo

Вступ

Що таке FlowEngine?
FlowEngine та плагіни
Швидкий старт
План навчання

Посібник

Реєстрація FlowModel
Створення FlowModel
Рендеринг FlowModel
Потік подій та конфігурація FlowModel
Збереження FlowModel
Життєвий цикл FlowModel
Система контексту FlowModel
Реактивний механізм: Observable
FlowModel vs React.Component

Визначення

ModelDefinition
FlowDefinition
EventDefinition
ActionDefinition
StepDefinition
Previous PageЖиттєвий цикл FlowModel
Next PageРеактивний механізм: Observable
Повідомлення про переклад ШІ

Ця документація була автоматично перекладена штучним інтелектом.

#Огляд системи контекстів

Система контекстів рушія робочих процесів NocoBase поділяється на три рівні, кожен з яких відповідає різній області видимості. Правильне використання дозволяє гнучко ділитися та ізолювати сервіси, конфігурації та дані, підвищуючи зручність підтримки та масштабованість бізнесу.

  • FlowEngineContext (глобальний контекст): Глобально унікальний, доступний для всіх моделей та робочих процесів, підходить для реєстрації глобальних сервісів, конфігурацій тощо.
  • FlowModelContext (контекст моделі): Використовується для спільного використання контексту всередині дерева моделей. Дочірні моделі автоматично делегують контекст батьківської моделі, підтримуючи перевизначення за однаковим ім'ям. Підходить для ізоляції логіки та даних на рівні моделі.
  • FlowRuntimeContext (контекст виконання робочого процесу): Створюється щоразу при виконанні робочого процесу і існує протягом усього циклу його виконання. Підходить для передачі даних, зберігання змінних та запису стану виконання всередині робочого процесу. Підтримує два режими: mode: 'runtime' | 'settings', що відповідають режиму виконання та режиму налаштування відповідно.

Усі FlowEngineContext (глобальний контекст), FlowModelContext (контекст моделі), FlowRuntimeContext (контекст виконання робочого процесу) тощо, є підкласами або екземплярами FlowContext.


#🗂️ Схема ієрархії

FlowEngineContext (глобальний контекст)
│
├── FlowModelContext (контекст моделі)
│     ├── Sub FlowModelContext (дочірня модель)
│     │     ├── FlowRuntimeContext (контекст виконання робочого процесу)
│     │     └── FlowRuntimeContext (контекст виконання робочого процесу)
│     └── FlowRuntimeContext (контекст виконання робочого процесу)
│
├── FlowModelContext (контекст моделі)
│     └── FlowRuntimeContext (контекст виконання робочого процесу)
│
└── FlowModelContext (контекст моделі)
      ├── Sub FlowModelContext (дочірня модель)
      │     └── FlowRuntimeContext (контекст виконання робочого процесу)
      └── FlowRuntimeContext (контекст виконання робочого процесу)
  • FlowModelContext може отримувати доступ до властивостей та методів FlowEngineContext через механізм делегування, забезпечуючи спільне використання глобальних можливостей.
  • Контекст моделі (FlowModelContext) дочірньої моделі може отримувати доступ до контексту батьківської моделі (синхронний зв'язок) через механізм делегування, підтримуючи перевизначення за однаковим ім'ям.
  • Асинхронні батьківські та дочірні моделі не встановлюють зв'язок делегування, щоб уникнути забруднення стану.
  • FlowRuntimeContext завжди отримує доступ до відповідного FlowModelContext через механізм делегування, але не передає зміни вгору.

#🧭 Режим виконання та режим налаштування (mode)

FlowRuntimeContext підтримує два режими, які розрізняються за допомогою параметра mode:

  • mode: 'runtime' (режим виконання): Використовується на етапі фактичного виконання робочого процесу. Властивості та методи повертають реальні дані. Наприклад:

    console.log(runtimeCtx.steps.step1.result); // 42
  • mode: 'settings' (режим налаштування): Використовується на етапі проєктування та налаштування робочого процесу. Доступ до властивостей повертає рядки-шаблони змінних, що полегшує вибір виразів та змінних. Наприклад:

    console.log(settingsCtx.steps.step1.result); // '{{ ctx.steps.step1.result }}'

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