流程部署
需要掌握的接口:
接口名称 | 说明 |
RepositoryService | 管理流程定义 |
RuntimeService | 执行管理,包括启动、推进、删除流程实例等操作 |
TaskService | 任务管理 |
HistoryService | 历史管理(执行完的数据的管理) |
首先, 绘画流程图
① 新建一个.bpm的文件, 如下图
② 绘制流程图, 如下图
需要将流程的id和name进行相对应的设置: 在面板的空白处右击即可出现该设置
每个节点的id/name/assignee也应该进行相对应的设置: 单击每个节点即可出现该设置
③ 将流程图部署到数据库中, 以便让业务按照流程图设计的步骤来进行
测试代码:
/**
* 获取流程引擎
*/
@Before
public void setUp() throws Exception {
//获取流程引擎对象, 默认是读取配置文件"activiti.cfg.xml"
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//获取RepositoryService接口的实现类
repositoryService = processEngine.getRepositoryService();
}
/**
* 部署流程①: 通过单文件的形式加载部署
*/
@Test
public void delpoyActiviti1() {
//获取部署对象
DeploymentBuilder deploymentBuilder = repositoryService.createDeployment();
//加载流程的配置文件和图片==>"activiti_test.bpmn"和"activiti_test.png"
deploymentBuilder.addClasspathResource("diagrams/activiti_test.bpmn")
.name("请假流程").category("请假")
.addClasspathResource("diagrams/activiti_test.png");
//部署流程
deploymentBuilder.deploy();
}
/**
* 部署流程②: 通过压缩包的形式加载部署
*/
@Test
public void delpoyActiviti2() {
//获取部署对象
DeploymentBuilder deploymentBuilder = repositoryService.createDeployment();
//获取压缩包的输入流
InputStream in = this.getClass().getClassLoader().getResourceAsStream("diagrams/activiti_test.zip");
//转化
ZipInputStream zipInputStream = new ZipInputStream(in);
//加载输入流
deploymentBuilder.addZipInputStream(zipInputStream);
//部署流程
deploymentBuilder.deploy();
}
数据库查询结果:
select * from act_re_deployment; -- 工作流部署表
select * from act_ge_bytearray; -- 存储二进制相关文件
select * from act_re_procdef; -- 流程定义的数据
启动流程
测试代码:
/**
* 启动流程
*/
@Test
public void startProcess() {
//根据流程的key来启动相对应的流程, 默认是启动最新版本的流程
runtimeService.startProcessInstanceByKey("activiti_leave");
}
相关查询
select * from act_ru_execution; -- 流程的运行
默认情况下启动最新版本的流程
删除流程
/**
* 删除流程
*/
@Test
public void deleteActivitiDeploy() {
//根据流程部署id指定删除的流程
repositoryService.deleteDeployment("7501", true);
}
启动流程实例后:
/**
* 启动流程
*/
@Test
public void startProcess() {
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("activiti_leave");
String processInstanceId = processInstance.getId();
String activityId = processInstance.getActivityId();
String definitionId = processInstance.getProcessDefinitionId();
System.out.println("流程实例ID:"+processInstanceId);
System.out.println("正在活动的节点ID:"+activityId);
System.out.println("流程定义ID:"+definitionId);
}
查询流程
测试代码:
/**
* 查询流程实例
*/
@Test
public void queryProcessInstance(){
String processDefinitionKey = "activiti_leave";
//创建流程实例的查询对象
ProcessInstanceQuery processInstanceQuery = runtimeService.createProcessInstanceQuery();
List<ProcessInstance> processInstanceList = processInstanceQuery.processDefinitionKey(processDefinitionKey)
.orderByProcessDefinitionKey()
.desc()
.list();
for(ProcessInstance processInstance: processInstanceList){
String processInstanceId = processInstance.getId();
String activityId = processInstance.getActivityId();
String definitionId = processInstance.getProcessDefinitionId();
System.out.println("流程实例ID:"+processInstanceId);
System.out.println("正在活动的节点ID:"+activityId);
System.out.println("流程定义ID:"+definitionId);
}
}
Activiti系列回顾:
Activiti工作流之简介与环境搭建