jBPM有两种分配任务的模式,推模式和拉模式。
推模式:系统主动分配任务给actorID。推模式只有一个人能参与这个任务。通过actorId指定用户
拉模式:actorId去申请这个任务。拉模式的任务可以是多个人参与的,但是只能有其中的一个人能结束。通过PooledActors指定用户群。
当同时指定了这两个属性的时候,actorId才是真正被指定的参与者。只有这个参与者才能完成这个任务,其他的在PooledActors里面的用户,是无法得到这个任务的,所以也没有办法处理这个任务。
设置用户
推模式:Assignable.setActorID(String actorId);
拉模式:Assignable.setPooledActors(String[] actorIds);
得到用户任务列表
推模式:TaskMgmtSession.findTaskInstances(String actorId)
拉模式:TaskMgmtSesion.findPooledTaskInstances(String actorId) TaskMgmtSession.findPooledTaskInstances(List actorIds)
到今天才真正了解了为什么有些人把pooledActors翻译成候选参与者,因为当有真正的参与者的时候,候选参与者是没有权利查看并完成任务的。
又或者只设置了pooledActors的那个taskInstance称之为共享任务。只要在pooledActors数组里面的用户都可以查看并完成这个任务。所以防止冲突,需要把执行任务的这个候选参与者升格为参与者,即把这个用户设置到actorID里面,如果需要重新把这个任务作为共享任务,只需要把actorId这个属性设置为null.
以上是今天研究用户权限的一些体会。经过这几天的研究,发现jBPM没有想象中的负责,不过还有很多的地方没有没有搞清楚,继续努力......