Activiti流程图部署及流程图部分操作

  流程图部署有两种方式,一种是通过classpath,另一种是通过zip文件

  通过classpath方式如下

  

public void deploymentProcessDefinition_classpath()
    {
        Deployment deployment = processEngine.getRepositoryService()//与流程定义和部署相关的service
            .createDeployment()//创建一个部署对象
            .name("流程定义入门")//添加部署名称
            .addClasspathResource("diagrams/helloworld.bpmn")//从calsspath中加载,一次一个
            .addClasspathResource("diagrams/helloworld.png")
            .deploy();//完成部署
        System.out.println(deployment.getId());
        System.out.println(deployment.getName());
    }

  通过zip压缩包代码如下

  

public void deploymentProcessDefinition_zip()
    {
        InputStream in = this.getClass().getClassLoader().getResourceAsStream("diagrams/helloworld.zip");//从zip获得输入流
        ZipInputStream zipInputStream = new ZipInputStream(in);
        Deployment deployment = processEngine.getRepositoryService()//与流程定义和部署相关的service
            .createDeployment()//创建一个部署对象
            .name("流程定义zip")//添加部署名称
            .addZipInputStream(zipInputStream)//指定zip格式文件完成部署
            .deploy();//完成部署
        System.out.println(deployment.getId());
        System.out.println(deployment.getName());
    }

  

  查询流程定义代码如下

  

public void findProcessDefinition()
    {
        List<ProcessDefinition> list = processEngine.getRepositoryService()//与流程定义和部署相关的service
        .createProcessDefinitionQuery()//查询流程定义表
        /**指定条件查询**/
        //.deploymentId(deploymentId)//部署对象id查询
        //.processDefinitionId(processDefinitionId)//流程定义id查询
        //.processDefinitionKey(processDefinitionKey)//流程定义的key查询  集合
        //.processDefinitionKeyLike(processDefinitionKeyLike)//流程定义的key模糊查询  集合

        /**排序**/
        //.orderByProcessDefinitionVersion().asc()//按版本升序
        //.orderByProcessDefinitionVersion().asc()//按版本升降序
        .list();//返回一个集合列表,封装流程定义
        //.singleResult();//返回惟一结果集
        //.count();//返回结果集数量
        //.listPage(firstResult, maxResults);//分页查询
        if(list!=null && list.size()>0){
            for(ProcessDefinition pd:list){
                System.out.println("流程定义ID:"+pd.getId());//流程定义的key+版本+随机生成数
                System.out.println("流程定义的名称:"+pd.getName());//对应helloworld.bpmn文件中的name属性值
                System.out.println("流程定义的key:"+pd.getKey());//对应helloworld.bpmn文件中的id属性值
                System.out.println("流程定义的版本:"+pd.getVersion());//当流程定义的key值相同的相同下,版本升级,默认1
                System.out.println("资源名称bpmn文件:"+pd.getResourceName());
                System.out.println("资源名称png文件:"+pd.getDiagramResourceName());
                System.out.println("部署对象ID:"+pd.getDeploymentId());
                System.out.println("#########################################################");
            }
        }
    }

  删除流程定义代码如下,分为级联和非级联删除两种

  

public void deleteProcessDefinition()
    {
        String deploymentId="601";
        //使用部署id完成删除

        /**
         * 不带级联的删除
         *    只能删除没有启动的流程,如果流程启动,就会抛出异常
         */
        //processEngine.getRepositoryService()
        //            .deleteDeployment(deploymentId);
        //System.out.println("success");

        processEngine.getRepositoryService()//
        .deleteDeployment(deploymentId, true);
        System.out.println("删除成功!");
    }

  查看流程图图片代码如下

  

public void viewPic() throws IOException{
        /**将生成图片放到文件夹下*/
        String deploymentId = "1";
        //获取图片资源名称
        List<String> list = processEngine.getRepositoryService()//
                        .getDeploymentResourceNames(deploymentId);
        //定义图片资源的名称
        String resourceName = "";
        if(list!=null && list.size()>0){
            for(String name:list){
                if(name.indexOf(".png")>=0){
                    resourceName = name;
                }
            }
        }
        //获取图片的输入流
        InputStream in = processEngine.getRepositoryService()//
                        .getResourceAsStream(deploymentId, resourceName);
        System.out.println(resourceName);
        //将图片生成到D盘的目录下
        File file = new File("D:/"+resourceName);
        //将输入流的图片写到D盘下
        FileUtils.copyInputStreamToFile(in, file);
    }

  

  整体文件代码如下

  

package b_processDefinition;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.zip.ZipInputStream;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.repository.ProcessDefinition;
import org.apache.commons.io.FileUtils;
import org.junit.Test;
public class ProcessDefinitionTest {
    ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    /**部署流程定义,从classpath*/
    @Test
    public void deploymentProcessDefinition_classpath()
    {
        Deployment deployment = processEngine.getRepositoryService()//与流程定义和部署相关的service
            .createDeployment()//创建一个部署对象
            .name("流程定义入门")//添加部署名称
            .addClasspathResource("diagrams/helloworld.bpmn")//从calsspath中加载,一次一个
            .addClasspathResource("diagrams/helloworld.png")
            .deploy();//完成部署
        System.out.println(deployment.getId());
        System.out.println(deployment.getName());
    }

    /**部署流程定义,从zip*/
    @Test
    public void deploymentProcessDefinition_zip()
    {
        InputStream in = this.getClass().getClassLoader().getResourceAsStream("diagrams/helloworld.zip");//从zip获得输入流
        ZipInputStream zipInputStream = new ZipInputStream(in);
        Deployment deployment = processEngine.getRepositoryService()//与流程定义和部署相关的service
            .createDeployment()//创建一个部署对象
            .name("流程定义zip")//添加部署名称
            .addZipInputStream(zipInputStream)//指定zip格式文件完成部署
            .deploy();//完成部署
        System.out.println(deployment.getId());
        System.out.println(deployment.getName());
    }
    /**查询流程定义*/
    @Test
    public void findProcessDefinition()
    {
        List<ProcessDefinition> list = processEngine.getRepositoryService()//与流程定义和部署相关的service
        .createProcessDefinitionQuery()//查询流程定义表
        /**指定条件查询**/
        //.deploymentId(deploymentId)//部署对象id查询
        //.processDefinitionId(processDefinitionId)//流程定义id查询
        //.processDefinitionKey(processDefinitionKey)//流程定义的key查询  集合
        //.processDefinitionKeyLike(processDefinitionKeyLike)//流程定义的key模糊查询  集合

        /**排序**/
        //.orderByProcessDefinitionVersion().asc()//按版本升序
        //.orderByProcessDefinitionVersion().asc()//按版本升降序
        .list();//返回一个集合列表,封装流程定义
        //.singleResult();//返回惟一结果集
        //.count();//返回结果集数量
        //.listPage(firstResult, maxResults);//分页查询
        if(list!=null && list.size()>0){
            for(ProcessDefinition pd:list){
                System.out.println("流程定义ID:"+pd.getId());//流程定义的key+版本+随机生成数
                System.out.println("流程定义的名称:"+pd.getName());//对应helloworld.bpmn文件中的name属性值
                System.out.println("流程定义的key:"+pd.getKey());//对应helloworld.bpmn文件中的id属性值
                System.out.println("流程定义的版本:"+pd.getVersion());//当流程定义的key值相同的相同下,版本升级,默认1
                System.out.println("资源名称bpmn文件:"+pd.getResourceName());
                System.out.println("资源名称png文件:"+pd.getDiagramResourceName());
                System.out.println("部署对象ID:"+pd.getDeploymentId());
                System.out.println("#########################################################");
            }
        }
    }
    /**删除流程定义**/
    @Test
    public void deleteProcessDefinition()
    {
        String deploymentId="601";
        //使用部署id完成删除

        /**
         * 不带级联的删除
         *    只能删除没有启动的流程,如果流程启动,就会抛出异常
         */
        //processEngine.getRepositoryService()
        //            .deleteDeployment(deploymentId);
        //System.out.println("success");

        processEngine.getRepositoryService()//
        .deleteDeployment(deploymentId, true);
        System.out.println("删除成功!");
    }
    /**查看流程图
     * @throws IOException */
    @Test
    public void viewPic() throws IOException{
        /**将生成图片放到文件夹下*/
        String deploymentId = "1";
        //获取图片资源名称
        List<String> list = processEngine.getRepositoryService()//
                        .getDeploymentResourceNames(deploymentId);
        //定义图片资源的名称
        String resourceName = "";
        if(list!=null && list.size()>0){
            for(String name:list){
                if(name.indexOf(".png")>=0){
                    resourceName = name;
                }
            }
        }
        //获取图片的输入流
        InputStream in = processEngine.getRepositoryService()//
                        .getResourceAsStream(deploymentId, resourceName);
        System.out.println(resourceName);
        //将图片生成到D盘的目录下
        File file = new File("D:/"+resourceName);
        //将输入流的图片写到D盘下
        FileUtils.copyInputStreamToFile(in, file);
    }
    /***附加功能:查询最新版本的流程定义*/
    @Test
    public void findLastVersionProcessDefinition(){
        List<ProcessDefinition> list = processEngine.getRepositoryService()//
                        .createProcessDefinitionQuery()//
                        .orderByProcessDefinitionVersion().asc()//使用流程定义的版本升序排列
                        .list();
        /**
         * Map<String,ProcessDefinition>
  map集合的key:流程定义的key
  map集合的value:流程定义的对象
  map集合的特点:当map集合key值相同的情况下,后一次的值将替换前一次的值
         */
        Map<String, ProcessDefinition> map = new LinkedHashMap<String, ProcessDefinition>();
        if(list!=null && list.size()>0){
            for(ProcessDefinition pd:list){
                map.put(pd.getKey(), pd);
            }
        }
        List<ProcessDefinition> pdList = new ArrayList<ProcessDefinition>(map.values());
        if(pdList!=null && pdList.size()>0){
            for(ProcessDefinition pd:pdList){
                System.out.println("流程定义ID:"+pd.getId());//流程定义的key+版本+随机生成数
                System.out.println("流程定义的名称:"+pd.getName());//对应helloworld.bpmn文件中的name属性值
                System.out.println("流程定义的key:"+pd.getKey());//对应helloworld.bpmn文件中的id属性值
                System.out.println("流程定义的版本:"+pd.getVersion());//当流程定义的key值相同的相同下,版本升级,默认1
                System.out.println("资源名称bpmn文件:"+pd.getResourceName());
                System.out.println("资源名称png文件:"+pd.getDiagramResourceName());
                System.out.println("部署对象ID:"+pd.getDeploymentId());
                System.out.println("#########################################################");
            }
        }
    }

    /**附加功能:删除流程定义(删除key相同的所有不同版本的流程定义)*/
    @Test
    public void deleteProcessDefinitionByKey(){
        //流程定义的key
        String processDefinitionKey = "helloworld";
        //先使用流程定义的key查询流程定义,查询出所有的版本
        List<ProcessDefinition> list = processEngine.getRepositoryService()//
                        .createProcessDefinitionQuery()//
                        .processDefinitionKey(processDefinitionKey)//使用流程定义的key查询
                        .list();
        //遍历,获取每个流程定义的部署ID
        if(list!=null && list.size()>0){
            for(ProcessDefinition pd:list){
                //获取部署ID
                String deploymentId = pd.getDeploymentId();
                processEngine.getRepositoryService()//
                            .deleteDeployment(deploymentId, true);
            }
        }
    }
}
时间: 2024-10-04 14:18:35

Activiti流程图部署及流程图部分操作的相关文章

Ubuntu下部署Apache Web服务器操作手册

Ubuntu下部署Apache Web服务器操作手册 安装 sudo apt install apache2 –y 修改配置 所有配置文件默认为只读,修改时需要修改操作权限: sudo chmod 777 [文件名] 修改/etc/apache2/sites-available路径下的000-default.conf文件中的DocumentRoot /var/www/ 为想要的目录: 修改/etc/apache2路径下的ports.conf文件中的Listen 80 为想要的端口,如8888:

Activiti Linux部署流程图出现乱码

前段时间使用Activiti在本机以及window环境下测试发现流程图正常显示,在linux下汉字变成了小方块. 经网上查找资料: 发现自己的京东云未安装中文字体,由于本人系统activiti配置文件设置的"宋体",因此需在window系统中找到宋体字体复制到linux系统中进行安装. 1,进入C:\Windows\Fonts,找到"宋体 常规"文件simsun.ttc 2,进入cd /usr/java/jdk1.7.0_79/jre/lib/fonts,新建fal

Activiti工作流框架学习(二)——使用Activiti提供的API完成流程操作

可以在项目中加入log4j,将logj4.properties文件拷入到src目录下,这样框架执行的sql就可以输出到到控制台,log4j提供的日志级别有以下几种: Fatal  error  warn  info  debug  trace 一.部署流程定义 1,在工程项目下创建源码文件夹process 2,在该文件下下面新创建一个工作流流程定义文件test1.bpmn(NewàActivit Diagram) 3,在test1.bpmn文件定义请假流程或者是报销流程 4,测试代码 [java

Activiti 流程部署方式 activi 动态部署(高级源码篇)

欢迎加入我们的学习提升群523988350,里面有京东.美团网的技术人员,可以相互交流 Activiti的流程 部署方式有很多种方式,我们可以根据activit工作流引擎提供的ap方式进行部署. 当然了实际需求决定你要使用哪一种api操作,后面的总结详细介绍了使用场景. 下面看一下部署方式. 流程部署的方式在类org.activiti.engine.repository.DeploymentBuilder中定义的部署方接口式如下 : DeploymentBuilder addInputStrea

Activiti 流程部署方式 activi 动态部署(高级源代码篇)

Activiti的流程 部署方式有非常多种方式,我们能够依据activit工作流引擎提供的ap方式进行部署. 当然了实际需求决定你要使用哪一种api操作,后面的总结具体介绍了使用场景. 以下看一下部署方式. 流程部署的方式在类org.activiti.engine.repository.DeploymentBuilder中定义的部署方接口式例如以下 : DeploymentBuilder addInputStream(String resourceName, InputStream inputS

activiti 中的签收与委托 操作

先看看activiti中关于TASK的数据库表: 其中有两个字段:OWNER_,ASSIGNEE_ 这两个字段的意义是: 1,ASSIGNEE_(受理人):task任务的受理人,就是执行TASK的人,这个又分两种情况(有值,NULL) 1),有值的情况:XML流程里面定义的受理人,TASK会直接填入这个人: 2),NULL:XML没有指定受理人或者只指定了候选组: 没有值的时候,可以使用签收功能去指定受理人,就是候选组里面谁签收谁就成了受理人: Task task=taskService.cre

流程图制作: BPMN流程图在线绘制

bpmn BPMN(业务流程建模符号) 是业务流程建模现代化的标准,由BPMI符号工作组五月制定2004年版的2.0 BPMN发布于2010年在英国最初的规范写由对象管理组. BPMN的目标是: 负责流程实施的技术专家; 创建和改进流程的业务分析师; 监控和控制流程的经理. 通过这种方式,BPMN可以作为业务流程及其实现之间的链接. bpmn 作用 业务流程模型和表示法(BPMN)提供了任何人都可以轻松理解的业务工作流程的图形表示;帮助进行业务流程分析和业务流程改进.当以图表形式呈现时,复杂的业

CentOS7下部署Django项目详细操作步骤

以下文章摘抄自:https://www.django.cn/article/show-4.html  谢谢大佬的好文章,已经亲测 详细步骤(下面步骤都是ROOT权限执行): 一.更新系统软件包yum update -y 二.安装软件管理包和可能使用的依赖 yum -y groupinstall "Development tools" yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel s

【自动部署】服务器自动化操作 RunDeck

RunDeck 是用 Java/Grails 写的开源工具,帮助用户在数据中心或者云环境中自动化各种操作和流程.通过命令行或者web界面,用户可以对任意数量的服务器进行操作,大大降低了对服务器自动化的门槛. RunDeck的作用: 在浏览器中执行服务器上任何非交互命令,比如ps, /etc/init.d/xxx restart,注意ssh之类的要在执行中输入密码的肯定不支持 对接服务器上的一键运维脚本,变成一个Job, 执行时只要点击按钮Run 自动记录命令操作记录和输出. 预览一下官网的几张图