ctx.initResource()

Inicializa el recurso para el contexto actual. Si ctx.resource aún no existe, crea uno del tipo especificado y lo vincula al contexto; si ya existe, se utiliza directamente. Posteriormente, se puede acceder a él a través de ctx.resource.

Escenarios de uso

Generalmente se utiliza en escenarios de JSBlock (bloque independiente). La mayoría de los bloques, ventanas emergentes y otros componentes tienen ctx.resource vinculado previamente y no requieren llamadas manuales. JSBlock no tiene un recurso por defecto, por lo que debe llamar a ctx.initResource(type) antes de cargar datos a través de ctx.resource.

Definición de tipo

initResource(
  type: 'APIResource' | 'SingleRecordResource' | 'MultiRecordResource' | 'SQLResource'
): FlowResource;
ParámetroTipoDescripción
typestringTipo de recurso: 'APIResource', 'SingleRecordResource', 'MultiRecordResource', 'SQLResource'

Valor de retorno: La instancia del recurso en el contexto actual (es decir, ctx.resource).

Diferencia con ctx.makeResource()

MétodoComportamiento
ctx.initResource(type)Crea y vincula si ctx.resource no existe; devuelve el existente si ya existe. Garantiza que ctx.resource esté disponible.
ctx.makeResource(type)Solo crea y devuelve una nueva instancia, no escribe en ctx.resource. Adecuado para escenarios que requieren múltiples recursos independientes o uso temporal.

Ejemplos

Datos de lista (MultiRecordResource)

ctx.initResource('MultiRecordResource');
ctx.resource.setResourceName('users');
await ctx.resource.refresh();
const rows = ctx.resource.getData();
ctx.render(<pre>{JSON.stringify(rows, null, 2)}</pre>);

Registro único (SingleRecordResource)

ctx.initResource('SingleRecordResource');
ctx.resource.setResourceName('users');
ctx.resource.setFilterByTk(1); // Especificar clave primaria
await ctx.resource.refresh();
const record = ctx.resource.getData();

Especificar fuente de datos

ctx.initResource('MultiRecordResource');
ctx.resource.setDataSourceKey('main');
ctx.resource.setResourceName('orders');
await ctx.resource.refresh();

Notas

  • En la mayoría de los escenarios de bloques (formularios, tablas, detalles, etc.) y ventanas emergentes, ctx.resource ya está vinculado previamente por el entorno de ejecución, por lo que no es necesario llamar a ctx.initResource.
  • La inicialización manual solo es necesaria en contextos como JSBlock, donde no hay un recurso por defecto.
  • Después de la inicialización, debe llamar a setResourceName(name) para especificar la colección y luego llamar a refresh() para cargar los datos.

Relacionado