SQLResource
基于已保存的 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 由运行环境注入。
适用场景
数据格式
getData()根据setSQLType()返回不同格式:selectRows(默认):数组,多行结果selectRow:单条对象selectVar:标量值(如 COUNT、SUM)
getMeta()返回分页等元信息:page、pageSize、count、totalPage等
SQL 配置与执行模式
参数与上下文
分页
SQL 中可使用 {{ctx.limit}}、{{ctx.offset}} 引用分页参数,SQLResource 会在上下文中注入 limit、offset。
数据拉取与事件
示例
按已保存模板执行(runById)
调试模式:直接执行 SQL(runBySQL)
分页与翻页
结果类型
使用模板变量
监听 refresh 事件
注意事项
- runById 需先保存模板:
setFilterByTk(uid)的 uid 必须是已在管理端保存的 SQL 模板 ID,可通过ctx.sql.save({ uid, sql })保存。 - 调试模式需权限:
setDebug(true)时走flowSql:run,需当前角色具备 SQL 配置权限;runById仅需登录即可。 - refresh 防抖:同一事件循环内多次调用
refresh()只会执行最后一次,避免重复请求。 - 参数绑定防注入:使用
setBind()配合:name/?占位符,避免字符串拼接导致 SQL 注入。
相关
- ctx.sql - SQL 执行与管理,
ctx.sql.runById适合简单一次性查询 - ctx.resource - 当前上下文中的 resource 实例
- ctx.initResource() - 初始化并绑定到 ctx.resource
- ctx.makeResource() - 新建 resource 实例,不绑定
- APIResource - 通用 API 资源
- MultiRecordResource - 面向数据表/列表

