v3.8.1 solon-flow-workflow 更新与兼容说明
2026年1月13日 下午7:09:53
3.8.1 更新与兼容说明
- 添加
solon-flowFlowContext:toJson,fromJson 序列化方法(方便持久化和恢复) - 添加
solon-flowNodeTrace 类 - 添加
solon-flowNodeSpec.then 方法 - 添加
solon-flowFlowEngine.then 方法 - 添加
solon-flowFlowContext.with 方法(强调方法域内的变量) - 添加
solon-flowFlowContext.containsKey 方法 - 添加
solon-flowFlowContext.isStopped 方法(用于外部检测) - 添加
solon-flowNamedTaskComponent 接口,方便智能体开发 - 添加
solon-flow多图多引擎状态记录与序列化支持 - 添加
solon-flow-workflowfindNextTasks 替代 getTasks(后者标为弃用) - 添加
solon-flow-workflowclaimTask、findTask 替代 getTask(后者标为弃用,逻辑转为新的 claimTask) - 添加
solon-flow-workflowWorkflowIntent 替代之前的临时变量(扩展更方便) - 优化
solon-flowFlowContext 接口设计,并增加持久化辅助方法 - 优化
solon-flowFlowContext.eventBus 内部实现改为字段模式 - 优化
solon-flowstart 类型节点改为自由流出像 activity 一样(只是没有任务) - 优化
solon-flowloop 类型节点改为自由流出像 activity 一样 - 优化
solon-flow引擎的 onNodeEnd 执行时机(改为任务执行之后,连接流出之前) - 优化
solon-flow引擎的 onNodeStart 执行时机(改为任务执行之前,连接流入之后) - 优化
solon-flow引擎的 reverting 处理(支持跨引擎多图场景) - 优化
solon-flowNode,Link toString 处理(加 whenComponent) - 优化
solon-flowFlowExchanger.runGraph 如果子图没有结束,则当前分支中断 - 调整
solon-flow移除 FlowContext:incrAdd,incrGet 弃用预览接口 - 调整
solon-flowFlowContext:executor 转移到 FlowDriver - 调整
solon-flowFlowInterceptor:doIntercept 更名为 interceptFlow,并标为 default(扩展时语义清晰,且不需要强制实现) - 调整
solon-flowNodeTrace 更名为 NodeRecord,并增加 FlowTrace 类。支持跨图多引擎场景 - 调整
solon-flow“执行深度”改为“执行步数”(更符合实际需求) - 调整
solon-flow-workflowAction Jump 规范,目标节点设为 WAITING(之前为 COMPLETED) - 调整
solon-flow-workflowgetTask(由新名 claimTask 替代) 没有权限时返回 null(之前返回一个未知状态的任务,容易误解) - 调整
solon-flow-workflowWorkflowService 改为 WorkflowExecutor,缩小概念范围(前者仍可用但标为弃用) - 修复
solon-flowFlowContext 跨多引擎中转时 exchanger 的冲突问题 - 修复
solon-flow跨图单步执行时,步数传导会失效的问题 - 修复
solon-flowActorStateController 没有对应的元信息会失效的问题 - 修复
solon-flow-workflow跨图单步执行时,步数传导会失效的问题
兼容变化对照表:
| 旧名称 | 新名称 | 备注 |
|---|---|---|
| WorkflowService | WorkflowExecutor | 缩小概念范围(前者标为弃用) |
| FlowInterceptor:doIntercept | interceptFlow | 扩展时语义清晰(方便与 ToolInterceptor 合到一起) |
| FlowContext:executor | FlowDriver:getExecutor | 上下文不适合配置线程池 |
| FlowContext:incrAdd,incrGet | / | 移除 |
| NodeTrace | NodeRecord | 支持跨图多引擎场景 |
| / | FlowTrace | 支持跨图多引擎场景 |
WorkflowExecutor (更清晰的)接口对照表:
| WorkflowService 旧接口 | WorkflowExecutor 新接口 | 备注 |
|---|---|---|
| getTask | claimTask | 认领任务:权限匹配 + 状态激活 |
| getTask | findTask | 查询任务:查找下一个待处理节点,或者结束节点 |
| getTask | / | 原来的功能混乱,新的拆解成 claimTask 和 findTask |
| getTasks | findNextTasks | 查询下一步任务列表 |
| getState | getState | 获取状态 |
| postTask | submitTask | 提交任务 |
新特性预览:上下文序列化与持久化
//恢复的上下文
FlowContext context = FlowContext.fromJson(json);
//新上下文
FlowContext context = FlowContext.of();
//从恢复上下文开始持行
flowEngine.eval(graph, context);
//转为 json(方便持久化)
json = context.toJson();
新特性预览:WorkflowExecutor
// 1. 创建执行器
WorkflowExecutor workflow = WorkflowExecutor.of(engine, controller, repository);
// 2. 认领任务(检查是否有可操作的待处理任务)
Task current = workflow.claimTask(graph, context);
if (current != null) {
// 3. 提交任务处理
workflow.submitTask(current, TaskAction.FORWARD, context);
}
// 4. 查找后续可能任务(下一步)
Collection<Task> nextTasks = workflow.findNextTasks(graph, context);
3.8.0 更新与兼容说明
- 新增
solon-flow-workflow插件(替代 FlowStatefulService 接口)
兼容变化对照表:
| 旧名称 | 新名称 | 说明 |
|---|---|---|
GraphDecl | GraphSpec | 图定义 |
LinkDecl | LinkSpec | 连接定义 |
NodeDecl | NodeSpec | 节点定义 |
Condition | ConditionDesc | 条件描述 |
Task | TaskDesc | 任务描述(可避免与 workflow 的概念冲突) |
FlowStatefulService | WorkflowService | 工作流服务 |
StatefulTask | Task | 任务 |
Operation | TaskAction | 任动工作 |
TaskType | TaskState | 任务状态 |
Evaluation.runTest(..) | Evaluation.runCondition(..) | 运行条件 |
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);