jbpm--(六)jpdl流程定义语言
1. state节点
<?xml version="1.0" encoding="UTF-8"?> <process key="state" name="state" xmlns="http://jbpm.org/4.4/jpdl"> <start g="233,6,48,48" name="start1"> <transition g="-51,-18" name="鎻愪氦鍒癆" to="鑺傜偣A"/> </start> <end g="234,359,48,48" name="end1"/> <state g="217,96,103,52" name="鑺傜偣A"> <transition g="-70,-25" name="鎻愪氦鍒癇" to="鑺傜偣B"/> </state> <state g="219,177,113,52" name="鑺傜偣B"> <transition g="-70,-25" name="鎻愪氦鍒癈" to="鑺傜偣C"/> </state> <state g="231,266,92,52" name="鑺傜偣C"> <transition g="-62,-25" name="閫氳繃" to="end1"/> </state> </process>
package com.tab.node.state; import org.jbpm.api.ProcessInstance; import com.tgb.video.JbpmTestCase; import com.tgb.video.JbpmUtil; public class TestState extends JbpmTestCase implements JbpmUtil { /** * 部署流程 */ @Override public void deploy() { super.startUp(); repositoryService.createDeployment().addResourceFromClasspath("com/tab/node/state/state.jpdl.xml").deploy(); } /** * 创建流程实例 */ @Override public void createInstance() { super.startUp(); ProcessInstance processInstance = executionService.startProcessInstanceByKey("state"); print("流程实例ID" ,processInstance.getId()); } /** * 根据流程实例id获取当前活动节点名称 */ @Override public void getCurrectActivity() { super.startUp(); String name = executionService.createProcessInstanceQuery().processInstanceId("state.140001").uniqueResult().findActiveActivityNames().toString(); print("流程当前节点",name); } @Override public void getTask() { // TODO Auto-generated method stub } /** * 注意 * 状态节点前进流转,和任务不同 */ @Override public void completeTask() { super.startUp(); //taskService.completeTask(""); executionService.signalExecutionById("state.140001"); } }
2.task节点
参考前面的文章
3.任务分配的几种方式
Assignee
AssignmentHandler
Swimlanes
Candidate-groups
assignment-handler分配任务
package com.tgb.node.task.handler; import org.jbpm.api.model.OpenExecution; import org.jbpm.api.task.Assignable; import org.jbpm.api.task.AssignmentHandler; public class AssignTask implements AssignmentHandler { /** * */ private static final long serialVersionUID = 1L; @Override public void assign(Assignable assignable, OpenExecution execution) throws Exception { assignable.setAssignee("userA"); } }
package com.tgb.node.task.handler; import org.jbpm.api.model.OpenExecution; import org.jbpm.api.task.Assignable; import org.jbpm.api.task.AssignmentHandler; public class AssignTaskB implements AssignmentHandler { /** * */ private static final long serialVersionUID = 1L; @Override public void assign(Assignable assignable, OpenExecution execution) throws Exception { assignable.setAssignee("userB"); } }
<?xml version="1.0" encoding="UTF-8"?> <process key="task" name="task" xmlns="http://jbpm.org/4.4/jpdl"> <start name="start1" g="243,29,48,48"> <transition name="提交到任务A" to="任务A" g="-63,-11"/> </start> <end name="end1" g="243,393,48,48"/> <task name="任务A" g="224,115,92,52"> <assignment-handler class="com.tgb.node.task.handler.AssignTask"> </assignment-handler> <transition name="提交到任务B" to="任务B" g="-77,-11"/> </task> <task name="任务B" g="220,221,92,52"> <assignment-handler class="com.tgb.node.task.handler.AssignTaskB"> </assignment-handler> <transition name="提交到任务C" to="任务C" g="-83,-14"/> </task> <task name="任务C" g="224,308,92,52"> <transition name="通过" to="end1" g="-62,-25"/> </task> </process>
package com.tgb.node.task.handler; import java.util.List; import org.jbpm.api.ProcessInstance; import org.jbpm.api.task.Task; import com.tgb.video.JbpmTestCase; import com.tgb.video.JbpmUtil; public class TestTask1 extends JbpmTestCase implements JbpmUtil { @Override public void deploy() { super.startUp(); repositoryService.createDeployment().addResourceFromClasspath("com/tgb/node/task/handler/task1.jpdl.xml").deploy(); } @Override public void createInstance() { super.startUp(); ProcessInstance processInstance = executionService.startProcessInstanceByKey("task"); print("流程实例ID",processInstance.getId()); } @Override public void getCurrectActivity() { super.startUp(); String name = executionService.createProcessInstanceQuery().processInstanceId("task.180001").uniqueResult().findActiveActivityNames().toString(); print("当前节点名词:",name); } @Override public void getTask() { super.startUp(); List<Task> tasks = taskService.findPersonalTasks("userB"); print("任务数量",tasks.size()+""); print("任务名词",tasks.get(0).getActivityName()); print("任务ID",tasks.get(0).getId()); } @Override public void completeTask() { super.startUp(); taskService.completeTask("180002"); } }
swimlane分配任务
<?xml version="1.0" encoding="UTF-8"?> <process key="task" name="task" xmlns="http://jbpm.org/4.4/jpdl"> <swimlane assignee="U1" name="mySwim"/> <start g="243,29,48,48" name="start1"> <transition g="-63,-11" name="提交到任务A" to="任务A"/> </start> <end g="242,333,48,48" name="end1"/> <task g="224,115,92,52" name="任务A" swimlane="mySwim"> <transition g="-65,-14" name="提交到任务B" to="任务B"/> </task> <task assignee="U2" g="427,115,92,52" name="任务B"> <transition g="-83,-14" name="提交到任务C" to="任务C"/> </task> <task g="222,207,92,52" name="任务C" swimlane="mySwim"> <transition g="-62,-25" name="通过" to="end1"/> </task> </process>
package com.tgb.node.task.swimlanes; import java.util.List; import org.jbpm.api.ProcessInstance; import org.jbpm.api.task.Task; import com.tgb.video.JbpmTestCase; import com.tgb.video.JbpmUtil; public class TestTask2 extends JbpmTestCase implements JbpmUtil { @Override public void deploy() { super.startUp(); repositoryService.createDeployment().addResourceFromClasspath("com/tgb/node/task/swimlanes/task2.jpdl.xml").deploy(); } @Override public void createInstance() { super.startUp(); ProcessInstance processInstance = executionService.startProcessInstanceByKey("task"); print("流程实例ID",processInstance.getId()); } @Override public void getCurrectActivity() { super.startUp(); String name = executionService.createProcessInstanceQuery().processInstanceId("task.210001").uniqueResult().findActiveActivityNames().toString(); print("当前节点名词:",name); } @Override public void getTask() { super.startUp(); List<Task> tasks = taskService.findPersonalTasks("U1"); print("任务数量",tasks.size()+""); print("任务名词",tasks.get(0).getActivityName()); print("任务ID",tasks.get(0).getId()); } @Override public void completeTask() { super.startUp(); taskService.completeTask("220001"); } }
Candidate-groups
<?xml version="1.0" encoding="UTF-8"?> <process key="task" name="task" xmlns="http://jbpm.org/4.4/jpdl"> <start name="start1" g="243,29,48,48"> <transition name="提交到任务A" to="任务A" g="-63,-11"/> </start> <end name="end1" g="243,393,48,48"/> <task candidate-groups="mgr" name="任务A" g="224,115,92,52"> <transition name="提交到任务B" to="任务B" g="-77,-11"/> </task> <task name="任务B" g="220,221,92,52"> <transition name="提交到任务C" to="任务C" g="-83,-14"/> </task> <task name="任务C" g="224,308,92,52"> <transition name="通过" to="end1" g="-62,-25"/> </task> </process>
package com.tgb.node.task.Candidate; import java.util.List; import org.jbpm.api.ProcessInstance; import org.jbpm.api.task.Task; import com.tgb.video.JbpmTestCase; import com.tgb.video.JbpmUtil; public class TestTask3 extends JbpmTestCase implements JbpmUtil { @Override public void deploy() { super.startUp(); String group = identityService.createGroup("mgr"); identityService.createUser("a1", "tom", "uu"); identityService.createUser("a2", "tom2", "uu2"); identityService.createMembership("a1", group); identityService.createMembership("a2", group); repositoryService.createDeployment().addResourceFromClasspath("com/tgb/node/task/Candidate/task3.jpdl.xml").deploy(); } @Override public void createInstance() { super.startUp(); ProcessInstance processInstance = executionService.startProcessInstanceByKey("task"); print("流程实例ID",processInstance.getId()); } @Override public void getCurrectActivity() { super.startUp(); String name = executionService.createProcessInstanceQuery().processInstanceId("task.480001").uniqueResult().findActiveActivityNames().toString(); print("当前节点名词:",name); } @Override public void getTask() { super.startUp(); //把任务分配给a1后,只有a1用户可见,其他组员不可见任务 taskService.takeTask("480002", "a1"); //任务在分配之前任何组员使用此获取任务获取不到,只能使用taskService.findGroupTasks("a1");获取未分配的组任务 List<Task> tasks = taskService.findPersonalTasks("a1"); print("任务数量",tasks.size()); print("任务名词",tasks.get(0).getActivityName()); print("任务ID",tasks.get(0).getId()); } //没有分配给组员之前,使用此方法任何组员都可以看到任务 public void getGroupTask(){ super.startUp(); List<Task> tasks = taskService.findGroupTasks("a1"); print("任务数量",tasks.size()); print("任务名词",tasks.get(0).getActivityName()); print("任务ID",tasks.get(0).getId()); } @Override public void completeTask() { super.startUp(); taskService.completeTask("390001"); } }
2. form表单的使用
<?xml version="1.0" encoding="UTF-8"?> <process key="task" name="task" xmlns="http://jbpm.org/4.4/jpdl"> <swimlane assignee="U1" name="mySwim"/> <start g="243,29,48,48" name="start1"> <transition g="-63,-11" name="提交到任务A" to="任务A"/> </start> <end g="242,333,48,48" name="end1"/> <task form="localhost:8080/myApp/index.jsp" assignee="f1" g="224,115,92,52" name="任务A" > <transition g="-65,-14" name="提交到任务B" to="任务B"/> </task> <task form="localhost:8080/myApp/indexB.jsp" assignee="f2" g="427,115,92,52" name="任务B"> <transition g="-83,-14" name="提交到任务C" to="任务C"/> </task> <task g="222,207,92,52" name="任务C" > <transition g="-62,-25" name="通过" to="end1"/> </task> </process>
package com.tgb.node.task.form; import java.util.List; import org.jbpm.api.ProcessInstance; import org.jbpm.api.task.Task; import com.tgb.video.JbpmTestCase; import com.tgb.video.JbpmUtil; public class TestTask4 extends JbpmTestCase implements JbpmUtil { @Override public void deploy() { super.startUp(); repositoryService.createDeployment().addResourceFromClasspath("com/tgb/node/task/form/task4.jpdl.xml").deploy(); } @Override public void createInstance() { super.startUp(); ProcessInstance processInstance = executionService.startProcessInstanceByKey("task"); print("流程实例ID",processInstance.getId()); } @Override public void getCurrectActivity() { super.startUp(); String name = executionService.createProcessInstanceQuery().processInstanceId("task.500001").uniqueResult().findActiveActivityNames().toString(); print("当前节点名词:",name); } @Override public void getTask() { super.startUp(); List<Task> tasks = taskService.findPersonalTasks("f2"); print("任务数量",tasks.size()); print("任务名词",tasks.get(0).getActivityName()); print("任务ID",tasks.get(0).getId()); print("对应表单",tasks.get(0).getFormResourceName()); } @Override public void completeTask() { super.startUp(); taskService.completeTask("500002"); } }
浙公网安备 33010602011771号