logologo
Початок
Посібник
Розробка
Плагіни
API
Головна
English
简体中文
日本語
한국어
Español
Português
Deutsch
Français
Русский
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 проти React.Component
Точки розширення плагіна RunJS

Визначення

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

Цей документ було перекладено за допомогою ШІ. Для точної інформації зверніться до англійської версії.

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

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

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

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


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

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

#🧭 Стан виконання та стан налаштування (mode)

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

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

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

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

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


#🤖 Інформація контексту для інструментів/великих моделей

У певних сценаріях (наприклад, редагування коду RunJS у JS*Model, AI coding) необхідно дозволити «стороні, що викликає» зрозуміти наступне без виконання коду:

  • Які статичні можливості є в поточному ctx (документація API, параметри, приклади, посилання на документацію тощо)
  • Які доступні змінні є в поточному інтерфейсі/стані виконання (наприклад, динамічні структури, такі як «поточний запис», «запис поточного спливаючого вікна» тощо)
  • Малооб'ємний знімок поточного середовища виконання (для prompt)

#1) await ctx.getApiInfos(options?) (Статична інформація API)

#2) await ctx.getVarInfos(options?) (Інформація про структуру змінних)

  • Побудовано на основі defineProperty(...).meta (включаючи meta factory) для створення структури змінних.
  • Підтримує обрізання path та контроль глибини maxDepth.
  • Розгортається вниз лише за потреби.

Популярні параметри:

  • maxDepth: Максимальний рівень розгортання (за замовчуванням 3).
  • path: string | string[]: Обрізання, виводить лише піддерево вказаного шляху.

#3) await ctx.getEnvInfos() (Знімок середовища виконання)

Структура вузла (спрощена):

type EnvNode = {
  description?: string;
  getVar?: string; // Може використовуватися безпосередньо для await ctx.getVar(getVar), починається з "ctx."
  value?: any; // Розпізнане/серіалізоване статичне значення
  properties?: Record<string, EnvNode>;
};