推进工作
推进工作是指调用流程引擎,将工作从当前节点推进至下一个节点。在前面创建工作的示例中,step
方法调用就是推进工作。
根据实际场景需要,引擎提供了两种推进策略——基于任务推进与基于节点推进。
- 传入参数为任务id:适用于可以获取任务信息的场景
- 传入参数为工作id、节点code:适用于已知节点信息的场景
示例
下面以基于节点推进方式给出示例。
java
@Autowired
WorkflowEngine engine;
engine.step(new WorkStepNodeDto(workId, "wf_foo_node", dto, dealMsg, WorkflowConsts.TASK_DEAL_ACTION_PASS));
提示
基于节点推进请使用 WorkStepNodeDto
参数,基于任务推进使用 WorkStepDto
参数。
推进草稿
保存的草稿可以随时推进。假设在同一个方法中实现直接提交与推进草稿,下面是一个简单示例。
java
@Autowired
WorkflowEngine engine;
@Transactional(rollbackFor = Exception.class)
public String add(BizLeaveAddDto dto) {
// 传入taskId,说明工作及任务已经创建。提交时需更新业务数据。
if (StringUtils.isNotEmpty(dto.getTaskId())) {
String workId = updateFormData(dto);
// 推进任务
engine.step(new WorkStepDto(dto.getTaskId(), dto, dto.getDealMsg(), WorkflowConsts.TASK_DEAL_ACTION_PASS));
// 返回workId(此时非必须)
return workId;
} else {
// 保存业务数据
String bizId = addFormData(dto);
// 创建并推进工作
String workId = engine.create(new WorkAddDto(bizId, dto.getTitle(), "wf_leave"));
engine.step(new WorkStepNodeDto(workId, "start", dto, dto.getDealMsg(), WorkflowConsts.TASK_DEAL_ACTION_PASS));
// 返回创建的工作id,以便前端跳转到查看界面
// 业务有需要也可以添加更多返回内容,但必须包含workId字段
return workId;
}
}
提示
上例中使用了两种方式推进工作,然而这并不是必须的。可根据实际需要选择合适的推进方式。
通常创建工作时容易获得工作 id,而办理工作时则是任务 id。