このドキュメントはAIによって翻訳されました。正確な情報については英語版をご参照ください。
保存済みの SQL 設定または動的 SQLに基づいてクエリを実行するリソース(Resource)です。データソースは flowSql:run / flowSql:runById などのインターフェースから取得されます。レポート、統計、カスタム SQL リストなどのシナリオに適しています。MultiRecordResource とは異なり、SQLResource はデータテーブル(コレクション)に依存せず、SQL クエリを直接実行します。ページネーション、パラメータバインディング、テンプレート変数({{ctx.xxx}})、および結果タイプの制御をサポートしています。
継承関係: FlowResource → APIResource → BaseRecordResource → SQLResource。
作成方法: ctx.makeResource('SQLResource') または ctx.initResource('SQLResource')。保存済みの設定に従って実行する場合は setFilterByTk(uid)(SQL テンプレートの uid)が必要です。デバッグ時には setDebug(true) + setSQL(sql) を使用して SQL を直接実行できます。RunJS 内では、ctx.api は実行環境によって注入されます。
| シナリオ | 説明 |
|---|---|
| レポート / 統計 | 複雑な集計、テーブルをまたぐクエリ、カスタム統計指標など。 |
| JSBlock カスタムリスト | SQL を使用して特殊なフィルタリング、ソート、または関連付けを実現し、カスタムレンダリングを行う。 |
| グラフブロック | 保存済みの SQL テンプレートでグラフのデータソースを駆動し、ページネーションをサポートする。 |
| ctx.sql との使い分け | ページネーション、イベント、リアクティブなデータが必要な場合は SQLResource を使用します。単純な使い切りのクエリには ctx.sql.run() / ctx.sql.runById() が適しています。 |
getData() は setSQLType() の設定に応じて異なる形式を返します:
selectRows(デフォルト):配列。複数行の結果。selectRow:単一のオブジェクト。selectVar:スカラー値(COUNT、SUM など)。getMeta() はページネーションなどのメタ情報を返します:page、pageSize、count、totalPage など。| メソッド | 説明 |
|---|---|
setFilterByTk(uid) | 実行する SQL テンプレートの uid を設定します(runById に対応。事前管理画面での保存が必要)。 |
setSQL(sql) | 生の SQL を設定します(デバッグモード setDebug(true) の時のみ runBySQL で使用)。 |
setSQLType(type) | 結果タイプ:'selectVar' / 'selectRow' / 'selectRows'。 |
setDebug(enabled) | true の場合、refresh は runBySQL() を呼び出し、それ以外は runById() を呼び出します。 |
run() | デバッグ状態に応じて runBySQL() または runById() を呼び出します。 |
runBySQL() | 現在 setSQL で設定されている SQL を実行します(setDebug(true) が必要)。 |
runById() | 現在の uid を使用して保存済みの SQL テンプレートを実行します。 |
| メソッド | 説明 |
|---|---|
setBind(bind) | 変数をバインドします。オブジェクト形式は :name、配列形式は ? に対応します。 |
setLiquidContext(ctx) | テンプレートコンテキスト(Liquid)。{{ctx.xxx}} の解析に使用されます。 |
setFilter(filter) | 追加のフィルタ条件(リクエストデータに渡されます)。 |
setDataSourceKey(key) | データソース識別子(マルチデータソース環境で使用)。 |
| メソッド | 説明 |
|---|---|
setPage(page) / getPage() | 現在のページ(デフォルトは 1)。 |
setPageSize(size) / getPageSize() | 1 ページあたりの件数(デフォルトは 20)。 |
next() / previous() / goto(page) | ページを切り替え、refresh をトリガーします。 |
SQL 内では {{ctx.limit}} や {{ctx.offset}} を使用してページネーションパラメータを参照できます。SQLResource はコンテキストに limit と offset を自動的に注入します。
| メソッド | 説明 |
|---|---|
refresh() | SQL(runById または runBySQL)を実行し、結果を setData(data) に書き込み、meta を更新して 'refresh' イベントをトリガーします。 |
runAction(actionName, options) | 下層のインターフェース(getBind、run、runById など)を呼び出します。 |
on('refresh', fn) / on('loading', fn) | リフレッシュ完了時、またはロード開始時にトリガーされます。 |
setFilterByTk(uid) で指定する uid は、管理画面で保存済みの SQL テンプレート ID である必要があります。ctx.sql.save({ uid, sql }) を通じて保存することも可能です。setDebug(true) の場合は flowSql:run を使用するため、現在のロールに SQL 設定権限が必要です。runById はログイン済みであれば実行可能です。refresh() が複数回呼び出された場合、重複リクエストを避けるために最後の 1 回のみが実行されます。setBind() と :name / ? プレースホルダーを組み合わせて使用してください。ctx.sql.runById は単純な使い切りクエリに適しています。ctx.resource にバインドします。