博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[转]activiti5用户任务分配
阅读量:4683 次
发布时间:2019-06-09

本文共 2399 字,大约阅读时间需要 7 分钟。

用户任务分配办理人:

1.用户任务可以直接分配给一个用户,这可以通过humanPerformer元素定义。 humanPerformer定义需要一个 resourceAssignmentExpression
来实际定义用户
eg:

kermit

 

   任务只有一个用户的时候在activiti中,用户叫做执行者。 拥有执行者的task不会出现在其他人的任务列表中, 只能出现执行者的个人任务列表中。

   直接分配给用户的任务可以通过TaskService像下面这样获取:

         List<Task> tasks = taskService.createTaskQuery().taskAssignee("kermit").list();

2.任务也可以加入到人员的候选人员列表中。需要使用potentialOwner元素。 用法和humanPerformer元素类似,注意它需要指定表达式中的每个

项目是人员还是群组 (引擎猜不出来)。
eg:
 

user(kermit), group(management)

 

  分配给候选用户列表或组的任务可以通过TaskService像下面这样获取:
       

List
tasks = taskService.createTaskQuery().taskCandidateUser("kermit").list(); //List
tasks = taskService.createTaskQuery().taskCandidateGroup("kermit").list();

 此时对应办理人必须拾取任务,方能办理成功,任务被其中一个人拾取后,其他人不可见此任务

  任务拾取方法:  

processEngine.getTaskService().claim(taskId, userId);

  ps: 如果没有显示指定设置的是用户还是群组, 引擎会默认当做群组处理。所以下面的设置与使用group(accountancy)效果一样。

  

accountancy

 

3.Activiti对任务分配的扩展

当分配不复杂时,用户和组的设置非常麻烦。 为避免复杂性,可以使用用户任务的自定义扩展。

    assignee属性:这个自定义扩展可以直接把用户任务分配给指定用户。

  

 

    它和使用上面定义的humanPerformer 效果完全一样。

    candidateUsers属性:这个自定义扩展可以为任务设置候选人。  

 

    它和使用上面定义的potentialOwner 效果完全一样。 注意它不需要像使用potentialOwner通过user(kermit)声明, 因为这个属性只能用于人员。

    candidateGroups属性:这个自定义扩展可以为任务设置候选组。

 

 

 

 ps:这三个属性都可以通过流程变量动态指定值,多值需要用逗号隔开

 

 
 4. 如果上面的方式还不满足需求,还可以使用创建事件的任务监听器 来实现自定义的分配逻辑:

 

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。

也可以用来设置候选人和候选组:

ps:注意方法返回类型只能为String或Collection<String> (对应候选人和候选组):

public class FakeLdapService {  public String findManagerForEmployee(String employee) {    return "Kermit The Frog";  }  public List
findAllSales() { return Arrays.asList("kermit", "gonzo", "fozzie"); }}

 

转载于:https://www.cnblogs.com/firebata/p/4689436.html

你可能感兴趣的文章
64款工具,总有合适您的那款
查看>>
我的第一篇博客
查看>>
大数据学习线路整理
查看>>
【C++算法与数据结构学习笔记------单链表实现多项式】
查看>>
关于ProjectServer定制化项目中心页面
查看>>
使用Collectd + InfluxDB + Grafana进行JMX监控
查看>>
Linux下tar,zip命令详解
查看>>
C#垃圾回收机制
查看>>
31、任务三十一——表单联动
查看>>
[ios] IOS文件操作的两种方式:NSFileManager操作和流操作【转】
查看>>
Jenkins之Linux和window配置区别
查看>>
python之hasattr、getattr和setattr函数
查看>>
maven使用阿里镜像配置文件
查看>>
Java之字符流操作-复制文件
查看>>
iOS开发UI篇—实现一个私人通讯录小应用(二)
查看>>
iOS开发UI篇—UITableview控件使用小结
查看>>
lesson1 预备知识
查看>>
Copy code from eclipse to word, save syntax.
查看>>
arguments.callee的作用及替换方案
查看>>
23 Java学习之RandomAccessFile
查看>>