Repository navigation
Solon Flow v3.8.0
重要变化:
- 第六次预览
- 取消“有状态”、“无状态”概念。
- solon-flow 回归通用流程引擎(分离“有状态”的概念)。
- 新增 solon-flow-workflow 为工作流性质的封装(未来可能会有 dataflow 等)。
具体更新:
- 插件
solon-flow第六次预览 - 新增
solon-flow-workflow插件(替代 FlowStatefulService) - 添加
solon-flowFlowContext:lastNode() 方法(最后一个运行的节点) - 添加
solon-flowFlowContext:lastNodeId() 方法(最后一个运行的节点Id) - 添加
solon-flowNode.getMetaAs, Link.getMetaAs 方法 - 添加
solon-flowNodeSpec:linkRemove 方法(增强修改能力) - 添加
solon-flowGraph:create(id,title,consumer) 方法 - 添加
solon-flowGraph:copy(graph,consumer) 方法(方便复制后修改) - 添加
solon-flowGraphSpec:getNode(id) 方法 - 添加
solon-flowGraphSpec:addLoop(id) 方法替代 addLooping(后者标为弃用) - 添加
solon-flowFlowEngine:eval(Graph, ..) 系列方法 - 优化
solon-flowFlowEngine:eval(Node startNode) 处理,改为从 root 开始恢复到 start 再开始执行(恢复过程中,不会执行任务) - 调整
solon-flow移除 Activity 节点预览属性 "$imode" 和 "$omode" - 调整
solon-flowActivity 节点流出改为自由模式(可以多线流出:无条件直接流出,有条件检测后流出) - 调整
solon-flowNode.getMeta 方法返回改为 Object 类型(并新增 getMetaAs) - 调整
solon-flowEvaluation:runTest 改为 runCondition - 调整
solon-flowFlowContext:incrAdd,incrGet 标为弃用(上下文数据为型只能由输入侧决定) - 调整
solon-flowCondition 更名为 ConditionDesc - 调整
solon-flowTask 更名为 ConditionDesc - 调整
solon-flowXxxDecl 命名风格改为 XxxSpec - 调整
solon-flowGraphDecl.parseByXxx 命名风格改为 GraphSpec.fromXxx - 调整
solon-flowGraph.parseByXxx 命名风格改为 Graph.fromXxx
兼容变化对照表:
| 旧名称 | 新名称 | 说明 |
|---|---|---|
GraphDecl |
GraphSpec |
图定义 |
GraphDecl.parseByXxx |
GraphSpec.fromXxx |
图定义加载 |
Graph.parseByXxx |
Graph.fromXxx |
图加载 |
LinkDecl |
LinkSpec |
连接定义 |
NodeDecl |
NodeSpec |
节点定义 |
Condition |
ConditionDesc |
条件描述 |
Task |
TaskDesc |
任务描述(避免与 workflow 的概念冲突) |
FlowStatefulService |
WorkflowService |
工作流服务 |
StatefulTask |
Task |
任务 |
Operation |
TaskAction |
任动工作 |
TaskType |
TaskState |
任务状态 |
FlowStatefulService 到 WorkflowService 的接口变化对照表:
| 旧名称 | 新名称 | 说明 |
|---|---|---|
postOperation(..) |
postTask(..) |
提交任务 |
postOperationIfWaiting(..) |
postTaskIfWaiting(..) |
提交任务 |
evel(..) |
/ | 执行 |
stepForward(..) |
/ | 单步前进 |
stepBack(..) |
/ | 单步后退 |
| / | getState(..) |
获取状态 |
新特性预览:Graph 硬编码方式(及修改能力增强)
//硬编码
Graph graph = Graph.create("demo1", "示例", spec -> {
spec.addStart("start").title("开始").linkAdd("01");
spec.addActivity("n1").task("@AaMetaProcessCom").linkAdd("end");
spec.addEnd("end").title("结束");
});
//修改
Graph graphNew = Graph.copy(graph, spec -> {
spec.getNode("n1").linkRemove("end").linkAdd("n2"); //移掉 n1 连接;改为 n2 连接
spec.addActivity("n2").linkAdd("end");
});新特性预览:FlowContext:lastNodeId (计算的中断与恢复)。参考:https://solon.noear.org/article/1246
flowEngine.eval(graph, context.lastNodeId(), context);
//...(从上一个节点开始执行)
flowEngine.eval(graph, context.lastNodeId(), context);新特性预览:WorkflowService(替代 FlowStatefulService)
WorkflowService workflow = WorkflowService.of(engine, WorkflowDriver.builder()
.stateController(new ActorStateController())
.stateRepository(new InMemoryStateRepository())
.build());
//1. 取出任务
Task task = workflow.getTask(graph, context);
//2. 提交任务
workflow.postTask(task.getNode(), TaskAction.FORWARD, context);