学习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来删除 
		
	}

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值