美文网首页
activiti学习笔记(十)RepositoryService

activiti学习笔记(十)RepositoryService

作者: 云师兄 | 来源:发表于2018-09-28 10:38 被阅读87次

activiti内部提供各类服务类来实现各种流程相关操作。

RepositoryService 流程存储服务

  • 管理流程定义文件xml及静态资源的服务
  • 对特定流程的暂停和激活
  • 流程定义启动权限管理
    类内部重要的成员有:
  • deploymentBuilder 部署文件构造器
  • deploymentQuery 部署文件查询器
  • ProcessDefinitionQuery 流程定义文件查询对象
  • Deployment 流程部署文件对象
  • ProcessDefinition 流程定义文件对象
  • BpmnModel 流程定义的java格式

示例

DeploymentBuilder deploymentBuilder = repositoryService.createDeployment();
deploymentBuilder.name("yby的流程")
       .addClasspathResource("second_approve.bpmn20.xml")
       .addClasspathResource("another_approve.bpmn20.xml");
Deployment deployment = deploymentBuilder.deploy();
String deploymentId = deployment.getId();

// 使用repositoryService查询单个部署对象
DeploymentQuery deploymentQuery = repositoryService.createDeploymentQuery();
Deployment deployment1 = deploymentQuery.deploymentId(deploymentId).singleResult();

// 使用repositoryService查询多个部署对象
List<Deployment> deploymentList = deploymentQuery
                .orderByDeploymenTime()
                .asc()
                .listPage(0,100);

// 使用repositoryService查询单个流程实例
ProcessDefinition processDefinition = repositoryService
                .createProcessDefinitionQuery()
                .deploymentId(deploymentId)
                .singleResult();

// 使用repositoryService查询多个流程实例
List<ProcessDefinition> processDefinitionList = repositoryService
                .createProcessDefinitionQuery()
                .deploymentId(deploymentId)
                .listPage(0,100);
for(ProcessDefinition processDefinition: processDefinitionList){
      logger.info("流程定义为:{},版本为:{}",processDefinition.getName(),processDefinition.getVersion());
}
  1. 当执行deploymentBuilder.deploy()后就会将当前部署对象和相关资源文件的内容保存到数据库中。示例中执行了两次addClasspathResource方法,说明一次可以部署多个流程,所以部署对象和流程定义对象是一对多的关系。
  2. DeploymentQuery对象支持根据各种条件的查询,示例中使用部署id。由于使用其他条件可能查出多个部署对象,如果部署id确定只有一个结果,就加上singleResult方法取值。

流程定义挂起和恢复

可以使用repository对流程定义进行挂起和恢复操作,挂起后发起流程实例就会抛出异常,示例如下:

// suspend process definition
repositoryService.suspendProcessDefinitionById(processDefinition.getId());

try {
            ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("second_approve", variables);
    } catch (Exception e){
            logger.error(e.toString());
    }

repositoryService.activateProcessDefinitionById(processDefinition.getId());

ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("second_approve", variables);

再上述示例中首先对流程定义挂起后启动流程实例就会抛出异常,后来有激活流程定义,再去启动流程实例就成功了。

关联流程定义和用户

通过将用户或者用户组和流程定义关联,来设置发起流程的候选人或候选组,后续也可以使用repositoryService.getIdentityLinksForProcessDefinition方法来获取IdentityLink(身份信息关联)对象获取用户信息。

repositoryService.addCandidateStarterGroup(processDefinition.getId(),"groupM");
repositoryService.addCandidateStarterUser(processDefinition.getId(),"user");

List<IdentityLink> identityLinkList = repositoryService.getIdentityLinksForProcessDefinition(processDefinition.getId());
for(IdentityLink identityLink : identityLinkList){
    logger.info("identityLink:{}",identityLink);
}

相关文章

网友评论

      本文标题:activiti学习笔记(十)RepositoryService

      本文链接:https://www.haomeiwen.com/subject/lcduoftx.html