您的位置:首页 > 其它

Activiti学习笔记四-开发部署zip格式的流程文件

2015-10-26 22:37 531 查看
上章我们学习了bpmn文件的部署,下面我们开始学习部署带有流程图的流程,也就是打包后的zip文件。打包文件我们使用ant脚本来实现,具体的ant知识请自行百度。
第一步:建立如图的结构目录



为了方便管理脚本,我采用每个bpmn对应一个打包脚本。

第二步:copy上章设计的bpmn文件并改名为:MyProcessZip.bpmn,对应的编辑器会自动生成png文件

第三步:编写ant脚本,build.xml脚本内容如下
<span style="font-family:Microsoft YaHei;font-size:18px;"><project name="activiti" default="workflow.package.MyProcessZip">
<property name="workflow.diagrams" value="../"/>
<property name="workflow.deployments" value="../../deployments" />

<target name="workflow.package.MyProcessZip">
<zip destfile="${workflow.deployments}/simpleProcessZip/myProcessZip.zip"
basedir="${workflow.diagrams}/simpleProcessZip" update="true" includes="*.bpmn,*.png">
</zip>
</target>
</project>
</span>


对应的路径请各位修改为自己的文件路径。

第四步:运行脚本,生成zip文件

对着build.xml文件点击右键点击run as => Antbuild,控制台会输出脚本运行结果,如果没有异常的话,我们刷新工程,在deployments下的simpleProcessZip路径下可以看到压缩好的zip文件,如下图所示:



到这里,打包zip文件的任务就完成了,下面我们开始部署这个zip文件。
新建一个java文件BpmDefinitionZipTest,继承ActivitiTestCase类,BpmDefinitionZipTest.java文件内容如下:

<span style="font-family:Microsoft YaHei;font-size:14px;">package activiti.test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.zip.ZipInputStream;

import javax.annotation.Resource;

import org.activiti.engine.HistoryService;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.history.HistoricProcessInstance;
import org.activiti.engine.repository.DeploymentBuilder;
import org.activiti.engine.task.Task;
import org.junit.Test;

public class BpmPersonProcessZipTest extends ActivitiTestCase{

@Resource
private RepositoryService repositoryService;
@Resource
private RuntimeService runtimeService;
@Resource
private TaskService taskService;
@Resource
private HistoryService historyService;

@Test
public void testDeploy(){
String filePath="/deployments/simplePersonProcess/personProcessZip.zip";
try {
InputStream is = Class.class.getClass().getResource(filePath).openStream();

// 部署流程定义1
//repositoryService.createDeployment().addZipInputStream(new ZipInputStream(is)).deploy();

// 部署流程定义2
DeploymentBuilder depBuilder = repositoryService.createDeployment().addZipInputStream(new ZipInputStream(is));
depBuilder.name("personProcessZip").deploy();//自定义的流程名称

// 启动流程实例
String procId = runtimeService.startProcessInstanceByKey("myPersonProcess").getId();//这个为流程定义文件中process的Id

/******************第一个任务开始******************************/
List<Task> taskList = taskService.createTaskQuery().taskCandidateUser("fozzie").list();
for (Task task : taskList) {

System.out.println("Following task is available for fozzie: " + task.getName());

// 认领任务这里由gonzo认领,因为gonzo是sales组的成员
taskService.claim(task.getId(), "fozzie");
}

//查看gonzo是否能够获取该任务
taskList = taskService.createTaskQuery().taskAssignee("fozzie").list();
System.out.println("fozzie当前的任务数:" + taskList.size());
for(Task task : taskList){
System.out.println("the task name is :" + task.getName());
// 执行(完成)任务
taskService.complete(task.getId());
}
System.out.println("fozzie当前的任务数:" +  taskService.createTaskQuery().taskAssignee("fozzie").count());
/******************第一个任务结束******************************/

/******************第二个任务开始******************************/
taskList = taskService.createTaskQuery().taskCandidateUser("gonzo").list();
for(Task task : taskList){
System.out.println("Following task is available for gonzo: " + task.getName());
taskService.claim(task.getId(), "gonzo");
}

//查看kermit是否能够获取改任务
taskList = taskService.createTaskQuery().taskAssignee("gonzo").list();
System.out.println("gonzo当前任务数:" + taskList.size());
for(Task task : taskList){
System.out.println("the task name is :" + task.getName());
taskService.complete(task.getId());
}
System.out.println("gonzo当前任务数:" +  taskService.createTaskQuery().taskAssignee("gonzo").count());

/******************第二个任务结束******************************/

/******************第三个任务开始******************************/
//获取第三个任务
taskList = taskService.createTaskQuery().taskCandidateUser("kermit").list();
for(Task task : taskList){
System.out.println("Following task is available for kermit: " + task.getName());
taskService.claim(task.getId(), "kermit");
}
//查看gonzo是否能够获取改任务
taskList = taskService.createTaskQuery().taskAssignee("kermit").list();
System.out.println("kermit当前任务数:" + taskList.size());
for(Task task : taskList){
System.out.println("the task name is :" + task.getName());
taskService.complete(task.getId());
}
System.out.println("kermit当前任务数:" +  taskService.createTaskQuery().taskAssignee("kermit").count());

/******************第三个任务结束******************************/

HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().processInstanceId(procId).singleResult();
System.out.println("流程结束时间:" + historicProcessInstance.getEndTime());

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}
</span>


部署时,我们需要用到ZipInputStream来读取文件,部署的时候,由于是zip压缩包,所以需要我们depBuilder.name("myProcessZip").deploy();来给部署的流程设置一个名称,部署完成后,后面的任务处理和bpmn文件是一样的了。
好了,部署zip格式的流程文件就到这里了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: