2.9任务管理2.9.1 分配任务流程定义时,分配任务有多种方法: 1. 直接分配给成员:assignee="user1" 可以同时分配多人:candidate-users("user1","user2","user3") 2. 分配给组:candidate-groups="it_dept" 分配给多个组:用逗号隔开部门id组列表。 3. 利用任务泳道进行分配: 1.任务泳道分配的特点:一个单子可以有多个人填写,一旦A填写了,别人就不能 填写。而且当A提交的单子被退回的时候还应该有A来继续。 2.泳道定义:<swimlane candidate-groups="it_dept" name="test"/>,也可以为 candidate-users. 3.使用泳道:在task定义时 swimlane="test" 使用泳道,任务分配给it_dept部 门 4.使用任务分配器assignment-handler标签 使用方法:<assignment-handler class = ""> <field name="test"><string value="ttttttt"/></field> </assignment-handler> 在class里面动态分配assignable.setAssignee(test); 通过传参数,设置 test的值。实现动态分配
2.9.2 成员任务列表List<Task> taskList = taskService.findPersonalTasks(username); 2.9.3 组成员任务列表List<Task> taskList = taskService.findGroupTasks(username); 由于任务有转交,加签等功能,所以一个人想要得到自己的任务就包括 组成员任务和 成员任务两部分组成。 2.9.4 执行任务得到任务列表后,如果任务有对应的表单,就先跳到表单,填写,然后执行。表单的绑定:在task标签中使用 form = "xxxx.jsp",执行语句:
taskService.completeTask(taskId,"toFork1",map); taskId 是任务id toFork1 是outcome,即任务的出口 Map 是 传递的任务参数,通过任务就可以得到这些参数: 得到指定的参数值:taskService.getVariable(taskId, "user") 得到所有的参数:taskService.getvariableNames(java.lang.String.taskId); 2.9.5 转交任务taskService.assignTask(taskId,"用户Id"); 2.9.6 任务加签taskService.addTaskParticipatingUser(taskId,"用户Id",Participation.CANDIDATE); 2.9.7 fork join 异步分支<fork g="276,239,48,48" name="fork1"> <transition g="-54,-18" name="to 计划部" to="计划部"/> <transition g="-54,-18" name="to 法务部" to="法务部"/> <transition g="-64,-18" name="to IT规划部" to="IT规划部"/> </fork> Fork join 处理并发的情况,分配给的三个部门当执行完后,都流入到join标签。 Join标签属性: multiplicity="3" multiplicity 的意思是当有几个执行到了join时,流程继续。 2.9.8 decision 决定条件decision中会运行并判断每一个transition 里的判断条件。 当遇到一个嵌套条件是true 或者没有 设置判断条件的转移,那么转移就会被运行。 例子:当天数大于3天,总经理审批 否则 结束 <decision expr="#{day > 3 ? 'to 总经理' : 'to 结束}" g="361,280,48,48" name="exclusive1"> <transition g="-42,-18" name="to end1" to="end1"/> <transition g="-44,-18" name="to task2" to="总经理审核"/> </decision> Decision属性: expr 表达式 必填
2.9.9 Events 事件当一个流程通过这一点时,事件监听器就会被提醒。 用法:在流程的任何地方都可以加入监听 <on event="start"> <event-listener class="org.jbpm.examples.eventlistener.LogListener"> // 参数 <field name="msg"><string value="start on process definition"/></field> </event-listener> 2.9.10 JPDL简 介1. Start state开始节点 流程开始,每个流程定义文件 只能有一个开始节点。 2. Task node任务节点 人工参与,调用processEngine.getTaskService().complete()完 成任务 3.State node状态节点 需要使用execution.signalExcution()触发流程流转 4. Descision Node流程流向判断节点 指定condition条件或者DesisionHandler 5. Fork node分支节点,任务并行处理 6.Join node任务聚合节点 7. End State任务结束节点 可以有多个结束节点 8. Transition控制任务流向 9. Event事件触发 可以在任何节点加事件触发处理
具体参看${JPBM.HOME}/doc/userguide文档 关于JPDL的描述
3数据库表说明(1)JBPM4_DEPLOYMENT、 (2)JBPM4_DEPLOYPROP (3)JBPM4_LOB: |
|