Skip to content

推进工作

推进工作是指调用流程引擎,将工作从当前节点推进至下一个节点。在前面创建工作的示例中,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。