activiti 学习( 二 )

上一节只写了最简单的activiti。本节开始深入一步的学习。

流程定义语言

开始事件

在BPMN 2.0规范里面,一个流程是由一个开始事件开始的。
开始事件里面我目前了解的不多,但这里可以设置流程初始信息,一般用于保存流程发起者。(这里只提有这个属性,在下节会详细说这个的用法)
如下所示:


任务节点

在此之前先引用一个链接:Activiti流程定义语言

用户任务是用来设置需要由人员完成的工作。 当流程执行到用户任务,会创建一个新任务, 并把这个新任务加入到分配人或群组的任务列表中。当然这个也可以不指定,在上一节我就没有指定,而做了一个demo

任务分配 : 当在实际的业务中,用户任务的办理都需要人的参与。用户任务可以分为两大类。私有任务和公有任务(可接任务)

  • 当为私有任务时,不需要签收,就能直接处理完成任务。
  • 当为指派任务时,则需要先签收任务,再处理完成任务。签收任务采取先到先得的原则。下面会详细描述

各种状态的任务查询以及和业务对象关联

获得所有任务:

List taskList = taskService.createTaskQuery().processDefinitionKey("activitiDemo").list();

List taskList = taskService.createTaskQuery().taskAssignee(userName).list();

List taskList = taskService.createTaskQuery().taskCandidateOrAssigned(userId).list();

任务状态目前分为4中状态:未签收、办理中、运行中、已完成。

未签收(Task)

此类任务针对于把Task分配给一个角色时,例如部门领导,因为部门领导角色可以指定多个人所以需要先签收再办理,术语:抢占式

对应的API查询:

/**
 * 获取未签收的任务查询对象
 * @param userId    用户ID
 */
@Transactional(readOnly = true)
public TaskQuery createUnsignedTaskQuery(String userId) {
    TaskQuery taskCandidateUserQuery = 
                        taskService.createTaskQuery().processDefinitionKey(getProcessDefKey()) .taskCandidateUser(userId);
    return taskCandidateUserQuery;
}

注: taskCandidateOrAssigned 既能查询未签收,也能巡查未办理

    // 根据当前人的ID查询
    TaskQuery taskQuery = taskService.createTaskQuery().taskCandidateOrAssigned(userId);
    List tasks = taskQuery.list();

你可能感兴趣的:(工作流,activiti)