转自:http://zhc3191012.blog.163.com/blog/static/1855533762013823113116720/
用户任务分配办理人:
1.用户任务可以直接分配给一个用户,这可以通过humanPerformer元素定义。 humanPerformer定义需要一个 resourceAssignmentExpression
来实际定义用户
eg: <userTask id='theTask' name='important task' >
<humanPerformer>
<resourceAssignmentExpression>
<formalExpression>kermit</formalExpression>
</resourceAssignmentExpression>
</humanPerformer>
</userTask>
任务只有一个用户的时候在activiti中,用户叫做执行者。 拥有执行者的task不会出现在其他人的任务列表中, 只能出现执行者的个人任务列表中。
直接分配给用户的任务可以通过TaskService像下面这样获取:
List<Task> tasks = taskService.createTaskQuery().taskAssignee("kermit").list();
2.任务也可以加入到人员的候选人员列表中。需要使用potentialOwner元素。 用法和humanPerformer元素类似,注意它需要指定表达式中的每个
项目是人员还是群组 (引擎猜不出来)。
eg:
<userTask id='theTask' name='important task' >
<potentialOwner>
<resourceAssignmentExpression>
<formalExpression>user(kermit), group(management)</formalExpression>
</resourceAssignmentExpression>
</potentialOwner>
</userTask>
分配给候选用户列表或组的任务可以通过TaskService像下面这样获取:
List<Task> tasks = taskService.createTaskQuery().taskCandidateUser("kermit").list();
//List<Task> tasks = taskService.createTaskQuery().taskCandidateGroup("kermit").list();
此时对应办理人必须拾取任务,方能办理成功,任务被其中一个人拾取后,其他人不可见此任务
任务拾取方法: processEngine.getTaskService().claim(taskId, userId);
ps: 如果没有显示指定设置的是用户还是群组, 引擎会默认当做群组处理。所以下面的设置与使用group(accountancy)效果一样。
<formalExpression>accountancy</formalExpression>
3.Activiti对任务分配的扩展
当分配不复杂时,用户和组的设置非常麻烦。 为避免复杂性,可以使用用户任务的自定义扩展。
assignee属性:这个自定义扩展可以直接把用户任务分配给指定用户。
<userTask id="theTask" name="my task" activiti:assignee="kermit" />
它和使用上面定义的humanPerformer 效果完全一样。
candidateUsers属性:这个自定义扩展可以为任务设置候选人。
<userTask id="theTask" name="my task" activiti:candidateUsers="kermit, gonzo" />
它和使用上面定义的potentialOwner 效果完全一样。 注意它不需要像使用potentialOwner通过user(kermit)声明, 因为这个属性只能用于人员。
candidateGroups属性:这个自定义扩展可以为任务设置候选组。
<userTask id="theTask" name="my task" activiti:candidateGroups="management, accountancy" />
ps:这三个属性都可以通过流程变量动态指定值,多值需要用逗号隔开
4. 如果上面的方式还不满足需求,还可以使用创建事件的任务监听器 来实现自定义的分配逻辑:
<userTask id="task1" name="My task" >
<extensionElements>
<activiti:taskListener event="create" class="org.activiti.MyAssignmentHandler" />
</extensionElements>
</userTask>
DelegateTask会传递给TaskListener的实现, 通过它可以设置执行人,候选人和候选组:
public class MyAssignmentHandler implements TaskListener {
public void notify(DelegateTask delegateTask) {
// Execute custom identity lookups here
// and then for example call following methods:
delegateTask.setAssignee("kermit");
delegateTask.addCandidateUser("fozzie");
delegateTask.addCandidateGroup("management");
...
}
}
5. 使用spring时,可以使用表达式 把任务监听器设置为spring代理的bean, 让这个监听器监听任务的创建事件。
下面的例子中,执行者会通过调用ldapService这个spring bean的findManagerOfEmployee方法获得。
流程变量emp会作为参数传递给bean。
<userTask id="task" name="My Task" activiti:assignee="${ldapService.findManagerForEmployee(emp)}"/>
也可以用来设置候选人和候选组:
<userTask id="task" name="My Task" activiti:candidateUsers="${ldapService.findAllSales()}"/>
ps:注意方法返回类型只能为String或Collection<String> (对应候选人和候选组):
public class FakeLdapService {
public String findManagerForEmployee(String employee) {
return "Kermit The Frog";
}
public List<String> findAllSales() {
return Arrays.asList("kermit", "gonzo", "fozzie");
}
}
相关推荐
手册会通过实例讲解如何创建一个简单的请假申请流程,涉及任务分配、审批、会签等多个环节,以及如何使用Activiti的API和事件机制实现流程的控制和监控。 通过《Activiti5用户手册》,新手不仅可以理解Activiti的...
Activiti的Actuator模块提供了一系列端点,允许管理员监控任务分配情况,包括查看哪些组当前有未完成的任务,以及任务在组内流转的历史记录。 9. **组任务的权限控制** Activiti支持基于角色的权限控制,可以...
2. 任务管理: Activiti 支持任务分配、接收、完成,以及任务查询和操作。 3. 信号与消息:流程中的同步和异步交互可以通过信号和消息实现,以处理并发和分支逻辑。 五、Activiti API 与服务 1. 运行时服务:如查询...
总结,Activiti 中的个人任务分配是一个关键的功能,它涉及到任务的指定、领取、完成以及与业务逻辑的结合。理解并熟练掌握这些概念和操作,对于高效地使用Activiti构建业务流程管理系统至关重要。在实际应用中,...
3. **任务管理**:Activiti 支持任务分配和管理工作。任务可以自动分配给指定的角色或用户,也可以通过用户界面手动领取。任务完成后,用户可以提交任务并触发流程的下一个步骤。 4. **表单集成**:Activiti 提供了...
- 权限模型:理解Activiti的角色、权限和任务分配机制,确保流程的安全性。 11. **扩展与插件** - 自定义行为:如何编写自定义的用户任务行为、服务任务行为等,扩展Activiti的功能。 - 事件处理器:了解如何...
#### 一、多实例用户任务的基本概念与配置 Activiti是一个开源的工作流引擎,它提供了一种灵活的方式来定义业务流程,并且能够支持复杂的业务逻辑处理。其中,多实例任务是Activiti的一个重要特性,它可以用来实现...
5. **领取任务**:分配任务给指定用户或角色。 6. **完成任务**:执行任务并推进流程至下一节点。 7. **查询**:包括流程部署、定义、实例以及历史记录的查询功能。 #### 六、Activiti5自带组件及其配置 - **...
3. **任务管理**:详细阐述了任务的概念,包括任务分配、任务完成、任务查询等功能,以及如何通过任务监听器和任务变量来扩展任务行为。 4. **表单处理**:解释了如何集成表单与Activiti,实现数据输入和展示,以及...
3. **启动和管理流程实例**:用户可以启动新的流程实例,引擎会自动处理流程中的任务分配和流转。同时,管理员可以监控所有流程实例的状态,包括当前的任务、历史记录和异常情况。 4. **任务管理**:Activiti 提供...
2. **任务分配**:Activiti5的工作流引擎能够智能分配任务给相应的人员,自动触发下一步操作,减少人工干预,提升工作效率。 3. **流程监控**:提供实时的流程监控功能,管理者可以随时查看流程状态,了解审批进度...
流程定义可以包含开始事件、结束事件、用户任务、服务任务等多种元素。接着,通过API启动流程实例,分配任务给相应用户,用户完成任务后,流程会自动流转到下一个环节。 三、Activiti5学习笔记 这本学习笔记可能...
6. ** 任务与工作流实例管理 **:介绍如何启动流程实例,跟踪任务的执行状态,以及如何通过任务服务接口进行任务分配、完成任务等操作。 7. ** 表单与表单引擎 **:Activiti 支持与表单的集成,可以自定义表单并与...
任务管理则包括任务分配、委托、评论和附件等功能。 4. **事件和监听器**:Activiti 中的事件机制允许在特定流程节点触发自定义行为。例如,当流程实例创建或结束时,可以定义监听器来执行额外的业务逻辑。这增强了...
Activiti 会跟踪当前的任务状态,并将其分配给合适的执行者。执行者可以是系统中的一个角色或具体用户,他们通过任务服务来接收和完成任务。在实例运行过程中, Activiti 提供了丰富的API和工具,允许开发者插入...
例如,`<userTask>`元素表示一个用户任务,`id`是唯一标识,`name`是任务的显示名称,`activiti:assignee`则用来指定任务的执行者,通常用#{键}来表示,这里的键对应的是流程变量。如果节点是一个决策点,如判断,...
6. **任务管理**:Activiti 支持任务分配和管理,包括任务创建、分配、完成、委托等操作。手册会涵盖如何与任务交互以及如何使用查询API查找和管理任务。 7. **表单与数据**:Activiti 可以集成表单以收集或展示...
- `TaskService`:操作任务,如分配、完成、委托和查询任务。 - `FormService`:处理表单相关操作,如提交表单数据和获取表单模型。 - `HistoryService`:记录流程的历史信息,用于审计和分析。 - `Identity...
- **功能**:提供程序内新流程的启动、任务分配、查看和声明等操作。 - **访问控制**:管理员用户名和密码可用来登录Activiti UI应用程序。 #### 10. Activiti jar文件及依赖项 - **独立运行**:Activiti可以嵌入到...
2. 表单支持:Activiti 可以集成表单,使用户在执行任务时填写相关数据。 3. 用户界面:提供了一个基于 Web 的管理界面,方便查看和管理流程实例。 4. 运行时服务:提供了丰富的运行时服务,如启动流程实例、查询...