• jbpm4.4 demo3


    package cn.itcast.c_processinstance;
    
    import java.util.List;
    
    import org.jbpm.api.Configuration;
    import org.jbpm.api.ProcessEngine;
    import org.jbpm.api.ProcessInstance;
    import org.jbpm.api.TaskQuery;
    import org.jbpm.api.task.Task;
    import org.junit.Test;
    
    /**
     * 执行流程实例有关的操作
     * 
     * <pre>
     * 	启动流程实例
     * 	查询我的任务列表
     * 	办理任务
     * 	直接向后执行一步
     * </pre>
     * 
     * @author tyg
     * 
     */
    public class ProcessInstanceTest {
    
    	private ProcessEngine processEngine = Configuration.getProcessEngine();
    
    	// 启动流程实例
    	@Test
    	public void testStartProcessInstance() throws Exception {
    		// 使用指定的流程定义启动流程实例(指定名称并且是指定的version)
    		// processEngine.getExecutionService().startProcessInstanceById("helloworld-3");
    
    		// 使用指定key的最新版本的流程定义启动一个流程实例
    		ProcessInstance pi = processEngine.getExecutionService().startProcessInstanceByKey("helloworld");
    		System.out.println("流程实例启动成功,processInstanceId=" + pi.getId() + ", processDefinitionId=" + pi.getProcessDefinitionId());
    	}
    
    	// 查询我的(未完成的)任务列表
    	@Test
    	public void testFindMyTaskList() throws Exception {
    		// 准备
    		 String userId = "员工";
    		// String userId = "部门经理";
    		//String userId = "总经理";
    
    		// // 查询所有
    		// List<Task> list = processEngine.getTaskService().findPersonalTasks(userId);
    
    		// 分页的查询
    		List<Task> list = processEngine.getTaskService()//
    				.createTaskQuery()//
    				// 过滤条件
    				.assignee(userId)// 指定办理人是谁,如果不指定办理人,就会查出所有人的任务
    				// 排序条件
    				// .orderAsc(TaskQuery.PROPERTY_CREATEDATE)
    				// 执行查询得到结果
    				// .count();
    				// .page(firstResult, maxResults)
    				.list();
    		
    
    		// 显示
    		for (Task t : list) {
    			System.out.println("id=" + t.getId()//
    					+ ", name=" + t.getName()// 任务名称
    					+ ", assignee=" + t.getAssignee()// 办理人
    					+ ", createTime=" + t.getCreateTime()// 此任务的创建时间
    					+ ", executionId=" + t.getExecutionId()); // 所属的执行对象的id
    		}
    	}
    
    	// 办理任务
    	@Test
    	public void testCompleteTask() throws Exception {
    		String taskId = "320002";
    		processEngine.getTaskService().completeTask(taskId);
    	}
    
    	// 跳过某个节点,直接向后执行一步   假设:流程到部门经理,此时需要跳转到总经理时,操作:获取部门经理的executionId
    	@Test
    	public void testSignal() throws Exception {
    		String executionId = "helloworld.320001";
    		processEngine.getExecutionService().signalExecutionById(executionId, "to 总经理[审批]");
    	}
    }
    
    <?xml version="1.0" encoding="UTF-8"?>
    
    <process name="hellokey" key="hellokey" xmlns="http://jbpm.org/4.4/jpdl">
       <start g="115,21,48,48" name="start1">
          <transition g="-71,-17" name="to 提交申请" to="提交申请"/>
       </start>
       <end g="115,353,48,48" name="end1"/>
       <task assignee="员工" g="81,101,117,52" name="提交申请">
          <transition g="-78,-15" name="to 部门经理[审批]" to="部门经理[审批]"/>
       </task>
       <task assignee="部门经理" g="81,185,117,52" name="部门经理[审批]">
          <transition g="-95,-17" name="to 总经理[审批]" to="总经理[审批]"/>
       </task>
       <task assignee="总经理" g="81,269,117,52" name="总经理[审批]">
          <transition g="-47,-17" name="to end1" to="end1"/>
       </task>
    </process>
    

     下载demo

  • 相关阅读:
    《深度探索C++对象模型》1
    《C++标准库》
    关于多级分类的封装
    git常用命令
    使用BigDecimal进行精确运算
    关于强制装换
    page分页
    pageContext.request.contextPath 和 request.getContextPath()
    springMVC + mybatis 搜索 分页等
    mybatis 动态sql
  • 原文地址:https://www.cnblogs.com/a757956132/p/4774915.html
Copyright © 2020-2023  润新知