Este documento foi traduzido por IA. Para informações precisas, consulte a versão em inglês.
Visão geral do sistema de contexto
O sistema de contexto do mecanismo de fluxo (FlowEngine) do NocoBase é dividido em três camadas, correspondendo a diferentes escopos. O uso adequado permite o compartilhamento e isolamento flexível de serviços, configurações e dados, melhorando a manutenibilidade e a escalabilidade do negócio.
- FlowEngineContext (Contexto Global): Globalmente único, acessível por todos os modelos e fluxos, adequado para registrar serviços globais, configurações, etc.
- FlowModelContext (Contexto do Modelo): Usado para compartilhar contexto dentro da árvore de modelos; submodelos delegam automaticamente ao contexto do modelo pai, suportando sobrescrita de mesmo nome; adequado para isolamento de lógica e dados em nível de modelo.
- FlowRuntimeContext (Contexto de Execução do Fluxo): Criado a cada execução do fluxo, percorre todo o ciclo de execução do fluxo, adequado para transferência de dados, armazenamento de variáveis e registro de estado de execução no fluxo. Suporta dois modos:
mode: 'runtime' | 'settings', correspondendo respectivamente ao estado de execução e ao estado de configuração.
Todos os FlowEngineContext (Contexto Global), FlowModelContext (Contexto do Modelo), FlowRuntimeContext (Contexto de Execução do Fluxo), etc., são subclasses ou instâncias de FlowContext.
🗂️ Diagrama de estrutura hierárquica
FlowModelContextacessa as propriedades e métodos doFlowEngineContextatravés de um mecanismo de delegação (delegate), realizando o compartilhamento de capacidades globais.- O
FlowModelContextde submodelos acessa o contexto do modelo pai através de um mecanismo de delegação (relação síncrona), suportando sobrescrita de mesmo nome. - Modelos pai-filho assíncronos não estabelecem relação de delegação para evitar poluição de estado.
FlowRuntimeContextsempre acessa seuFlowModelContextcorrespondente através de um mecanismo de delegação, mas não propaga de volta para cima.
🧭 Estado de execução e estado de configuração (mode)
O FlowRuntimeContext suporta dois modos, diferenciados pelo parâmetro mode:
-
mode: 'runtime'(Estado de execução): Usado na fase de execução real do fluxo, onde propriedades e métodos retornam dados reais. Exemplo: -
mode: 'settings'(Estado de configuração): Usado na fase de design e configuração do fluxo, onde o acesso a propriedades retorna strings de template de variáveis, facilitando expressões e seleção de variáveis. Exemplo:
Este design de modo duplo garante a disponibilidade de dados em tempo de execução e facilita a referência de variáveis e a geração de expressões na configuração, aumentando a flexibilidade e facilidade de uso do mecanismo de fluxo.
🤖 Informações de contexto para ferramentas/LLMs
Em certos cenários (como edição de código RunJS no JS*Model, AI coding), é necessário permitir que o "chamador" entenda, sem executar o código:
- Quais capacidades estáticas existem no
ctxatual (documentação de API, parâmetros, exemplos, links de documentação, etc.) - Quais variáveis opcionais existem na interface/estado de execução atual (como "registro atual", "registro do pop-up atual", etc., estruturas dinâmicas)
- Snapshot de pequeno volume do ambiente de execução atual (usado para prompt)
1) await ctx.getApiInfos(options?) (Informações estáticas de API)
2) await ctx.getVarInfos(options?) (Informações de estrutura de variáveis)
- Construído com base em
defineProperty(...).meta(incluindo meta factory) - Suporta recorte de
pathe controle de profundidademaxDepth - Expande para baixo apenas quando necessário
Parâmetros comuns:
maxDepth: Nível máximo de expansão (padrão 3)path: string | string[]: Recorte, gera apenas a subárvore do caminho especificado
3) await ctx.getEnvInfos() (Snapshot do ambiente de execução)
Estrutura do nó (simplificada):

