JBPM4之在java中详细使用详解编程语言

JBPM4之在java中详细使用详解编程语言

ProcessDefinition,流程定义:一个流程的步骤说明,如一个请假流程、报销流程、是一个规则。

ProcessDefinition,流程定义对象,是解析.jpdl.xml文件得到流程步骤的信息。没有更新操作,启动流程实例时是使用指定key的最新的版本。


1.部署流程定义

a)一次添加一个资源,相关文件在Classpath中

// 部署流程定义(添加)  

// jbpm4_deployment  

// jbpm4_deployprop  

// jbpm4_lob  

@Test  

public void deploy_1() {  

    String deploymentId = processEngine.getRepositoryService()//  

            .createDeployment()//创建一个部署对象,Deployment:一次部署的信息,含有多个文件  

            .addResourceFromClasspath(“helloworld/test.jpdl.xml”)//往Deployment对象添加资源  

            .addResourceFromClasspath(“helloworld/test.png”)//  

            .deploy();//执行部署  

    System.out.println(“deploymentId = ” + deploymentId);  

}  

b)一次添加多个资源,多个资源先打成zip包

@Test  

public void deploy_2() {  

    // 找到zip文件  

    InputStream in = this.getClass().getClassLoader().getResourceAsStream(“helloworld/helloworld.zip”);  

    ZipInputStream zipInputStream = new ZipInputStream(in);  

    // 部署  

    String deploymentId = processEngine.getRepositoryService()//  

            .createDeployment()//  

            .addResourcesFromZipInputStream(zipInputStream)//  

            .deploy();  

    System.out.println(“deploymentId = ” + deploymentId);  

}  

c)说明

1.addResourceFromClasspath(resource); 可以调用多次以添加多个文件。文件重复添加也不会报错。

2.addResourceFromInputStream(resourceName, inputStream)添加一个文件(使用InputStream)

3.addResourcesFromZipInputStream(zipInputStream)添加多个文件,里面也可以有文件夹。


2.查询所有流程定义

a) 查询所有流程定义

@Test  

public void findAll() {  

    // 查询  

    List<ProcessDefinition> list = processEngine.getRepositoryService()//  

            .createProcessDefinitionQuery()//  

            .orderAsc(ProcessDefinitionQuery.PROPERTY_KEY)//排序条件  

            //.count()查询出总数量  

            //.page(0, 100)分页,取出前100条记录  

            .list();  

    // 显示  

    for (ProcessDefinition pd : list) {  

        System.out.println(“id=” + pd.getId()// 格式为:{key}-{version}  

                + “, name=” + pd.getName()// 流程定义文件(.jpdl.xml)中根元素的name属性的值  

                + “, key=” + pd.getKey()// 流程定义文件(.jpdl.xml)中根元素的key属性的值,可以不写,不写就是name属性的值  

                + “, version=” + pd.getVersion()// 流程定义文件(.jpdl.xml)中根元素的version属性的值,可以不写,不写就会自增(key相同时,版本加1)  

                + “, deploymentId=” + pd.getDeploymentId()); // 本流程定义对应的 .jpdl.xml 文件所属的Deployment对象的id  

    }  

}  

b) 查询所有最新版本的流程定义

@Test  

public void findAllLatestVersions() {  

    // 1,查询所有流程定义,按Version升序排列,这样所有最大的版本就都排到最后了  

    List<ProcessDefinition> allList = processEngine.getRepositoryService()//  

            .createProcessDefinitionQuery()//  

            .orderAsc(ProcessDefinitionQuery.PROPERTY_VERSION)//  

            // .processDefinitionName(“test”)//  

            // .orderAsc(ProcessDefinitionQuery.PROPERTY_KEY)//  

            // .orderDesc(ProcessDefinitionQuery.PROPERTY_KEY)//  

            // .uniqueResult()  

            // .count()  

            // .page(firstResult, maxResults)  

            .list();  

    // 2,过滤出所需的最新版本的流程定义  

    Map<String, ProcessDefinition> map = new HashMap<String, ProcessDefinition>();  

    for (ProcessDefinition pd : allList) {  

        map.put(pd.getKey(), pd);//不同的key会保存最新的版本(上面已经按版本升序排列)  

    }  

    // 显示  

    for (ProcessDefinition pd : map.values()) {  

        System.out.println(“id=” + pd.getId()// 格式为:{key}-{version}  

                + “, name=” + pd.getName()// 流程定义文件(.jpdl.xml)中根元素的name属性的值  

                + “, key=” + pd.getKey()// 流程定义文件(.jpdl.xml)中根元素的key属性的值,可以不写,不写就是name属性的值  

                + “, version=” + pd.getVersion()// 流程定义文件(.jpdl.xml)中根元素的version属性的值,可以不写,不写就会自增(key相同时,版本加1)  

                + “, deploymentId=” + pd.getDeploymentId()); // 本流程定义对应的 .jpdl.xml 文件所属的Deployment对象的id  

    }  

}  


3.删除流程定义(其实是删除Deployment)

a) 删除某个Deployment

@Test  

public void deleteById() {  

    String deploymentId = “1”;  

    // // 删除某Deployment,如果有关联的执行信息,就抛异常  

    // processEngine.getRepositoryService().deleteDeployment(deploymentId);  

    // 删除某Deployment,如果有关联的执行信息,就级联删除  

    processEngine.getRepositoryService().deleteDeploymentCascade(deploymentId);  

}  

b) 删除指定key的所有版本的流程定义

@Test  

public void deleteByKey() {  

    // 1,查询出指定key的所有版本的流程定义  

    List<ProcessDefinition> list = processEngine.getRepositoryService()//  

            .createProcessDefinitionQuery()//  

            .processDefinitionKey(“helloworld”)//  

            .list();  

    // 2,循环删除  

    for (ProcessDefinition pd : list) {  

        processEngine.getRepositoryService().deleteDeploymentCascade(pd.getDeploymentId());  

    }  

}  


4.获取部署时的某文件的资源(查看流程图)

a) 查看流程图

@Test  

public void getResourceFromDeployment() throws Exception {  

    String deploymentId = “50001”;  

    String resourceName = “helloworld/test.png”; // 指定的是 jbpm4_lob 表中的name_列的值  

    // 获取某Deployment中所有文件资源的名称  

    Set<String> names = processEngine.getRepositoryService().getResourceNames(deploymentId);  

    for (String name : names) {  

        System.out.println(name);  

    }  

    // 获取某Deployment中指定名称的资源  

    InputStream in = processEngine.getRepositoryService().getResourceAsStream(deploymentId, resourceName);  

    // 保存到”c:/”中  

    OutputStream out = new FileOutputStream(“c:/process.png”);  

    for (int b = -1; (b = in.read()) != -1;) {  

        out.write(b);  

    }  

    in.close();  

    out.close();  

}

JBPM4之在java中详细使用详解编程语言

转载请注明来源网站:blog.ytso.com谢谢!

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/14684.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论