美文网首页
Activiti流程引擎及服务1-流程存储服务(Reposito

Activiti流程引擎及服务1-流程存储服务(Reposito

作者: 安安汐而 | 来源:发表于2019-08-21 10:14 被阅读0次

Demo项目代码:
https://gitee.com/AnAnXiEr/activiti6-demo

activiti.cfg.xml --> ProcessEnigneConfiguration --> ProcessEnigne

  • RepositoryService:
    负责对流程定义文件的管理,操作一些静态文件(流程xml、流程图片),获取部署对象和资源对象
  • RunTimeService:
    对流程进行控制,可用于启动流程、暂停、挂起等,有方便的api来查询正在运行的流程实例和流程对象。可对流程中上下文数据进行设置和获取
  • TaskService:
    人工任务,对人工任务进行增删改查,可对任务进行指定到用户或用户组。也可以对用户任务上下文数据进行设置和获取
  • IdentityService:
    对用户及用户组的管理,创建用户用户组、维护用户、用户组的关系
  • FormService:
    流程的表单,对表单的输入类型、格式进行数据渲染
  • HistoryService:
    已经结束的流程查询、删除,流程上下文的一些快照数据获取
  • ManagementService:
    对流程引擎基础的管理、用的较少。并对定时任务job管理,可获取数据库表名的方法
  • DyanmicBpmService:
    动态对流程定义修改,不建议使用

流程存储服务

基于RepositoryService

管理流程定义文件xml以及静态资源的服务
对特定流程的暂停和激活
流程定义启动权限管理

Api

部署文件构造器DeploymentBuilder
部署文件查询器DeploymentQuery
流程定义文件查询对象ProcessDefinitionQuery
流程部署文件对象Deployment
流程定义文件对象ProcessDefinition
流程定义的Java格式BpmnModel

代码
package com.imooc.activiti.activitidemo.coreapi;

import org.activiti.engine.RepositoryService;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.repository.DeploymentBuilder;
import org.activiti.engine.repository.DeploymentQuery;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.IdentityLink;
import org.activiti.engine.task.Task;
import org.activiti.engine.test.ActivitiRule;
import org.junit.Rule;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.List;

/**
 * @Description RepostoryService测试
 * @Author 胡浩
 * @Date 2019/8/21
 **/
public class RepostoryServiceTest {

    private static final Logger LOGGER = LoggerFactory.getLogger(RepostoryServiceTest.class);

    @Rule
    public ActivitiRule activitiRule = new ActivitiRule("config/activiti_mdc.cfg.xml");

    /**
     * 部署
     */
    @Test
//    @Deployment(resources = "config/mdc-process.bpmn20.xml")
    public void testRepository() {
        RepositoryService repositoryService = activitiRule.getRepositoryService();
        DeploymentBuilder deploymentBuilder = repositoryService.createDeployment();
        deploymentBuilder.name("测试部署资源")
                .addClasspathResource("MyProcess.bpmn20.xml")
                .addClasspathResource("coreapi/my-process.bpmn20.xml");
        //部署流程
        Deployment deploy = deploymentBuilder.deploy();

        LOGGER.info("deploy = {}", deploy);

        //根据id查询部署文件
        DeploymentQuery deploymentQuery = repositoryService.createDeploymentQuery();
//        Deployment deployment = deploymentQuery .deploymentId(deploy.getId()).singleResult();
        List<Deployment> deploymentList = deploymentQuery.orderByDeploymenTime().asc().listPage(0, 100);
        for (Deployment deployment : deploymentList) {
            LOGGER.info("deployment = {}", deployment);
        }
        LOGGER.info("deploymentList.size = {}", deploymentList.size());


        List<ProcessDefinition> processDefinitions = repositoryService.createProcessDefinitionQuery()
//                .deploymentId(deploy.getId())
                .orderByProcessDefinitionKey().asc()
                .listPage(0, 100);

        for (ProcessDefinition processDefinition : processDefinitions) {
            LOGGER.info("processDefinition = {} ,version = {} ,key = {} ,id = {}",
                    processDefinition, processDefinition.getVersion(),
                    processDefinition.getKey(),
                    processDefinition.getId());
        }
        LOGGER.info("processDefinitions.size = {}", processDefinitions.size());

    }

    /**
     * 暂停、激活
     */
    @Test
    @org.activiti.engine.test.Deployment(resources = "coreapi/my-process.bpmn20.xml")
    public void testSuspend() {
        RepositoryService repositoryService = activitiRule.getRepositoryService();
        ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().singleResult();
        LOGGER.info("processDefinition.id", processDefinition.getId());
        //挂起
        repositoryService.suspendProcessDefinitionById(processDefinition.getId());
        try {
            LOGGER.info("挂起后、开始启动");
            //服务启动(因为暂停了,所以会有异常
            activitiRule.getRuntimeService().startProcessInstanceById(processDefinition.getId());
//      报错提示:  org.activiti.engine.ActivitiException: Cannot start process instance. Process definition 二级审批流程 (id = my-process:1:3) is suspended
            LOGGER.info("挂起后、启动成功");
        } catch (Exception e) {
            LOGGER.info("挂起后、启动失败");
            LOGGER.info(e.getMessage(), e);
        }

        //激活
        repositoryService.activateProcessDefinitionById(processDefinition.getId());
        LOGGER.info("激活后、开始启动");
        //服务启动
        activitiRule.getRuntimeService().startProcessInstanceById(processDefinition.getId());
        LOGGER.info("激活后、启动成功");

    }

    /**
     * 指定流程文件只能通过一个用户或用户组启动
     * 建立关联用户和用户组
     * 查询关联用户、用户组
     * 删除关联用户、用户组
     */
    @Test
    @org.activiti.engine.test.Deployment(resources = "coreapi/my-process.bpmn20.xml")
    public void testCandidateStarter() {
        RepositoryService repositoryService = activitiRule.getRepositoryService();
        ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().singleResult();
        LOGGER.info("processDefinition.id", processDefinition.getId());

        //设置用户及用户组
        repositoryService.addCandidateStarterUser(processDefinition.getId(), "user");
        repositoryService.addCandidateStarterGroup(processDefinition.getId(), "groupM");
        //校验?Activiti不再带校验,只是保存了process与用户和用户组的关系,需要自己代码里进行校验

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

        //刪除关系
        repositoryService.deleteCandidateStarterGroup(processDefinition.getId(), "groupM");

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

    }


}

相关文章

网友评论

      本文标题:Activiti流程引擎及服务1-流程存储服务(Reposito

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