Ce document a été traduit par IA. Pour des informations précises, veuillez consulter la version anglaise.
Une Resource permettant d'exécuter des requêtes basées sur des configurations SQL enregistrées ou du SQL dynamique, les données provenant d'interfaces telles que flowSql:run / flowSql:runById. Elle est adaptée aux rapports, aux statistiques, aux listes SQL personnalisées et à d'autres scénarios. Contrairement à MultiRecordResource, SQLResource ne dépend pas des collections ; elle exécute directement des requêtes SQL et prend en charge la pagination, la liaison de paramètres (binding), les variables de template ({{ctx.xxx}}) et le contrôle du type de résultat.
Héritage : FlowResource → APIResource → BaseRecordResource → SQLResource.
Méthode de création : ctx.makeResource('SQLResource') ou ctx.initResource('SQLResource'). Pour une exécution basée sur une configuration enregistrée, utilisez setFilterByTk(uid) (l'UID du template SQL). Pour le débogage, utilisez setDebug(true) + setSQL(sql) pour exécuter directement le SQL. Dans RunJS, ctx.api est injecté par l'environnement d'exécution.
| Scénario | Description |
|---|---|
| Rapports / Statistiques | Agrégations complexes, requêtes multi-tables et indicateurs statistiques personnalisés. |
| Listes personnalisées JSBlock | Implémentation de filtrages, tris ou associations spécifiques via SQL avec un rendu personnalisé. |
| Blocs de graphique | Pilotage des sources de données de graphiques avec des templates SQL enregistrés, incluant le support de la pagination. |
| Choix entre SQLResource et ctx.sql | Utilisez SQLResource lorsque la pagination, les événements ou les données réactives sont nécessaires ; utilisez ctx.sql.run() / ctx.sql.runById() pour des requêtes simples et ponctuelles. |
getData() retourne différents formats selon setSQLType() :
selectRows (par défaut) : Tableau, résultats sur plusieurs lignes.selectRow : Objet unique.selectVar : Valeur scalaire (ex: COUNT, SUM).getMeta() retourne les métadonnées telles que la pagination : page, pageSize, count, totalPage, etc.| Méthode | Description |
|---|---|
setFilterByTk(uid) | Définit l'UID du template SQL à exécuter (correspond à runById ; doit être préalablement enregistré dans l'interface d'administration). |
setSQL(sql) | Définit le SQL brut (utilisé pour runBySQL uniquement lorsque le mode débogage setDebug(true) est activé). |
setSQLType(type) | Type de résultat : 'selectVar' / 'selectRow' / 'selectRows'. |
setDebug(enabled) | Si défini sur true, refresh appelle runBySQL() ; sinon, il appelle runById(). |
run() | Appelle runBySQL() ou runById() selon l'état du débogage. |
runBySQL() | Exécute en utilisant le SQL défini dans setSQL (nécessite setDebug(true)). |
runById() | Exécute le template SQL enregistré en utilisant l'UID actuel. |
| Méthode | Description |
|---|---|
setBind(bind) | Lie les variables. Utilisez un objet pour les marqueurs :name ou un tableau pour les marqueurs ?. |
setLiquidContext(ctx) | Contexte du template (Liquid), utilisé pour analyser {{ctx.xxx}}. |
setFilter(filter) | Conditions de filtrage supplémentaires (passées dans les données de la requête). |
setDataSourceKey(key) | Identifiant de la source de données (utilisé dans les environnements multi-sources). |
| Méthode | Description |
|---|---|
setPage(page) / getPage() | Page actuelle (par défaut 1). |
setPageSize(size) / getPageSize() | Éléments par page (par défaut 20). |
next() / previous() / goto(page) | Navigue entre les pages et déclenche refresh. |
Dans le SQL, vous pouvez utiliser {{ctx.limit}} et {{ctx.offset}} pour référencer les paramètres de pagination. SQLResource injecte automatiquement limit et offset dans le contexte.
| Méthode | Description |
|---|---|
refresh() | Exécute le SQL (runById ou runBySQL), écrit le résultat dans setData(data), met à jour les métadonnées et déclenche l'événement 'refresh'. |
runAction(actionName, options) | Appelle les actions sous-jacentes (ex: getBind, run, runById). |
on('refresh', fn) / on('loading', fn) | Déclenché lorsque le rafraîchissement est terminé ou lorsque le chargement commence. |
setFilterByTk(uid) doit correspondre à un ID de template SQL déjà enregistré dans l'interface d'administration. Vous pouvez l'enregistrer via ctx.sql.save({ uid, sql }).setDebug(true) utilise flowSql:run, ce qui nécessite que le rôle actuel dispose des permissions de configuration SQL. runById nécessite seulement que l'utilisateur soit connecté.refresh() au sein de la même boucle d'événements n'exécuteront que le dernier appel afin d'éviter les requêtes redondantes.setBind() avec les marqueurs :name ou ? au lieu de la concaténation de chaînes de caractères pour prévenir les injections SQL.ctx.sql.runById est adapté aux requêtes simples et ponctuelles.ctx.resource.