Обзор системы контекстов
Система контекстов движка рабочих процессов NocoBase разделена на три уровня, соответствующих разным областям видимости. Рациональное использование позволяет реализовать гибкое совместное использование и изоляцию сервисов, конфигураций и данных, повышая удобство сопровождения и расширяемость бизнеса.
- FlowEngineContext (глобальный контекст): Глобально уникален, доступен для всех моделей и рабочих процессов, подходит для регистрации глобальных сервисов, конфигураций и т. д.
- FlowModelContext (контекст модели): Используется для совместного использования контекста внутри дерева моделей, дочерние модели автоматически делегируют контекст родительской модели, поддерживает переопределение имен, подходит для изоляции логики и данных на уровне модели.
- FlowRuntimeContext (контекст выполнения рабочего процесса): Создается при каждом выполнении рабочего процесса, проходит через весь цикл выполнения, подходит для передачи данных, хранения переменных, записи состояния выполнения и т. д. Поддерживает два режима
mode: 'runtime' | 'settings', соответствующих состоянию выполнения и состоянию настройки.
Все FlowEngineContext (глобальный контекст), FlowModelContext (контекст модели), FlowRuntimeContext (контекст выполнения рабочего процесса) и т. д. являются подклассами или экземплярами FlowContext.
🗂️ Схема иерархии
FlowModelContextчерез механизм делегирования (delegate) может обращаться к свойствам и методамFlowEngineContext, реализуя совместное использование глобальных возможностей.FlowModelContextдочерней модели через механизм делегирования (delegate) может обращаться к контексту родительской модели (синхронная связь), поддерживает переопределение имен.- Асинхронные родительские и дочерние модели не устанавливают отношения делегирования (delegate), чтобы избежать загрязнения состояния.
FlowRuntimeContextвсегда обращается к соответствующемуFlowModelContextчерез механизм делегирования (delegate), но не передает данные обратно вверх.
🧭 Состояние выполнения и состояние настройки (mode)
FlowRuntimeContext поддерживает два режима, которые р азличаются параметром mode:
-
mode: 'runtime'(состояние выполнения): Используется на этапе фактического выполнения рабочего процесса, свойства и методы возвращают реальные данные. Например: -
mode: 'settings'(состояние настройки): Используется на этапе проектирования и настройки рабочего процесса, доступ к свойствам возвращает строку шаблона переменной, что удобно для выбора выражений и переменных. Например:
Такое двухрежимное проектирование не только гарантирует доступность данных во время выполнения, но и облегчает ссылки на переменные и генерацию выражений при настройке, повышая гибкость и простоту использования движка рабочих процессов.
🤖 Контекстная информация для инструментов / больших языковых моделей
В определенных сценариях (например, редактирование кода RunJS в JS*Model, AI-кодинг) необходимо, чтобы «вызывающая сторона» понимала следующее без выполнения кода:
- Какие статические возможности есть в текущем
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() (снимок среды выполнения)
Структура узла (упрощенная):

