activiti学习笔记4-流程部署

RepositoryService:流程载入与部署服务组建

一、流程载入(关键表:ACT_RE_DEPLOYMENT)

1,初始化

//创建流程引擎
ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
//得到流程存储服务对象
RepositoryService repositoryService = engine.getRepositoryService();
//创建DeploymentBuilder实例
DeploymentBuilder builder = repositoryService.createDeployment();

2,部署

//1,本地资源加载,常用方法(链式写法,同时部署BPMN与PNG)
builder.addClasspathResource("artifact/classpath.bpmn").addClasspathResource("artifact/classpath.png").deploy();
//2,设置或者修改部署资源名称
builder.name("wayhb").deploy();
//3,使用输入流部署,资源放在ACT_GE_BYTEBRRAY表的bytes字段中,是一个BLOB类型,只能是流出流入
InputStream is = new FileInputStream(new File("绝对路径/flow.png"));
builder.addInputStream("资源名称", is).deploy();
//4,添加字符串资源
builder.addString("资源名称", "字符内容,公用变量,属性");
//5,批量部署:添加压缩包资源,遍历压缩包所有资源
FileInputStream fis = new FileInputStream(new File("绝对路径/Zip.zip"));
ZipInputStream zi = new ZipInputStream(fis);
builder.addZipInputStream(zi).deploy();

3,过滤重复部署

builder.enableDuplicateFiltering();
//过滤关键是为流程部署起一个名字,没有名字不会过滤
builder.enableDuplicateFiltering().name("myflow");

二、流程定义管理(关键表:ACT_RE_PROCDEF)

1,查询流程实体

//根据特定属性查找流程实体
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().deploymentId(dep.getId()).singleResult();
//查找所有流程实体
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().list();
fot(ProcessDefinition p:processDefinition){p.getXXX()}
简写:
for (ProcessDefinition processDefinition : repositoryService.createProcessDefinitionQuery().list()) {
     processDefinition.getXXX()}	

2,查询流程细节

// 初始化:部署一份流程文件与相应的流程图文件
Deployment dep = repositoryService.createDeployment()
		.addClasspathResource("bpmn/GetResourceNames.bpmn")
		.addClasspathResource("bpmn/GetResourceNames.png").deploy();
//查询资源名
List<String> names = repositoryService.getDeploymentResourceNames(dep.getId());
for (String name : names) {System.out.println(name);}
//查询资源图片
InputStream is = repositoryService.getProcessDiagram(def.getId());// 查询资源文件
BufferedImage image = ImageIO.read(is);// 将输入流转换为图片对象	
File file = new File("resource/artifact/result.png");// 保存为图片文件
if (!file.exists()) file.createNewFile();
FileOutputStream fos = new FileOutputStream(file);
ImageIO.write(image, "png", fos);
fos.close();
is.close();

三、流程权限(关键表:ACT_RU_IDENTITYLINK)

注意:activiti设置权限后,本身不会对权限进行检查,只提供查询接口,由开发人员决定如何控制权限

1,设置权限

//用户权限
repositoryService.addCandidateStarterUser(processDefinition.getId(), "用户ID,REV_值");
//组权限
repositoryService.addCandidateStarterGroup(processDefinition.getId(), "组ID,REV_值");

2,查询权限

// 根据用户查询用权限的流程定义
for (ProcessDefinition p : repositoryService.createProcessDefinitionQuery()
       .startableByUser("user1").list();) {System.out.println(p.getName());}
// 根据流程定义查询用户组数据
for (Group group : identityService.createGroupQuery()
       .potentialStarter(processDefinition.getId()).list();) {System.out.println(group.getName());}     // 根据流程定义查询用户数据
for (User user : identityService.createUserQuery()
       .potentialStarter(processDefinition.getId()).list();) {System.out.println(group.getName());}  
// 根据流程定义查询全部的 IdentityLink(ACT_RU_IDENTITYLINK表) 数据
List<IdentityLink> links = repositoryService
                           .getIdentityLinksForProcessDefinition(processDefinition.getId());
System.out.println("与流程定义相关的数据量:" + links.size());


你可能感兴趣的:(activiti学习笔记4-流程部署)