跳转到内容

简述

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

在线编排逻辑流

新增逻辑流

进入 制品中心->配置->业务域->逻辑流,新增逻辑流:

image.png

逻辑流编排

展开需要编排的逻辑流,点击编排,进入编排页面。

新增服务调用function节点

image.png

配置逻辑流节点

节点是逻辑流的一个基本单元。每个节点接收输入数据,对数据进行操作处理后,如果有输出数据,可以传递给后续节点。节点的入参数据只能来自逻辑流的入参或者之前节点的出参。节点的组合使用构建了复杂的业务逻辑。 节点分为以下三大类:

1. 逻辑处理节点:包含 Choice 节点、Loop 节点、Concurrent节点、End节点。

2. 数据处理节点:包含 DataOperation 节点、Query节点等。

3. 服务调用节点:包含 LogicFlow 节点、Function节点。

公共属性

属性名称数据类型描述
type枚举节点的类型。例如节点类型可以为:Choice、Concurrent、Loop、End、LogicFlow、Function、DataOperation、Query。
id字符串节点的唯一标识
displayName字符串节点的描述信息

输入/输出参数

  1. 逻辑流中的节点可以可以有0或多个输入参数,0或者1个输出参数。逻辑流如果有输出参数,最后一个End节点的出参类型要一致,或者抛出异常。
  2. 在逻辑流中有一个全局上下文,用$表示。逻辑流节点可以从上下文中获取数据作为入参,也可以将节点的输出结果放入上下文。
  3. 入参属性有:参数名称、从上下文取值的路径(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 节点

作用:调用逻辑流。

image-20211129154652097

LogicFuction 节点

作用:调用逻辑函数。 image-20211129154720124