Este documento ha sido traducido por IA. Para información precisa, consulte la versión en inglés.
Resource para ejecutar consultas basadas en configuraciones SQL guardadas o SQL dinámico, con datos provenientes de interfaces como flowSql:run / flowSql:runById. Es adecuado para informes, estadísticas, listas SQL personalizadas y otros escenarios. A diferencia de MultiRecordResource, SQLResource no depende de las colecciones; ejecuta consultas SQL directamente y admite paginación, vinculación de parámetros, variables de plantilla ({{ctx.xxx}}) y control del tipo de resultado.
Relación de herencia: FlowResource → APIResource → BaseRecordResource → SQLResource.
Formas de creación: ctx.makeResource('SQLResource') o ctx.initResource('SQLResource'). Para ejecutar basándose en una configuración guardada, utilice setFilterByTk(uid) (el UID de la plantilla SQL); para depuración, utilice setDebug(true) + setSQL(sql) para ejecutar SQL directamente. En RunJS, ctx.api es inyectado por el entorno de ejecución.
| Escenario | Descripción |
|---|---|
| Informes / Estadísticas | Agregaciones complejas, consultas entre tablas y métricas estadísticas personalizadas. |
| Listas personalizadas JSBlock | Implementación de filtrado, ordenamiento o asociaciones especiales mediante SQL con renderizado personalizado. |
| Bloques de gráficos | Impulsa las fuentes de datos de los gráficos con plantillas SQL guardadas, admitiendo paginación. |
| Elección entre SQLResource y ctx.sql | Utilice SQLResource cuando se requiera paginación, eventos o datos reactivos; utilice ctx.sql.run() / ctx.sql.runById() para consultas simples y puntuales. |
getData() devuelve diferentes formatos según setSQLType():
selectRows (predeterminado): Array, resultados de varias filas.selectRow: Objeto único.selectVar: Valor escalar (por ejemplo, COUNT, SUM).getMeta() devuelve metadatos como la paginación: page, pageSize, count, totalPage, etc.| Método | Descripción |
|---|---|
setFilterByTk(uid) | Establece el UID de la plantilla SQL a ejecutar (corresponde a runById; debe guardarse primero en la interfaz de administración). |
setSQL(sql) | Establece el SQL sin procesar (se usa para runBySQL solo cuando el modo de depuración setDebug(true) está habilitado). |
setSQLType(type) | Tipo de resultado: 'selectVar' / 'selectRow' / 'selectRows'. |
setDebug(enabled) | Cuando se establece en true, refresh llama a runBySQL(); de lo contrario, llama a runById(). |
run() | Llama a runBySQL() o runById() según el estado de depuración. |
runBySQL() | Ejecuta utilizando el SQL definido en setSQL (requiere setDebug(true)). |
runById() | Ejecuta la plantilla SQL guardada utilizando el UID actual. |
| Método | Descripción |
|---|---|
setBind(bind) | Vincula variables. Utilice un objeto para marcadores :name o un array para marcadores ?. |
setLiquidContext(ctx) | Contexto de la plantilla (Liquid), utilizado para analizar {{ctx.xxx}}. |
setFilter(filter) | Condiciones de filtrado adicionales (pasadas en los datos de la solicitud). |
setDataSourceKey(key) | Identificador de la fuente de datos (utilizado en entornos con múltiples fuentes de datos). |
| Método | Descripción |
|---|---|
setPage(page) / getPage() | Página actual (por defecto es 1). |
setPageSize(size) / getPageSize() | Elementos por página (por defecto es 20). |
next() / previous() / goto(page) | Navega por las páginas y activa refresh. |
En SQL, puede utilizar {{ctx.limit}} y {{ctx.offset}} para hacer referencia a los parámetros de paginación. SQLResource inyecta automáticamente limit y offset en el contexto.
| Método | Descripción |
|---|---|
refresh() | Ejecuta el SQL (runById o runBySQL), escribe el resultado en setData(data), actualiza los metadatos y activa el evento 'refresh'. |
runAction(actionName, options) | Llama a acciones subyacentes (por ejemplo, getBind, run, runById). |
on('refresh', fn) / on('loading', fn) | Se activa cuando se completa la actualización o cuando comienza la carga. |
setFilterByTk(uid) debe ser un ID de plantilla SQL ya guardado en la interfaz de administración. Puede guardarlo a través de ctx.sql.save({ uid, sql }).setDebug(true) utiliza flowSql:run, lo que requiere que el rol actual tenga permisos de configuración de SQL. runById solo requiere que el usuario haya iniciado sesión.refresh() dentro del mismo ciclo de eventos solo ejecutarán la última para evitar solicitudes redundantes.setBind() con marcadores :name o ? en lugar de la concatenación de cadenas para evitar la inyección de SQL.ctx.sql.runById es adecuado para consultas simples y puntuales.ctx.resource.