Este documento ha sido traducido por IA. Para información precisa, consulte la versión en inglés.
Cuando un plugin añade o extiende las capacidades de RunJS, se recomienda registrar el "mapeo de contexto / documentación de ctx / código de ejemplo" a través de los puntos de extensión oficiales. Esto garantiza que:
ctx.xxx.yyy.ctx y ejemplos.Este capítulo presenta dos puntos de extensión:
registerRunJSContextContribution(...)registerRunJSSnippet(...)registerRunJSContextContributionSe utiliza para registrar "contribuciones" (contributions) de RunJS. Sus usos típicos incluyen:
RunJSContextRegistry (modelClass -> RunJSContext, incluyendo scenes).RunJSDocMeta (descripciones/ejemplos/plantillas de completado para la API de ctx) para FlowRunJSContext o un RunJSContext personalizado.setupRunJSContexts().setupRunJSContexts() ya se ha completado, las registros tardíos se ejecutarán inmediatamente (sin necesidad de reiniciar el setup).RunJSVersion.registerRunJSSnippetSe utiliza para registrar fragmentos de código de ejemplo (snippets) para RunJS, que sirven para:
refSe sugiere utilizar: plugin/<nombreDelPlugin>/<tema>, por ejemplo:
plugin/plugin-my/fooplugin/plugin-my/api-request-exampleEvite conflictos con los espacios de nombres global/* o scene/* del núcleo (core).
ref existentes (devuelve false, pero no lanza un error).{ override: true }.RunJSDocMeta: Descripciones/plantillas de completado (cortas, estructuradas).scenes para mejorar la relevancia del autocompletado y los ejemplos.hidden(ctx)Ciertas API de ctx dependen fuertemente del escenario (por ejemplo, ctx.popup solo está disponible cuando hay una ventana emergente o un cajón abierto). Cuando desee ocultar estas API no disponibles durante el autocompletado, puede definir hidden(ctx) para la entrada correspondiente en RunJSDocMeta:
true: Oculta el nodo actual y su subárbol.string[]: Oculta subrutas específicas bajo el nodo actual (permite devolver varias rutas; las rutas son relativas; oculta el subárbol por coincidencia de prefijo).hidden(ctx) admite async: usted puede usar await ctx.getVar('ctx.xxx') para decidir (a discreción del desarrollador). Se recomienda que sea rápido y sin efectos secundarios (no realice peticiones de red).
Ejemplo: Mostrar el autocompletado de ctx.popup.* solo cuando exista popup.uid.
Ejemplo: La ventana emergente está disponible pero se ocultan algunas subrutas (solo rutas relativas; por ejemplo, ocultar record y parent.record).
Nota: El CodeEditor siempre habilita el filtrado de autocompletado basado en el ctx real (fail-open, no lanza errores).
info/meta en tiempo de ejecución y API de información de contexto (para autocompletado y LLM)Además de mantener la documentación de ctx de forma estática mediante FlowRunJSContext.define(), usted también puede inyectar info/meta en tiempo de ejecución a través de FlowContext.defineProperty/defineMethod, y exportar información de contexto serializable para el CodeEditor o modelos de lenguaje (LLM) mediante las siguientes API:
await ctx.getApiInfos(options?): Información estática de la API.await ctx.getVarInfos(options?): Información de la estructura de variables (proviene de meta, admite expansión por ruta/profundidad máxima).await ctx.getEnvInfos(): Instantánea del entorno en tiempo de ejecución.defineMethod(name, fn, info?)info admite (todos opcionales):
description / detail / examplesref: string | { url: string; title?: string }params / returns (estilo JSDoc)Nota:
getApiInfos()devuelve documentación estática de la API y no incluirá campos comodeprecated,disabledodisabledReason.
Ejemplo: Proporcionar un enlace de documentación para ctx.refreshTargets()
defineProperty(key, { meta?, info? })meta: Se utiliza para la interfaz de usuario del selector de variables (getPropertyMetaTree / FlowContextSelector), determinando si se muestra, la estructura del árbol, si está deshabilitado, etc. (admite funciones/async).
title / type / properties / sort / hidden / disabled / disabledReason / buildVariablesParamsinfo: Se utiliza para la documentación estática de la API (getApiInfos) y descripciones para el LLM; no afecta a la interfaz del selector de variables (admite funciones/async).
title / type / interface / description / examples / ref / params / returnsCuando solo se proporciona meta (y no info):
getApiInfos() no devolverá esa clave (ya que la documentación estática no se infiere de meta).getVarInfos() construirá la estructura de variables basada en meta (utilizado para selectores de variables o árboles de variables dinámicas).Se utiliza para exportar la "información de capacidades de contexto disponibles".
Parámetros comunes:
getApiInfos({ version }): Versión de la documentación de RunJS (por defecto v1).getVarInfos({ path, maxDepth }): Recorte y nivel máximo de expansión (por defecto 3).Nota: Los resultados devueltos por las API anteriores no contienen funciones, por lo que son adecuados para ser serializados y enviados directamente a un LLM.
await ctx.getVar(path)Cuando usted tiene una "cadena de ruta de variable" (por ejemplo, proveniente de una configuración o entrada del usuario) y desea obtener directamente el valor en tiempo de ejecución de esa variable, puede usar getVar:
const v = await ctx.getVar('ctx.record.roles.id')path es una ruta de expresión que comienza con ctx. (por ejemplo, ctx.record.id / ctx.record.roles[0].id).Adicionalmente: Los métodos o propiedades que comienzan con un guion bajo _ se consideran miembros privados y no aparecerán en los resultados de getApiInfos() o getVarInfos().