docs/docs/cn/flow-engine/flow-context.md
NocoBase 流引擎的上下文体系分为三层,分别对应不同的作用域,合理使用可实现服务、配置、数据的灵活共享与隔离,提升业务可维护性和可扩展性。
mode: 'runtime' | 'settings' 两种模式,分别对应运行态和配置态。所有的 FlowEngineContext(全局上下文)、FlowModelContext(模型上下文)、FlowRuntimeContext(流运行时上下文)等,都是 FlowContext 的子类或实例。
FlowEngineContext(全局上下文)
│
├── FlowModelContext(模型上下文)
│ ├── 子 FlowModelContext(子模型)
│ │ ├── FlowRuntimeContext(流运行时上下文)
│ │ └── FlowRuntimeContext(流运行时上下文)
│ └── FlowRuntimeContext(流运行时上下文)
│
├── FlowModelContext(模型上下文)
│ └── FlowRuntimeContext(流运行时上下文)
│
└── FlowModelContext(模型上下文)
├── 子 FlowModelContext(子模型)
│ └── FlowRuntimeContext(流运行时上下文)
└── FlowRuntimeContext(流运行时上下文)
FlowModelContext 通过代理(delegate)机制可访问 FlowEngineContext 的属性和方法,实现全局能力共享。FlowModelContext 通过代理(delegate)机制可访问父模型的上下文(同步关系),支持同名覆盖。FlowRuntimeContext 总是通过代理(delegate)机制访问其对应的 FlowModelContext,但不会向上回传。FlowRuntimeContext 支持两种模式,通过 mode 参数区分:
mode: 'runtime'(运行态):用于流实际执行阶段,属性和方法返回真实数据。例如:
console.log(runtimeCtx.steps.step1.result); // 42
mode: 'settings'(配置态):用于流设计和配置阶段,属性访问返回变量模板字符串,便于表达式和变量选择。例如:
console.log(settingsCtx.steps.step1.result); // '{{ ctx.steps.step1.result }}'
这种双模式设计,既保证了运行时的数据可用性,也方便了配置时的变量引用和表达式生成,提升了流引擎的灵活性和易用性。
在某些场景下(例如 JS*Model 的 RunJS 代码编辑、AI coding),需要让“调用方”在不执行代码的前提下了解:
ctx 下有哪些静态能力(API 文档、参数、示例、文档链接等)await ctx.getApiInfos(options?)(静态 API 信息)await ctx.getVarInfos(options?)(变量结构信息)defineProperty(...).meta(含 meta factory)构建变量结构path 裁剪与 maxDepth 深度控制常用参数:
maxDepth:最大展开层级(默认 3)path: string | string[]:剪裁,只输出指定路径子树await ctx.getEnvInfos()(运行时环境快照)节点结构(简化):
type EnvNode = {
description?: string;
getVar?: string; // 可直接用于 await ctx.getVar(getVar),以 "ctx." 开头
value?: any; // 已解析/可序列化的静态值
properties?: Record<string, EnvNode>;
};