logologo
Empezar
Manual
Desarrollo
Plugins
API
Inicio
English
简体中文
日本語
한국어
Español
Português
Deutsch
Français
Русский
Empezar
Manual
Desarrollo
Plugins
API
Inicio
logologo
Descripción general de RunJS
Importación de módulos
Renderizado en contenedor

Variables globales

window
document
navigator

ctx

ctx.blockModel
ctx.collection
ctx.collectionField
ctx.dataSource
ctx.dataSourceManager
ctx.element
ctx.exit()
ctx.exitAll()
ctx.filterManager
ctx.form
ctx.getModel()
ctx.getValue()
ctx.getVar()
ctx.i18n
ctx.importAsync()
ctx.initResource()
ctx.libs
ctx.location
ctx.logger
ctx.makeResource()
ctx.message
ctx.modal
ctx.model
ctx.notification
ctx.off()
ctx.on()
ctx.openView()
ctx.render()
ctx.request()
ctx.requireAsync()
ctx.resource
ctx.route
ctx.router
ctx.setValue()
ctx.sql
ctx.t()
ctx.view
Previous Pagectx.getValue()
Next Pagectx.i18n
Aviso de traducción IA

Este documento ha sido traducido por IA. Para información precisa, consulte la versión en inglés.

#ctx.getVar()

Lee de forma asíncrona el valor de una variable desde el contexto de ejecución actual. La resolución de variables es consistente con el análisis de {{ctx.xxx}} en SQL y plantillas, proviniendo generalmente del usuario actual, el registro actual, parámetros de vista, contexto de ventanas emergentes, etc.

#Escenarios de uso

EscenarioDescripción
JSBlock / JSFieldObtener información sobre el registro actual, usuario, recursos, etc., para renderizado o lógica.
Reglas de enlace / Flujo de trabajoLeer ctx.record, ctx.formValues, etc., para evaluar condiciones lógicas.
Fórmulas / PlantillasUtiliza las mismas reglas de resolución de variables que {{ctx.xxx}}.

#Definición de tipos

getVar(path: string): Promise<any>;
ParámetroTipoDescripción
pathstringRuta de la variable; debe comenzar con ctx.. Admite notación de puntos e índices de arreglos.

Valor de retorno: Promise<any>. Debe usar await para obtener el valor resuelto; devuelve undefined si la variable no existe.

Si se pasa una ruta que no comienza con ctx., se lanzará un error: ctx.getVar(path) expects an expression starting with "ctx.", got: "...".

#Rutas de variables comunes

RutaDescripción
ctx.recordRegistro actual (disponible cuando un bloque de formulario/detalles está vinculado a un registro)
ctx.record.idClave primaria del registro actual
ctx.formValuesValores actuales del formulario (común en reglas de enlace y flujos de trabajo; en escenarios de formulario, se prefiere ctx.form.getFieldsValue() para lectura en tiempo real)
ctx.userUsuario actual con sesión iniciada
ctx.user.idID del usuario actual
ctx.user.nicknameApodo del usuario actual
ctx.user.roles.nameNombres de los roles del usuario actual (arreglo)
ctx.popup.recordRegistro dentro de una ventana emergente
ctx.popup.record.idClave primaria del registro dentro de una ventana emergente
ctx.urlSearchParamsParámetros de consulta de la URL (analizados desde ?key=value)
ctx.tokenToken de API actual
ctx.roleRol actual

#ctx.getVarInfos()

Obtiene la información estructural (tipo, título, subpropiedades, etc.) de las variables resolubles en el contexto actual, facilitando la exploración de las rutas disponibles. El valor devuelto es una descripción estática basada en meta y no incluye los valores reales de ejecución.

#Definición de tipos

getVarInfos(options?: { path?: string | string[]; maxDepth?: number }): Promise<Record<string, any>>;

En el valor de retorno, cada clave es una ruta de variable y el valor es la información estructural de esa ruta (incluyendo type, title, properties, etc.).

#Parámetros

ParámetroTipoDescripción
pathstring | string[]Ruta de recorte; solo recopila la estructura de variables bajo esta ruta. Admite 'record', 'record.id', 'ctx.record', '{{ ctx.record }}'; un arreglo representa la combinación de múltiples rutas.
maxDepthnumberNivel máximo de expansión, por defecto 3. Cuando no se proporciona path, las propiedades de nivel superior tienen depth=1. Cuando se proporciona path, el nodo correspondiente a la ruta tiene depth=1.

#Ejemplo

// Obtener la estructura de variables bajo record (expandido hasta 3 niveles)
const vars = await ctx.getVarInfos({ path: 'record', maxDepth: 3 });

// Obtener la estructura de popup.record
const vars = await ctx.getVarInfos({ path: 'popup.record', maxDepth: 3 });

// Obtener la estructura completa de variables de nivel superior (maxDepth=3 por defecto)
const vars = await ctx.getVarInfos();

#Diferencia con ctx.getValue

MétodoEscenarioDescripción
ctx.getValue()Campos editables como JSField o JSItemObtiene de forma síncrona el valor del campo actual; requiere vinculación al formulario.
ctx.getVar(path)Cualquier contexto de RunJSObtiene de forma asíncrona cualquier variable de ctx; la ruta debe comenzar con ctx..

En un JSField, use getValue/setValue para leer o escribir el campo actual; use getVar para acceder a otras variables de contexto (como record, user, formValues).

#Notas

  • La ruta debe comenzar con ctx.: por ejemplo, ctx.record.id, de lo contrario se lanzará un error.
  • Método asíncrono: Debe usar await para obtener el resultado, por ejemplo, const id = await ctx.getVar('ctx.record.id').
  • Variable inexistente: Devuelve undefined. Puede usar ?? después del resultado para establecer un valor predeterminado: (await ctx.getVar('ctx.user.nickname')) ?? 'Invitado'.
  • Valores de formulario: ctx.formValues debe obtenerse mediante await ctx.getVar('ctx.formValues'); no se expone directamente como ctx.formValues. En un contexto de formulario, prefiera usar ctx.form.getFieldsValue() para leer los valores más recientes en tiempo real.

#Ejemplos

#Obtener el ID del registro actual

const recordId = await ctx.getVar('ctx.record.id');
if (recordId) {
  ctx.message.info(`Registro actual: ${recordId}`);
}

#Obtener un registro dentro de una ventana emergente

const recordId = await ctx.getVar('ctx.popup.record.id');
if (recordId) {
  ctx.message.info(`Registro de la ventana emergente actual: ${recordId}`);
}

#Leer subelementos de un campo de tipo arreglo

const roleNames = await ctx.getVar('ctx.user.roles.name');
// Devuelve un arreglo de nombres de roles, p. ej., ['admin', 'member']

#Establecer un valor predeterminado

// getVar no tiene un parámetro defaultValue; use ?? después del resultado
const userName = (await ctx.getVar('ctx.user.nickname')) ?? 'Invitado';

#Leer valores de campos de formulario

// Tanto ctx.formValues como ctx.form son para escenarios de formulario; use getVar para leer campos anidados
const status = await ctx.getVar('ctx.formValues.status');
if (status === 'draft') {
  // ...
}

#Leer parámetros de consulta de la URL

const id = await ctx.getVar('ctx.urlSearchParams.id'); // Corresponde a ?id=xxx

#Explorar variables disponibles

// Obtener la estructura de variables bajo record (expandido hasta 3 niveles)
const vars = await ctx.getVarInfos({ path: 'record', maxDepth: 3 });
// vars se ve como { 'record.id': { type: 'string', title: 'id' }, ... }

#Relacionado

  • ctx.getValue() - Obtiene de forma síncrona el valor del campo actual (solo JSField/JSItem)
  • ctx.form - Instancia del formulario; ctx.form.getFieldsValue() puede leer valores del formulario en tiempo real
  • ctx.model - El modelo donde reside el contexto de ejecución actual
  • ctx.blockModel - El bloque padre donde se encuentra el JS actual
  • ctx.resource - La instancia del recurso en el contexto actual
  • {{ctx.xxx}} en SQL / Plantillas - Utiliza las mismas reglas de resolución que ctx.getVar('ctx.xxx')