学习JBPM 工作流引擎 API方法(三)

继续介绍使用JBPM的API中的方法来演示一个完整的工作流程需要到那些的方法。

 创建类ProcessExecution继续来测试方法 

ProcessExecution类

package cn.itcast.jbpm.c_processexecution;

import java.util.List;

import org.jbpm.api.Configuration;
import org.jbpm.api.ExecutionService;
import org.jbpm.api.TaskService;
import org.jbpm.api.task.Task;
import org.junit.Test;

/**
 * 在业务流程执行过程中,常见操作
 * @author Administrator
 *
 */
public class ProcessExecution {

	@Test
	//启动流程
	public void testStartProccess(){
		ExecutionService executionService  =  Configuration.getProcessEngine().getExecutionService();
		//启动流程,使用id启动非常少------通常使用key启动
		executionService.startProcessInstanceByKey("helloworld");
	}
	
	@Test
	//办理任务
	public void testCompleteTask(){
		TaskService taskService  =  Configuration.getProcessEngine().getTaskService();
		//办理任务
		taskService.completeTask("10002");//传入任务id
		
	}
	
	
	@Test
	//查看我的任务
	public void testFindPersonalTask(){
		//条件是ASSIGNEE
		TaskService taskService  =  Configuration.getProcessEngine().getTaskService();
		//部门经理的任务
		List<Task>  list = taskService.createTaskQuery().assignee("部门经理").list();
		
		
		for (Task task : list) {
			System.out.println("任务id:" +task.getId());
			System.out.println("任务名称:" +task.getName());
			System.out.println("任务操作人:" +task.getAssignee());
			System.out.println("任务时间:" +task.getCreateTime().toLocaleString());
		}
	}
	
	
	@Test
	//向后一步
	public void testSignal(){
		//将之前的实例,向后一步
		//向后一步针对流程对象(不考虑当前角色)
		
		//流程实例
		String pid = "helloworld.10001";
		//下一个节点transition的name
		String  nextTransitionNaem = "to 审批(总经理)";
		 
		Configuration.getProcessEngine().getExecutionService().signalExecutionById(pid,nextTransitionNaem);		
		
		
		
	}
	
	 
	
}

 启动部署好的流程

	@Test
	//启动流程
	public void testStartProccess(){
		ExecutionService executionService  =  Configuration.getProcessEngine().getExecutionService();
		//启动流程,使用id启动非常少------通常使用key启动
		executionService.startProcessInstanceByKey("helloworld");
	}

办理流程到当前个人用户的任务流程

	@Test
	//办理任务
	public void testCompleteTask(){
		TaskService taskService  =  Configuration.getProcessEngine().getTaskService();
		//办理任务
		taskService.completeTask("10002");//传入任务id
		
	}

查看当前用户的全部任务

	@Test
	//查看我的任务
	public void testFindPersonalTask(){
		//条件是ASSIGNEE
		TaskService taskService  =  Configuration.getProcessEngine().getTaskService();
		//部门经理的任务
		List<Task>  list = taskService.createTaskQuery().assignee("部门经理").list();
		
		
		for (Task task : list) {
			System.out.println("任务id:" +task.getId());
			System.out.println("任务名称:" +task.getName());
			System.out.println("任务操作人:" +task.getAssignee());
			System.out.println("任务时间:" +task.getCreateTime().toLocaleString());
		}
	}

 当前用户不做任何的处理,直接让任务流转到下一个处理人

	@Test
	//向后一步
	public void testSignal(){
		//将之前的实例,向后一步
		//向后一步针对流程对象(不考虑当前角色)
		
		//流程实例
		String pid = "helloworld.10001";
		//下一个节点transition的name
		String  nextTransitionNaem = "to 审批(总经理)";
		 
		Configuration.getProcessEngine().getExecutionService().signalExecutionById(pid,nextTransitionNaem);		
		
		
		
	}

创建类ProcessDefinitionTest 测试 如何多发布了的流程实例进行 查询和删除

 

查询所有已经发布了的流程实例对象

	// 查询已经发布的实例
	@Test
	public void findAllProccessDefinition(){
		//获取引擎
		RepositoryService repositoryService = Configuration.getProcessEngine().getRepositoryService();

		//获得查询流程实例Query对象
		ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery();
		//processDefinitionQuery.processDefinitionId("helloworld-8"); //page(firstResult, MaxResults); 分页 // orderAsc(ProcessDefinitionQuery.PROPERTY_ID) 排序 // count() 实例数量
		
		// 查询所有流程 
		List<ProcessDefinition> list = processDefinitionQuery.list();
		for (ProcessDefinition processDefinition : list) {
			System.out.println("流程对应id :"+processDefinition.getId());
			System.out.println("流程对应name: " + processDefinition.getName());
			System.out.println("流程对应key : " + processDefinition.getKey());
			System.out.println("版本:" + processDefinition.getVersion());
			System.out.println("------------------------------");
		}
		
		
	}

删除已经发布了的实例

删除的时候要注意 有执行信息的话 是无法删除的

或者使用级联删除把向关联的全部删除才能达到效果

	@Test
	// 删除流程实例
	public void testDeleteProcessDefinition(){
		// 启动流程
		//Configuration.getProcessEngine().getExecutionService().startProcessInstanceById("helloworld-2");

		// 第一种 通过id删除 注意问题: 如果流程以及开启了(含有执行信息,将无法删除 )
		RepositoryService repositoryService = Configuration.getProcessEngine().getRepositoryService();
		//repositoryService.deleteDeployment("20001");
		//解决:级联删除(重点)
		// repositoryService.deleteDeploymentCascade(("40004"));  
	
		//第二种  根据key值删除 (用于同一个流程 发布了多个版本) 先查询 后删除
		List<ProcessDefinition> list = repositoryService.createProcessDefinitionQuery().processDefinitionKey("helloworld").list();
		for (ProcessDefinition processDefinition : list) {
			repositoryService.deleteDeployment(processDefinition.getDeploymentId());// 传入发布id
		}  // 根据发布id来删除 
		
	}

猜你喜欢

转载自blog.csdn.net/qq_36908872/article/details/84962189
今日推荐