Este documento foi traduzido por IA. Para informações precisas, consulte a versão em inglês.
Quando um plugin adiciona ou estende as capacidades do RunJS, recomenda-se registrar o "mapeamento de contexto / documentação do ctx / código de exemplo" por meio dos pontos de extensão oficiais. Isso garante que:
ctx.xxx.yyy.ctx estruturadas e exemplos.Este capítulo apresenta dois pontos de extensão:
registerRunJSContextContribution(...)registerRunJSSnippet(...)registerRunJSContextContributionUsado para registrar "contribuições" (contributions) do RunJS. Usos típicos incluem:
RunJSContextRegistry (modelClass -> RunJSContext, incluindo scenes).RunJSDocMeta (descrições/exemplos/modelos de preenchimento para a API ctx) para FlowRunJSContext ou um RunJSContext personalizado.setupRunJSContexts().setupRunJSContexts() já tiver sido concluído, registros tardios serão executados imediatamente (sem necessidade de reiniciar o setup).RunJSVersion.registerRunJSSnippetUsado para registrar trechos de código de exemplo (snippets) para o RunJS, utilizados para:
Sugere-se usar: plugin/<nomeDoPlugin>/<topico>, por exemplo:
plugin/plugin-my/fooplugin/plugin-my/api-request-exampleEvite conflitos com os namespaces global/* ou scene/* do núcleo (core).
ref existentes não são sobrescritas (retorna false sem lançar erro).{ override: true }.RunJSDocMeta: Descrições/modelos de preenchimento (curtos, estruturados).scenes corretamente para melhorar a relevância dos preenchimentos e exemplos.hidden(ctx)Certas APIs do ctx são altamente específicas ao contexto (por exemplo, ctx.popup só está disponível quando um pop-up ou gaveta está aberto). Se você deseja ocultar essas APIs indisponíveis durante o preenchimento, pode definir hidden(ctx) para a entrada correspondente no RunJSDocMeta:
true: Oculta o nó atual e sua subárvore.string[]: Oculta subcaminhos específicos sob o nó atual (suporta o retorno de múltiplos caminhos; os caminhos são relativos; as subárvores são ocultadas com base na correspondência de prefixo).hidden(ctx) suporta async: Você pode usar await ctx.getVar('ctx.xxx') para determinar a visibilidade (a critério do usuário). Recomenda-se manter essa lógica rápida e sem efeitos colaterais (evite requisições de rede, por exemplo).
Exemplo: Mostrar preenchimentos de ctx.popup.* apenas quando popup.uid existir.
Exemplo: O pop-up está disponível, mas alguns subcaminhos estão ocultos (apenas caminhos relativos; por exemplo, ocultando record e parent.record).
Nota: O CodeEditor sempre habilita a filtragem de preenchimento com base no ctx real (fail-open, não lança erros).
info/meta em Tempo de Execução e API de Informações de Contexto (para Preenchimentos e LLMs)Além de manter a documentação do ctx estaticamente via FlowRunJSContext.define(), você também pode injetar info/meta em tempo de execução via FlowContext.defineProperty/defineMethod. Você pode então gerar informações de contexto serializáveis para o CodeEditor ou LLMs usando as seguintes APIs:
await ctx.getApiInfos(options?): Informações estáticas da API.await ctx.getVarInfos(options?): Informações da estrutura de variáveis (obtidas de meta, suporta expansão de path/maxDepth).await ctx.getEnvInfos(): Instantâneo (snapshot) do ambiente de execução.defineMethod(name, fn, info?)O info suporta (todos opcionais):
description / detail / examplesref: string | { url: string; title?: string }params / returns (estilo JSDoc)Nota:
getApiInfos()gera documentação estática da API e não incluirá campos comodeprecated,disabledoudisabledReason.
Exemplo: Fornecendo links de documentação para ctx.refreshTargets().
defineProperty(key, { meta?, info? })meta: Usado para a interface do seletor de variáveis (getPropertyMetaTree / FlowContextSelector). Determina a visibilidade, estrutura em árvore, desativação, etc. (suporta funções/async).
title / type / properties / sort / hidden / disabled / disabledReason / buildVariablesParamsinfo: Usado para documentação estática da API (getApiInfos) e descrições para LLMs. Não afeta a interface do seletor de variáveis (suporta funções/async).
title / type / interface / description / examples / ref / params / returnsQuando apenas meta é fornecido (sem info):
getApiInfos() não retornará esta chave (pois as docs estáticas da API não são inferidas a partir de meta).getVarInfos() construirá a estrutura da variável com base no meta (usado para seletores de variáveis/árvores de variáveis dinâmicas).Usada para gerar "informações de capacidade de contexto disponíveis".
Parâmetros comuns:
getApiInfos({ version }): Versão da documentação do RunJS (padrão é v1).getVarInfos({ path, maxDepth }): Recorte e profundidade máxima de expansão (padrão é 3).Nota: Os resultados retornados pelas APIs acima não contêm funções e são adequados para serialização direta para LLMs.
await ctx.getVar(path)Quando você tem uma "string de caminho de variável" (por exemplo, vinda de uma configuração ou entrada do usuário) e deseja recuperar o valor em tempo de execução dessa variável diretamente, use getVar:
const v = await ctx.getVar('ctx.record.roles.id')path é um caminho de expressão começando com ctx. (ex: ctx.record.id / ctx.record.roles[0].id).Adicionalmente: Métodos ou propriedades que começam com um sublinhado _ são tratados como membros privados e não aparecerão na saída de getApiInfos() ou getVarInfos().