Activiti流程定义相关

本文主要讲述如何使用RepositoryService进行工作流定义相关的操作。如果还没有搭建Activiti基础环境请参考这篇博客:

 https://blog.csdn.net/houkai18792669930/article/details/103385764

@RunWith(SpringRunner.class)
@SpringBootTest(classes = ActivitiApplication.class)
public class ProcessDefinitionTest {

    private Gson gson = new Gson();
    @Autowired
    private ProcessEngine processEngine;

    /**
     * 流程的部署定义
     * addInputStream 支持 ZipInputStream 可以将bpmn文件和图片打zip包传入
     *
     * 操作三张表:
     *  1. act_re_deployment(部署对象表) 存放流程定义的显示名和部署时间,每部署一次增加一条记录
     *  2.act_re_procdef(流程定义表)     存放流程定义的属性信息,部署每个新的流程定义都会在这张表中增加一条记录。
     *       注意:当流程定义的key相同的情况下,使用的是版本升级
     *  3.act_ge_bytearray(资源文件表) 存储流程定义相关的部署信息。即流程定义文档的存放地。每部署一次就会增加两条记录,
     *      一条是关于bpmn规则文件的,一条是图片的(如果部署时只指定了bpmn一个文件,activiti会在部署时解析bpmn文件内容自
     *      动生成流程图)。两个文件不是很大,都是以二进制形式存储在数据库中。
     */
    @Test
    public void deployTest() throws IOException {
        Deployment deployment = processEngine.getRepositoryService()
                .createDeployment()
                .name("demo")
                .addInputStream("test.bpmn",new FileInputStream("D:\\my_svn\\Architecture-activiti\\activiti\\src\\test\\resources\\helloworld.xml"))
                .addInputStream("test.png",new FileInputStream("D:\\my_svn\\Architecture-activiti\\activiti\\src\\test\\resources\\helloworld.png"))
                .deploy();
        System.out.printf(deployment.getId() +"   "+ deployment.getName());
    }

    /**
     * 查询流程定义 act_re_procdef
     * id规则 processDefinitionKey:processDefinitionVersion:generated-id    generated-id是一个自动生成的唯一的数字
     */
    @Test
    public void queryProcessDefinitionTest(){
        ProcessDefinition processDefinition = processEngine.getRepositoryService()
                .createProcessDefinitionQuery()
                .deploymentId("10001").singleResult();
        System.out.printf(gson.toJson(processDefinition));

        //查询最新版本的流程定义
        List<ProcessDefinition> processDefinitionList = processEngine.getRepositoryService()
                .createProcessDefinitionQuery()
                .orderByProcessDefinitionVersion()
                .desc()
                .list();
        System.out.printf(gson.toJson(processDefinitionList.get(0)));
    }

    /**
     * 获取流程定义文档的资源
     *
     * 在 ACT_GE_BYTEARRAY 中获取名称
     * ACT_GE_BYTEARRAY 中获取
     */
    @Test
    public void viewImageTest() throws Exception{
        List<String> nameList=  processEngine.getRepositoryService().getDeploymentResourceNames("10001");
        String imageName = null;
        for (String temp: nameList) {
            System.out.printf("name:" + temp);
            if(temp.indexOf(".png") >= 0){
                imageName = temp;
            }
        }
        System.out.printf("imageName:" + imageName);
        InputStream is = processEngine.getRepositoryService().getResourceAsStream("10001", imageName);
        byte[] buffer = new byte[is.available()];
        is.read(buffer);
        File targetFile = new File("D:\\image.png");
        try(OutputStream outStream = new FileOutputStream(targetFile);){
            outStream.write(buffer);
        }
    }

    /**
     * 删除流程的定义
     * cascade: 是否级联,默认为false
     *     false: 如果存在正在执行的流程则报异常
     *     true: 会删除当前规则相关的所有的信息例如:正在执行的信息,历史信息
     */
    @Test
    public void deleteDeploymentTest(){
        processEngine.getRepositoryService().deleteDeployment("7501", false);

        //删除key相同的所有不同版本的流程定义
        List<ProcessDefinition> processDefinitionList = processEngine.getRepositoryService()
                .createProcessDefinitionQuery()
                .orderByProcessDefinitionName()
                .list();
        processDefinitionList.forEach(temp->{
            processEngine.getRepositoryService().deleteDeployment(temp.getDeploymentId());
        });
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值