在jbpm的流程设计中,存在名为Task的节点,当该流程流转到该节点时,jbpm会在jbpm4_task表中创建相应的task实例。在task节点中存在两种属性,分别为assignee和candidate-user,可以为该task对象定义不同的参与者,下面是对两种属性的总结
关于assignee:
用于定义当前task的参与者。当某流程流转到该task对象时,该task对象便会与assignee建立关联,在代码中使用类似
taskService.findPersonalTasks(assignee)
的代码便可以获得当前用户所有的task列表,这样就可以很方便的查询到当前用户下所有的代办任务的
taskService.findGroupTasks(username)
列表。当用户执行了
taskService.completeTask(taskId , outcome)
之后,Jbpm会将该task对象从数据库中删除,这样就意味着该task的生命周期结束了。
关于candidate-user:
这个参数更类似于为某个组的成员分配的任务。candidate-user参数要求值的格式是多个字符串,中间以逗号分隔。当某流程流传到该task对象时,jbpm同样会创建一条task的记录,但是与assignee不同的是,它并不是属于某个用户的task,而是属于在candidate-user属性中定义的所有参与者共同的任务。因此,在代码中需要使用
taskService.findGroupTasks(username)
来查询到该task对象。而当其中任何一个用户执行了
taskService.completeTask(taskId , outcome)
之后,jbpm都会将该task对象删除,这就意味着其他用户再也查询不到该task对象了。
使用candidate-user与folk(join)节点的区别:
两种方式都是将该task对象分配给多个参与者,但两者有很大的不同。
folk(join)的特点:1、流程通过folk流转到多个节点,当所有的节点都完成该task时,流程才会继续流转。
2、jbpm会为每一个folk下面的节点创建一个task对象。
candidate-user的特点:1、流程流转到该task节点时,jbpm只会创建一个task对象.
2、其中任何一个用户完成了该任务,流程就会继续向下流转,而且其他用户也无法再查询 该task对象。
最后:当jbpm与spring进行集成后,就可以很方便的调用spring中管理的类以及类中的方法。
使用方法:#{userService.findUserNames()},其中userService为spring管理的类。