阅读 3

说说在 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 对象。所以,上述封装的代码适用于一般场景。

关注下面的标签,发现更多相似文章
评论