说说在 jBPM 中,如何获取某个流程节点的 Task 对象

可以利用 taskService 的 createTaskQuery() 方法,来获取某个流程节点的 Task 对象。

/**
 * 查找任务
 *
 * @param executionId  Execution 实例 ID
 * @param activityName 活动名称
 * @return 任务
 */
public Task findTask(String executionId, String activityName) {

    try {
        List<Task> tasks = taskService.createTaskQuery().activityName(activityName)
                .executionId(executionId).orderDesc("createTime").list();
        if (tasks == null || tasks.isEmpty()) {
            return null;
        }

        if (tasks.size() > 1) {
            logger.warn("activityName" +
                    ":" + activityName + " 任务数大于 1,取最新创建的第一个任务");
        }
        return tasks.get(0);
    } catch (Exception e) {
        logger.error("查找任务;executionId:" + executionId, e);
        return null;
    }
}

 /**
     * 查找任务
     *
     * @param processInstance 流程实例
     * @param activityName    活动名称
     * @return 任务
     */
    public Task findTask(ProcessInstance processInstance, String activityName) {
        Execution execution = processInstance.findActiveExecutionIn
                (activityName);
        return findTask(execution.getId(), activityName);
}

createTaskQuery() 方法支持链式编程方式,我们在此传入节点名称(activityName)与流程实例 ID(executionId)作为查询条件,并以创建时间作为倒序顺序排列。

orderDesc() 方法还支持 Task 对象的这些字段作为排序条件:name、assignee、createTime、duedate、priority、progress。

除非存在并发执行的流程,否则一个流程实例,在某个流程节点上,至多存在一个 Task 对象。所以,上述封装的代码适用于一般场景。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。