浏览 19928 次
该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间:2006-09-20
1. 创建processDefinition.xml流程定义文件,如下: <?xml version="1.0" encoding="UTF-8"?> <process-definition xmlns="urn:jbpm.org:jpdl-3.1" name="webPay"> <swimlane name="PooledActors"> <assignment class="com.sky.plugin.jbpm.ActorHandel"></assignment> </swimlane> <start-state name="网上支付审批流程"> <transition name="开始" to="财务人员录入"></transition> </start-state> <task-node name="财务人员录入"> <task name="财务人员录入申报数据" swimlane="PooledActors"></task> <transition name="主管会计复核" to="主管会计复核"></transition> </task-node> <task-node name="主管会计复核" signal="last-wait" create-tasks="false"> <task name="主管会计复核" swimlane="PooledActors"></task> <event type="node-enter"> <action name="createInstance" class="com.sky.plugin.jbpm.CreateTaskInstance"> </action> </event> <transition name="复核通过" to="领导审批"></transition> <transition name="复核不通过" to="异常结束"></transition> </task-node> <task-node name="领导审批"> <task name="领导审批" swimlane="PooledActors"></task> <transition name="同意" to="结束"></transition> <transition name="不同意" to="异常结束"></transition> </task-node> <end-state name="结束"></end-state> <end-state name="异常结束"></end-state> </process-definition> task-node"主管会计复核"则是我们需要进行会签的节点。在这个节点我们设置了几个重要的属性:
2. 编写Action代码 import org.jbpm.graph.def.ActionHandler; import org.jbpm.graph.exe.ExecutionContext; import org.jbpm.graph.exe.Token; import org.jbpm.graph.node.TaskNode; import org.jbpm.taskmgmt.def.Task; import org.jbpm.taskmgmt.exe.TaskMgmtInstance; public class CreateTaskInstance implements ActionHandler { private static final long serialVersionUID = 1L; public void execute(ExecutionContext executionContext) throws Exception { Token token = executionContext.getToken(); TaskMgmtInstance tmi = executionContext.getTaskMgmtInstance(); TaskNode taskNode = (TaskNode) executionContext.getNode(); Task task= taskNode.getTask("主管会计复核"); tmi.createTaskInstance(task, token) .setPooledActors(new String[]{"1000"}); tmi.createTaskInstance(task, token) .setPooledActors(new String[]{"1001"}); } } 当然,在实际情况中.setPooledActors(new String[]{"100"})中设置的actor应该是动态指定的,这里为了简单方便就直接写入的固定值。 3.部署运行,OK! 注意:如果在给TaskInstance指定Actor的时候是使用.setActor()方法的话,那么在获取用户任务列表的时候用.findTaskInstances();如果是用.setPooledActors(),则需要使用.findPolledTaskInstance()方法。[list][/list] 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2006-10-11
写得非常好。
我现在遇到一个问题:当请假人写好请假单后转到经理审合。在经理没审合之前请假人可以取消请假单。经理审合后不能取消请假单。我想用FORK-jion来做。当一个分支到达以后怎么样取消另一个分支。 |
|
返回顶楼 | |
发表时间:2006-10-18
mygol,首先谢谢你的鼓励。由于请了婚假,所以现在才回复,见谅!
我现在也遇到跟你同样的问题:当流程已经流传到Node2了,但是Node2的Actors并没有对这个Node2的Tasks进行处理,这个时候,Node1的Actor却想撤销他已经完成的Task;但是如果Node2的Actor比较勤快,已经对Node2的Task处理了,这个时候Node1的Actor就没有办法撤销了。 我把这样的情况叫做“流程回收”,我现在已经有点一些思路,但是不很清晰,如果实现了我会贴出来,也希望发表你的看法! |
|
返回顶楼 | |
发表时间:2006-10-20
jbpm的test里面有个Wfp09DiscriminatorTest可以满足我的需求。但是对于已经完成的Task再想撤销,在node1后面再加个cancelnode吧。如果node2到达join那么取消node1分支令牌
|
|
返回顶楼 | |
发表时间:2006-10-23
mygol,现在研究JBPM的朋友很少,看来我们的项目都需要用到JBPM,在Blog上面留言,交流起来实在有点慢,让人感觉很不爽!可以留下你的MSN或者QQ吗?
我先留下我的: MSN:love4yue4@hotmail.com QQ: 12203151 |
|
返回顶楼 | |
发表时间:2006-11-09
这种方法似乎有问题, 我试了一下, 当多个人会签时,流程只是转向最后一个人决定的方向. 我现在也面临着会签的需求.
|
|
返回顶楼 | |
发表时间:2006-11-22
写的不错!!其实JBPM对授权是很灵活的,我的理解是 在流程设计中将task指定给一堆人(pooled actors),但是任务的执行总是要具体人完成的,在这个角色的人进来以后,可以在task上setActor,这里我注意到jbpm默认的是将相关的swimlane的actor也设置为这个人,在流程中其他再遇到这个swimlane的时候,task的assign就直接将swimlane的复制过去,task的actor自然而然也是这个人了.当然我们也可以直接指定个人完成的任务.
![]() |
|
返回顶楼 | |