上一节只写了最简单的activiti。本节开始深入一步的学习。
流程定义语言
开始事件
在BPMN 2.0规范里面,一个流程是由一个开始事件开始的。
开始事件里面我目前了解的不多,但这里可以设置流程初始信息,一般用于保存流程发起者。(这里只提有这个属性,在下节会详细说这个的用法)
如下所示:
<startEvent id="startevent1" name="Start" activiti:initiator="applyUserId"/>
任务节点
在此之前先引用一个链接:Activiti流程定义语言
用户任务是用来设置需要由人员完成的工作。 当流程执行到用户任务,会创建一个新任务, 并把这个新任务加入到分配人或群组的任务列表中。当然这个也可以不指定,在上一节我就没有指定,而做了一个demo
任务分配 : 当在实际的业务中,用户任务的办理都需要人的参与。用户任务可以分为两大类。私有任务和公有任务(可接任务)
- 当为私有任务时,不需要签收,就能直接处理完成任务。
- 当为指派任务时,则需要先签收任务,再处理完成任务。签收任务采取先到先得的原则。下面会详细描述
各种状态的任务查询以及和业务对象关联
获得所有任务:
List<Task> taskList = taskService.createTaskQuery().processDefinitionKey("activitiDemo").list();
List<Task> taskList = taskService.createTaskQuery().taskAssignee(userName).list();
List<Task> 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<Task> tasks = taskQuery.list();
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。