使用数据流 Flow 或 Script 编排处理器调用逻辑,实现复杂数据查询、处理。
约定
/data/app
, 实际编写时需替换为应用根目录。<>
标识自行替换的内容。 例如: icon-<图标名称>
, 实际编写时应替换为: icon-foo
, icon-bar
....yao
的后缀和格式和.json
结构是一样的,不影响使用都可以兼容。使用 Flow DSL 编写处理器,编排数据查询逻辑。
在 flows
目录下, 创建一个 Flow DSL 文件,编排数据查询逻辑。
/data/app/flows/product.flow.yao
{"label": "演示","version": "1.0.0","description": "数据查询","nodes": [{"name": "添加数据","process": "models.product.Insert","args": [["name", "remark", "user_id"],[["遗落的南境三部曲一", "(美) 杰夫·范德米尔", 1],["遗落的南境三部曲二", "(美) 杰夫·范德米尔", 1],["遗落的南境三部曲三", "(美) 杰夫·范德米尔", 1],["没药花园案件:罪恶", "没药花园 著,博集天", 1],["那不勒斯四部曲", "【意】埃莱娜·费兰特", 1]]]},{"name": "分页查询","process": "models.product.Paginate","args": [{"select": ["id", "name", "remark", "user_id"],"wheres": [{ "column": "name", "op": "match", "value": "三部曲" }]},1,2]}],"output": "{{$res}}"}
运行调试
yao run flows.product
使用 {{$res.<节点名称>}}
变量访问数据流节点的查询结果。
在 flows/query
目录下, 新建一个 Flow DSL 文件。
/data/app/flows/query/search.flow.yao
{"label": "演示","version": "1.0.0","description": "数据查询","nodes": [{"name": "产品","process": "models.product.Paginate","args": [{"select": ["id", "name", "remark", "user_id"],"wheres": [{ "column": "name", "op": "match", "value": "三部曲" }]},1,2]},{"name": "打印","process": "utils.fmt.Print","args": ["{{$res.产品.data[0]}}"]},{"name": "用户","process": "models.admin.user.Find","args": ["{{$res.产品.data[0].user_id}}", { "select": ["id", "name"] }]}],"output": {"产品": "{{$res.产品}}","用户": "{{$res.用户}}"}}
运行调试
yao run flows.query.search
使用 {{$in[<参数表下标>]}}
变量访问传入参数
在 flows/query
目录下, 新建一个 Flow DSL 文件。
/data/app/flows/query/args.flow.yao
{"label": "演示","version": "1.0.0","description": "数据查询","nodes": [{"name": "用户","process": "models.admin.user.Find","args": ["{{$in[0]}}", { "select": ["id", "name"] }]}],"output": {"参数表": "{{$in}}","用户": "{{$res.用户}}"}}
运行调试
yao run flows.query.args 1
如果参数表中 只有一个 Map 类型参数, 可以直接使用 KEY
作为变量名称。
在 flows/query
目录下, 新建一个 Flow DSL 文件。
/data/app/flows/query/args_map.flow.yao
{"label": "演示","version": "1.0.0","description": "数据查询","nodes": [{"name": "用户","process": "models.admin.user.Find","args": ["{{$id}}", { "select": ["id", "name"] }]}],"output": {"参数表": "{{$in}}","用户": "{{$res.用户}}","ID": {"$id": "{{$id}}","$in[0].id": "{{$in[0].id}}"}}}
本例中 {{$id}}
与 {{$in[0].id}}
等效
运行调试
yao run flows.query.args_map '::{"id":1}'
对于逻辑较为复杂的场景,可以使用 JavaScript 脚本编写处理器,实现逻辑编排。
在 scirpts
目录下, 新建一个 JS 文件。
/data/app/scripts/query.js
/*** 查询产品信息*/function Product() {let res = Process("models.product.Insert",["name", "remark", "user_id"],[["手艺里的中国:指尖", "李武望 著 时代华语", 2],["(限时包邮)在印度", "随水 著,书田文化", 2],]);let products = Process("models.product.Get", {select: ["id", "name", "remark", "user_id"],wheres: [{ column: "user_id", value: 2 }],});let result = [];products.forEach((item) => {result.push(`${item.id} - ${item.name} ( ${item.remark} )`);});return result;}
运行调试
yao run scripts.query.Product
在文件中添加一个 Args
函数
/data/app/scripts/query.js
/*** 传参演示*/function Args(...args) {return args;}
运行调试
yao run scripts.query.Args "hello" '::{"foo":"bar"}'
使用数据流 Flow 或 Script 编排处理器调用逻辑,实现复杂数据查询、处理。
约定
/data/app
, 实际编写时需替换为应用根目录。<>
标识自行替换的内容。 例如: icon-<图标名称>
, 实际编写时应替换为: icon-foo
, icon-bar
....yao
的后缀和格式和.json
结构是一样的,不影响使用都可以兼容。使用 Flow DSL 编写处理器,编排数据查询逻辑。
在 flows
目录下, 创建一个 Flow DSL 文件,编排数据查询逻辑。
/data/app/flows/product.flow.yao
{"label": "演示","version": "1.0.0","description": "数据查询","nodes": [{"name": "添加数据","process": "models.product.Insert","args": [["name", "remark", "user_id"],[["遗落的南境三部曲一", "(美) 杰夫·范德米尔", 1],["遗落的南境三部曲二", "(美) 杰夫·范德米尔", 1],["遗落的南境三部曲三", "(美) 杰夫·范德米尔", 1],["没药花园案件:罪恶", "没药花园 著,博集天", 1],["那不勒斯四部曲", "【意】埃莱娜·费兰特", 1]]]},{"name": "分页查询","process": "models.product.Paginate","args": [{"select": ["id", "name", "remark", "user_id"],"wheres": [{ "column": "name", "op": "match", "value": "三部曲" }]},1,2]}],"output": "{{$res}}"}
运行调试
yao run flows.product
使用 {{$res.<节点名称>}}
变量访问数据流节点的查询结果。
在 flows/query
目录下, 新建一个 Flow DSL 文件。
/data/app/flows/query/search.flow.yao
{"label": "演示","version": "1.0.0","description": "数据查询","nodes": [{"name": "产品","process": "models.product.Paginate","args": [{"select": ["id", "name", "remark", "user_id"],"wheres": [{ "column": "name", "op": "match", "value": "三部曲" }]},1,2]},{"name": "打印","process": "utils.fmt.Print","args": ["{{$res.产品.data[0]}}"]},{"name": "用户","process": "models.admin.user.Find","args": ["{{$res.产品.data[0].user_id}}", { "select": ["id", "name"] }]}],"output": {"产品": "{{$res.产品}}","用户": "{{$res.用户}}"}}
运行调试
yao run flows.query.search
使用 {{$in[<参数表下标>]}}
变量访问传入参数
在 flows/query
目录下, 新建一个 Flow DSL 文件。
/data/app/flows/query/args.flow.yao
{"label": "演示","version": "1.0.0","description": "数据查询","nodes": [{"name": "用户","process": "models.admin.user.Find","args": ["{{$in[0]}}", { "select": ["id", "name"] }]}],"output": {"参数表": "{{$in}}","用户": "{{$res.用户}}"}}
运行调试
yao run flows.query.args 1
如果参数表中 只有一个 Map 类型参数, 可以直接使用 KEY
作为变量名称。
在 flows/query
目录下, 新建一个 Flow DSL 文件。
/data/app/flows/query/args_map.flow.yao
{"label": "演示","version": "1.0.0","description": "数据查询","nodes": [{"name": "用户","process": "models.admin.user.Find","args": ["{{$id}}", { "select": ["id", "name"] }]}],"output": {"参数表": "{{$in}}","用户": "{{$res.用户}}","ID": {"$id": "{{$id}}","$in[0].id": "{{$in[0].id}}"}}}
本例中 {{$id}}
与 {{$in[0].id}}
等效
运行调试
yao run flows.query.args_map '::{"id":1}'
对于逻辑较为复杂的场景,可以使用 JavaScript 脚本编写处理器,实现逻辑编排。
在 scirpts
目录下, 新建一个 JS 文件。
/data/app/scripts/query.js
/*** 查询产品信息*/function Product() {let res = Process("models.product.Insert",["name", "remark", "user_id"],[["手艺里的中国:指尖", "李武望 著 时代华语", 2],["(限时包邮)在印度", "随水 著,书田文化", 2],]);let products = Process("models.product.Get", {select: ["id", "name", "remark", "user_id"],wheres: [{ column: "user_id", value: 2 }],});let result = [];products.forEach((item) => {result.push(`${item.id} - ${item.name} ( ${item.remark} )`);});return result;}
运行调试
yao run scripts.query.Product
在文件中添加一个 Args
函数
/data/app/scripts/query.js
/*** 传参演示*/function Args(...args) {return args;}
运行调试
yao run scripts.query.Args "hello" '::{"foo":"bar"}'