简述
- Trantor 是基于元数据驱动的中后台业务应用研发态 & 交付体系,其核心之一是为了解决软件的二开问题,为此,抽象了三类资源:模型、行为、视图。其中行为部分为业务逻辑,为了方便业务逻辑的扩展 & 二开,Trantor 定义了三种资源:可编排服务、扩展点与逻辑流, 其中可编排服务为最小的业务处理单位,扩展点是为了方便业务扩展在可编排服务内埋的扩展点,逻辑流通常对应具体的业务场景,逻辑流内由一系列的可编排服务组成。
- 逻辑流是可以可视化编排的自动执行的流程,被编排的内容包括一些内置节点(条件判断、循环等控制节点和访问 DataStore 等功能性节点)和逻辑函数。
- 逻辑流可实现的能力接近通过代码编写业务逻辑,是自动且非持久化的执行的。通过使用内置节点,简单的业务逻辑可完全通过逻辑流编排来实现。
- 逻辑流不会持久化执行状态,一次自动执行完成,具备事务能力。
- 逻辑流间可相互调用,可包含可编排服务,也可被视图直接调用。
在线编排逻辑流
新增逻辑流
进入 制品中心->配置->业务域->逻辑流,新增逻辑流:

逻辑流编排
展开需要编排的逻辑流,点击编排,进入编排页面。
新增服务调用function节点

配置逻辑流节点
节点是逻辑流的一个基本单元。每个节点接收输入数据,对数据进行操作处理后,如果有输出数据,可以传递给后续节点。节点的入参数据只能来自逻辑流的入参或者之前节点的出参。节点的组合使用构建了复杂的业务逻辑。 节点分为以下三大类:
1. 逻辑处理节点:包含 Choice 节点、Loop 节点、Concurrent节点、End节点。
2. 数据处理节点:包含 DataOperation 节点、Query节点等。
3. 服务调用节点:包含 LogicFlow 节点、Function节点。
公共属性
| 属性名称 | 数据类型 | 描述 |
|---|---|---|
| type | 枚举 | 节点的类型。例如节点类型可以为:Choice、Concurrent、Loop、End、LogicFlow、Function、DataOperation、Query。 |
| id | 字符串 | 节点的唯一标识 |
| displayName | 字符串 | 节点的描述信息 |
输入/输出参数
- 逻辑流中的节点可以可以有0或多个输入参数,0或者1个输出参数。逻辑流如果有输出参数,最后一个End节点的出参类型要一致,或者抛出异常。
- 在逻辑流中有一个全局上下文,用$表示。逻辑流节点可以从上下文中获取数据作为入参,也可以将节点的输出结果放入上下文。
- 入参属性有:参数名称、从上下文取值的路径(path)、参数类型(有Model, ModelArray 和 ModelPaging三种, 默认是 Model)、模型Key以及是否查询模型。
为了便于理解,可以理解Trantor在处理时按照以下Json处理,例如:
"inputParameters": { // 入参声明 "user": { //参数名称 "path": "$.userInput", // 从上下文中取值的 path, $ 就是上下文 "model": "base_User", // 从上下文取得模型 Key "type": "Model", // 入参的类型 "isQueryModel": "false" // 是否查询模型 }}出参属性有:放入上下文的路径(path)、参数类型、模型Key以及是否查询模型。例如:
"outputParameter": { // 整个流返回的出参, 值是 context 的 path "path": "$.staff", // 返回的 path "model": "base_Staff", // 返回的模型 Key "type": "Model", // 出参的类型 "isQueryModel": "false" // 是否查询模型}逻辑处理节点
Concurrent节点
作用:可以创建多个分支, 并行的执行多个分支的任务. 配置跟 Choice 差不多, 只是没有表达式判断。
为了便于理解,可以理解Trantor在处理时按照以下Json处理,示例:
[ { "id":"0J8UW3", "type":"concurrent", "displayName":"订单处理流程", "config":{ "branches":[ { "displayName":"未支付订单", "pipeline":[ { "id":"uuC1NB", "type":"function", "displayName":"订单未支付处理函数", "config":{ "logicFunctionKey":"flow_pipeline_demo_CreateOrderFunc", "inputParameters":{ "orderBO":{ "path":"$.orderBO", "model":"flow_pipeline_demo_OrderBO", "type":"Model", "isQueryModel": "false" } }, "outputParameter":{ "path":"$.result", "model":"flow_pipeline_demo_OrderBO", "type":"Model", "isQueryModel": "false" } } } ] }, { "displayName":"退化单", "pipeline":[ { "id":"FHwIGn", "type":"function", "displayName":"orderFunc", "config":{ "logicFunctionKey":"flow_pipeline_demo_CreateOrderFunc", "inputParameters":{ "orderBO":{ "path":"$.orderBO", "model":"flow_pipeline_demo_OrderBO", "type":"Model", "isQueryModel": "false" } }, "outputParameter":{ "path":"$.result", "model":"flow_pipeline_demo_OrderBO", "type":"Model", "isQueryModel": "false" } } } ] } ] } }]Choice节点
作用:根据上下文参数做判断, 来决定如何执行后续逻辑
说明: 默认分支的expression值为 OTHERWISE。 为了便于理解,可以理解Trantor在处理时按照以下Json处理,示例:
[ { "id":"0J8UW3", "type":"choice", "displayName":"订单处理流程", "config":{ "choices":[ { "expression":"$.orderBO.payStatus == PayStatusDict.UNPAID", "displayName":"未支付订单", "pipeline":[ { "id":"uuC1NB", "type":"function", "displayName":"订单未支付处理函数", "config":{ "logicFunctionKey":"flow_pipeline_demo_CreateOrderFunc", "inputParameters":{ "orderBO":{ "path":"$.orderBO", "model":"flow_pipeline_demo_OrderBO", "type":"Model", "isQueryModel": "false" } }, "outputParameter":{ "path":"$.result", "model":"flow_pipeline_demo_OrderBO", "type":"Model", "isQueryModel": "false" } } } ] }, { "expression":"$.orderBO.payStatus == PayStatusDict.RETURN", "displayName":"退化单", "pipeline":[ { "id":"FHwIGn", "type":"function", "displayName":"orderFunc", "config":{ "logicFunctionKey":"flow_pipeline_demo_CreateOrderFunc", "inputParameters":{ "orderBO":{ "path":"$.orderBO", "model":"flow_pipeline_demo_OrderBO", "type":"Model", "isQueryModel": "false" } }, "outputParameter":{ "path":"$.result", "model":"flow_pipeline_demo_OrderBO", "type":"Model", "isQueryModel": "false" } } } ] }, { "expression": "OTHERWISE", "displayName": "OTHERWISE", "pipeline": [ {
} ] } ] } }]Loop节点
作用:循环执行集合中的元素。根据是否有有返回值和执行顺序分为以下4种: 串行无返回: 循环顺序执行,没有返回值 串行有返回: 循环顺序执行,有返回值 并行无返回: 并行执行数组内对象,没有返回值 并行有返回: 并行执行数组内对象,,有返回值
为了便于理解,可以理解Trantor在处理时按照以下Json处理,示例:
[ { "id":"uuC1NB", "type":"loop", "displayName":"订单处理", "config":{ "itemKey":"order", "type":"Foreach", "inputParameters":{ "orderBO":{ "path":"$.orderBO", "model":"flow_pipeline_demo_OrderBO", "type":"Model", "isQueryModel": "false" } }, "outputParameter":{ "path":"$.result", "model":"flow_pipeline_demo_OrderBO", "type":"Model", "isQueryModel": "false" } }, "pipeline":[ { "id":"uuC1NB", "type":"function", "displayName":"订单未支付处理函数", "config":{ "logicFunctionKey":"flow_pipeline_demo_CreateOrderFunc", "inputParameters":{ "orderBO":{ "path":"$.orderBO", "model":"flow_pipeline_demo_OrderBO", "type":"Model", "isQueryModel": "false" } }, "outputParameter":{ "path":"$.result", "model":"flow_pipeline_demo_OrderBO", "type":"Model", "isQueryModel": "false" } } } ] }]End节点
作用:终止节点, 某些场景需要快速返回, 可以直接声明该节点, 类似于代码中的 Return, 会自动返回流程声明的 Context path.
说明:end节点如果是正常返回,逻辑流有返回值,必须设置出参。其他异常情形不需要设置出参。 示例:
[ { "id":"uuC1NB", "type":"end", "displayName":"订单处理函数", "config":{ "type":"End", "message":"异常消息",
"outputParameter":{ "path":"$.result", "model":"flow_pipeline_demo_OrderBO", "type":"Model", "isQueryModel": "false" } } }]数据处理节点
DataOperation 节点
作用:操作 DataStore, 将传入的模型进行相关 DS 操作, 目前预计有四种, 分别是 create, update, delete 和 save 说明:dataOperation节点入参只有一个,一般是模型对象或者模型列表。目前因为不支持非模型结构数据,出参为空。
Query节点
作用:执行 TMQL (Trantor Model Query Language), 主要场景是一些 RDB 的查询
说明: 1、如果sql不为空,执行DS.find(sql), 2、如果sql为空,输入参数 inputParameters只有一个,而且必须是查询模型。 返回参数如果是模型,执行DS.findOne(QueryModel); 返回参数如果是模型列表,执行DS.finAll(QueryModel); 如果返回的是模型分页,执行DS.paging(QueryModel)。 为了便于理解,可以理解Trantor在处理时按照以下Json处理,示例:
[ { "id":"uuC1NB", "type":"end", "displayName":"订单处理函数", "config":{ "sql":"select * from base_User", "outputParameter":{ "path":"$.result", "model":"base_User", "type":"ModelArray", "isQueryModel": "false" } } }][ { "id":"uuC1NB", "type":"end", "displayName":"订单处理函数", "config":{ "inputParameters":{ "orderBO":{ "path":"$.itemBO", "model":"demo_ItemBO", "type":"Model", "isQueryModel": "true" } }, "outputParameter":{ "path":"$.result", "model":"base_User", "type":"ModelArray", "isQueryModel": "false" } } }]服务调用节点
LogicFlow 节点
作用:调用逻辑流。

LogicFuction 节点
作用:调用逻辑函数。
