继续介绍使用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来删除
}