Dieses Dokument wurde von KI übersetzt. Für genaue Informationen lesen Sie bitte die englische Version.
Eine Resource zum Ausführen von Abfragen basierend auf gespeicherten SQL-Konfigurationen oder dynamischem SQL. Die Datenquelle stammt von Schnittstellen wie flowSql:run / flowSql:runById. Sie eignet sich für Berichte, Statistiken, benutzerdefinierte SQL-Listen und andere Szenarien. Im Gegensatz zur MultiRecordResource ist die SQLResource nicht von Sammlungen (Collections) abhängig; sie führt SQL-Abfragen direkt aus und unterstützt Paginierung, Parameterbindung, Vorlagenvariablen ({{ctx.xxx}}) sowie die Steuerung des Ergebnistyps.
Vererbungshierarchie: FlowResource → APIResource → BaseRecordResource → SQLResource.
Erstellungsmethode: ctx.makeResource('SQLResource') oder ctx.initResource('SQLResource'). Zur Ausführung basierend auf einer gespeicherten Konfiguration verwenden Sie setFilterByTk(uid) (die UID der SQL-Vorlage). Zum Debuggen können Sie setDebug(true) + setSQL(sql) verwenden, um SQL direkt auszuführen. In RunJS wird ctx.api durch die Laufzeitumgebung injiziert.
| Szenario | Beschreibung |
|---|---|
| Berichte / Statistiken | Komplexe Aggregationen, tabellenübergreifende Abfragen und benutzerdefinierte statistische Kennzahlen. |
| JSBlock Benutzerdefinierte Listen | Implementierung spezieller Filterungen, Sortierungen oder Verknüpfungen mittels SQL mit benutzerdefiniertem Rendering. |
| Diagramm-Blöcke | Speichern von SQL-Vorlagen als Datenquelle für Diagramme, inklusive Unterstützung für Paginierung. |
| Wahl zwischen SQLResource und ctx.sql | Verwenden Sie SQLResource, wenn Paginierung, Ereignisse oder reaktive Daten erforderlich sind; verwenden Sie ctx.sql.run() / ctx.sql.runById() für einfache, einmalige Abfragen. |
getData() gibt je nach setSQLType() unterschiedliche Formate zurück:
selectRows (Standard): Array, Ergebnisse mehrerer Zeilen.selectRow: Einzelnes Objekt.selectVar: Skalarer Wert (z. B. COUNT, SUM).getMeta() gibt Metainformationen wie die Paginierung zurück: page, pageSize, count, totalPage usw.| Methode | Beschreibung |
|---|---|
setFilterByTk(uid) | Legt die UID der auszuführenden SQL-Vorlage fest (entspricht runById; muss zuvor in der Administrationsoberfläche gespeichert werden). |
setSQL(sql) | Legt das rohe SQL fest (wird nur für runBySQL verwendet, wenn der Debug-Modus setDebug(true) aktiviert ist). |
setSQLType(type) | Ergebnistyp: 'selectVar' / 'selectRow' / 'selectRows'. |
setDebug(enabled) | Wenn auf true gesetzt, ruft refresh die Methode runBySQL() auf; andernfalls wird runById() aufgerufen. |
run() | Ruft je nach Debug-Status runBySQL() oder runById() auf. |
runBySQL() | Führt die Abfrage mit dem in setSQL definierten SQL aus (erfordert setDebug(true)). |
runById() | Führt die gespeicherte SQL-Vorlage unter Verwendung der aktuellen UID aus. |
| Methode | Beschreibung |
|---|---|
setBind(bind) | Bindet Variablen. Verwenden Sie ein Objekt für :name-Platzhalter oder ein Array für ?-Platzhalter. |
setLiquidContext(ctx) | Vorlagenkontext (Liquid), wird zum Parsen von {{ctx.xxx}} verwendet. |
setFilter(filter) | Zusätzliche Filterbedingungen (werden in die Anforderungsdaten übergeben). |
setDataSourceKey(key) | Identifikator der Datenquelle (wird in Umgebungen mit mehreren Datenquellen verwendet). |
| Methode | Beschreibung |
|---|---|
setPage(page) / getPage() | Aktuelle Seite (Standard ist 1). |
setPageSize(size) / getPageSize() | Einträge pro Seite (Standard ist 20). |
next() / previous() / goto(page) | Navigiert durch die Seiten und löst refresh aus. |
In SQL können Sie {{ctx.limit}} und {{ctx.offset}} verwenden, um auf Paginierungsparameter zuzugreifen. Die SQLResource injiziert limit und offset automatisch in den Kontext.
| Methode | Beschreibung |
|---|---|
refresh() | Führt das SQL aus (runById oder runBySQL), schreibt das Ergebnis in setData(data), aktualisiert die Metadaten und löst das Ereignis 'refresh' aus. |
runAction(actionName, options) | Ruft zugrunde liegende Aktionen auf (z. B. getBind, run, runById). |
on('refresh', fn) / on('loading', fn) | Wird ausgelöst, wenn die Aktualisierung abgeschlossen ist oder der Ladevorgang beginnt. |
setFilterByTk(uid) verwendete UID muss eine SQL-Vorlagen-ID sein, die bereits in der Administrationsoberfläche gespeichert wurde. Sie können diese über ctx.sql.save({ uid, sql }) speichern.setDebug(true) nutzt flowSql:run, was voraussetzt, dass die aktuelle Rolle über Berechtigungen zur SQL-Konfiguration verfügt. runById erfordert lediglich, dass der Benutzer angemeldet ist.refresh() innerhalb desselben Ereigniszyklus führen nur die letzte Anfrage aus, um redundante Anfragen zu vermeiden.setBind() mit :name oder ? Platzhaltern anstelle von String-Verkettungen, um SQL-Injektionen zu verhindern.ctx.sql.runById eignet sich für einfache, einmalige Abfragen.ctx.resource.