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");
    }

}

 

posted on 2017-07-15 16:41  code-java  阅读(396)  评论(0)    收藏  举报

导航