`

activiti5用户任务分配

 
阅读更多

转自: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 学习笔记12:分配个人任务

    总结,Activiti 中的个人任务分配是一个关键的功能,它涉及到任务的指定、领取、完成以及与业务逻辑的结合。理解并熟练掌握这些概念和操作,对于高效地使用Activiti构建业务流程管理系统至关重要。在实际应用中,...

    activiti5用户手册

    手册会通过实例讲解如何创建一个简单的请假申请流程,涉及任务分配、审批、会签等多个环节,以及如何使用Activiti的API和事件机制实现流程的控制和监控。 通过《Activiti5用户手册》,新手不仅可以理解Activiti的...

    Activiti 学习笔记13:分配组任务

    Activiti的Actuator模块提供了一系列端点,允许管理员监控任务分配情况,包括查看哪些组当前有未完成的任务,以及任务在组内流转的历史记录。 9. **组任务的权限控制** Activiti支持基于角色的权限控制,可以...

    Activiti5 用户手册 中文版

    2. 任务管理: Activiti 支持任务分配、接收、完成,以及任务查询和操作。 3. 信号与消息:流程中的同步和异步交互可以通过信号和消息实现,以处理并发和分支逻辑。 五、Activiti API 与服务 1. 运行时服务:如查询...

    Activiti5.4 用户指南-中文版

    3. **任务管理**:Activiti 支持任务分配和管理工作。任务可以自动分配给指定的角色或用户,也可以通过用户界面手动领取。任务完成后,用户可以提交任务并触发流程的下一个步骤。 4. **表单集成**:Activiti 提供了...

    Activiti 5_13 用户手册

    - 权限模型:理解Activiti的角色、权限和任务分配机制,确保流程的安全性。 11. **扩展与插件** - 自定义行为:如何编写自定义的用户任务行为、服务任务行为等,扩展Activiti的功能。 - 事件处理器:了解如何...

    activiti学习-使用activiti多实例任务实现会签

    #### 一、多实例用户任务的基本概念与配置 Activiti是一个开源的工作流引擎,它提供了一种灵活的方式来定义业务流程,并且能够支持复杂的业务逻辑处理。其中,多实例任务是Activiti的一个重要特性,它可以用来实现...

    Activiti5学习笔记

    5. **领取任务**:分配任务给指定用户或角色。 6. **完成任务**:执行任务并推进流程至下一节点。 7. **查询**:包括流程部署、定义、实例以及历史记录的查询功能。 #### 六、Activiti5自带组件及其配置 - **...

    Activiti 5.16 用户手册

    3. **任务管理**:详细阐述了任务的概念,包括任务分配、任务完成、任务查询等功能,以及如何通过任务监听器和任务变量来扩展任务行为。 4. **表单处理**:解释了如何集成表单与Activiti,实现数据输入和展示,以及...

    activiti5.21用户手册

    3. **启动和管理流程实例**:用户可以启动新的流程实例,引擎会自动处理流程中的任务分配和流转。同时,管理员可以监控所有流程实例的状态,包括当前的任务、历史记录和异常情况。 4. **任务管理**:Activiti 提供...

    基于Activiti5的办公系统

    2. **任务分配**:Activiti5的工作流引擎能够智能分配任务给相应的人员,自动触发下一步操作,减少人工干预,提升工作效率。 3. **流程监控**:提供实时的流程监控功能,管理者可以随时查看流程状态,了解审批进度...

    工作流Activiti5学习总结

    流程定义可以包含开始事件、结束事件、用户任务、服务任务等多种元素。接着,通过API启动流程实例,分配任务给相应用户,用户完成任务后,流程会自动流转到下一个环节。 三、Activiti5学习笔记 这本学习笔记可能...

    Activiti 5.14 用户手册

    6. ** 任务与工作流实例管理 **:介绍如何启动流程实例,跟踪任务的执行状态,以及如何通过任务服务接口进行任务分配、完成任务等操作。 7. ** 表单与表单引擎 **:Activiti 支持与表单的集成,可以自定义表单并与...

    Activiti 5.13 用户手册(中文版)

    任务管理则包括任务分配、委托、评论和附件等功能。 4. **事件和监听器**:Activiti 中的事件机制允许在特定流程节点触发自定义行为。例如,当流程实例创建或结束时,可以定义监听器来执行额外的业务逻辑。这增强了...

    工作流例子-activiti5

    Activiti 会跟踪当前的任务状态,并将其分配给合适的执行者。执行者可以是系统中的一个角色或具体用户,他们通过任务服务来接收和完成任务。在实例运行过程中, Activiti 提供了丰富的API和工具,允许开发者插入...

    Activiti5开发指南

    例如,`&lt;userTask&gt;`元素表示一个用户任务,`id`是唯一标识,`name`是任务的显示名称,`activiti:assignee`则用来指定任务的执行者,通常用#{键}来表示,这里的键对应的是流程变量。如果节点是一个决策点,如判断,...

    activiti6用户手册 英文

    6. **任务管理**:Activiti 支持任务分配和管理,包括任务创建、分配、完成、委托等操作。手册会涵盖如何与任务交互以及如何使用查询API查找和管理任务。 7. **表单与数据**:Activiti 可以集成表单以收集或展示...

    activiti5.X超详细使用步骤总结+Activiti5.4 用户指南(中文版) .pdf

    - `TaskService`:操作任务,如分配、完成、委托和查询任务。 - `FormService`:处理表单相关操作,如提交表单数据和获取表单模型。 - `HistoryService`:记录流程的历史信息,用于审计和分析。 - `Identity...

    Activiti用户指南.pdf2017-12-21最新中文翻译版

    - **功能**:提供程序内新流程的启动、任务分配、查看和声明等操作。 - **访问控制**:管理员用户名和密码可用来登录Activiti UI应用程序。 #### 10. Activiti jar文件及依赖项 - **独立运行**:Activiti可以嵌入到...

    Activiti6.x中文用户指南 html

    5. **任务管理**:Activiti6.x提供了强大的任务管理功能,包括任务分配、任务查询、任务处理等。这部分将解释如何与任务交互,包括任务的接收、完成、委托以及任务监听器的使用。 6. **流程实例管理**:用户可以...

Global site tag (gtag.js) - Google Analytics