• JBPM


    JBPM简介

    什么是jbpm

       JBPM,全称是Java Business Process Management(业务流程管理),它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。

    为什么用jbpm

         业务分析师和开发人员使用的是同一种语言来交谈,大大降低了开发的风险,如果要开发一个项目,速度也更快了,因为开发人员不用再将用户需求转化成软件设计了。其次,JBPM采用的不是一般的开发工具,而是自己的图形化开发工具,非常方便随时了解和掌握运行的进程。最后,JBPM的流程框架非常灵活,使用起来也非常安全,它经过了安全认证,因此可以保证一些商业机密不被

    JBPM所需要的jar包

    1.创建表结构

    @Test
    public void create(){
    
    new org.hibernate.cfg.Configuration().configure("jbpm.hibernate.cfg.xml").buildSessionFactory();
    System.out.println("ok");
    
    }

    2.创建ProcessEngine对象

        ProcessEngine pro=Configuration.getProcessEngine();

    3.部署流程定义

    @Test
        //部署流程定义
        public void getDeploy(){
        
            String re=pro.getRepositoryService()
                    .createDeployment()
                    .addResourceFromClasspath("jbpms.jpdl.xml")
                    .addResourceFromClasspath("jbpms.png").deploy();
            System.out.println(re);
         }
        

    4. 启动流程实例  通过key,key是process节点中的key,如果不写,默认为name的值

    @Test
        public void testStart(){
             //启动流程实例  通过key,key是process节点中的key,如果不写,默认为name的值
          ProcessInstance pi=pro.getExecutionService().startProcessInstanceByKey("jbpms");
          System.out.println("start ok!");
          System.out.println("id:"+pi.getId()+",状态:"+pi.getState()+",流程定义的ID:"+pi.getProcessDefinitionId());
        }
        

    5.查看任务列表

        
        @Test
        public void selectTask(){
            //查看任务列表
            String user="hh";
            String user2="boss";
            List<Task> tasks = pro.getTaskService().findPersonalTasks(user);
            for (Task task : tasks) {
                System.out.println("任务ID:"+task.getId()+"	任务名称:"+task.getName()+"	任务的办理人:"+task.getAssignee());
            }
            

    6.查询当前任务所在点

        @Test
        public void findSelect(){
            //查询当前任务所在点
            String name=pro.getExecutionService().createProcessInstanceQuery().processInstanceId("jbpms.130001").uniqueResult().findActiveActivityNames().toString();
            System.out.println(name);
        }

    7.办理任务

    @Test
        public void testCompleteTask(){
            pro.getTaskService().completeTask("130002");
            System.out.println("ok");
        }

    流程管理

    public class ProcessTest {
        
        ProcessEngine pro=Configuration.getProcessEngine();
        
        @Test
        public void findAll(){
            //查询所有流程定义
            List<ProcessDefinition> list=pro.getRepositoryService().createProcessDefinitionQuery().list();
            
            for (ProcessDefinition pd : list) {
                System.out.println("id:"+pd.getId()+"	name:"+pd.getName()+"	key:"+pd.getKey()+"	版本号:"+pd.getVersion()+"	部署的id:"+pd.getDeploymentId());
            }
            
        }

    查看所有流程定义的信息

    @Test
    
    public void findAll(){
    
    List<ProcessDefinition> list = pe.getRepositoryService().createProcessDefinitionQuery().list();
    
    for (ProcessDefinition pd : list) {
    
    /**
    
     * id的格式  name-版本号
    
     * name:jbpm.cfg.xml文件中根据点的name属性值
    
     * key,如果在配置文件中指定了,那么就是根据点中的test的 值,如果不指定默认是name的值
    
     * version版本号,同一个名称的第一个为1后续的自增
    
     */
    
    System.out.println("id:"+pd.getId()+"	name:"+pd.getName()+"	key"+pd.getKey()+"	版本号:"+pd.getVersion()+"	部署的id:"+pd.getDeploymentId());
    
    }
    
    }
    
     

    删除指定id流程信息

      @Test
        public void deleteByid(){
            pe.getRepositoryService().deleteDeploymentCascade("100001");
            System.out.println("删除成功");
        }

    删除指定key的所有流程信息

     @Test
        public void deleteByids(){
            //01.取出当前key对应的版本信息
        List<ProcessDefinition> list = pe.getRepositoryService().createProcessDefinitionQuery().processDefinitionKey("jbpmtest").list();
            for (ProcessDefinition pd : list) {
                  pe.getRepositoryService().deleteDeploymentCascade(pd.getDeploymentId());
            }
            System.out.println("删除成功");
        }

    获取流程图

     @Test
        public void getImage() throws Exception{
            String deploymentId="10001";
            String resouceName="jbpmtest.png";
            //根据id去查询所有对应的资源名
            Set<String> resourceNames = pe.getRepositoryService().getResourceNames(deploymentId);
            for(String item: resourceNames){
                System.out.println("资源名称:"+item);
            }
            InputStream in=pe.getRepositoryService().getResourceAsStream(deploymentId, resouceName);
            OutputStream os=new FileOutputStream("D:\1.png");
            int a=in.read();
            while (a!=-1) {
                os.write(a);
                a=in.read();
            }
            in.close();
            os.close();
            System.out.println("成功");
        }
        

    部署zip格式的资源

    public void addZipResource(){
            InputStream is=this.getClass().getClassLoader().getResourceAsStream("two.zip");
            ZipInputStream zs=new ZipInputStream(is);
            String id= pe.getRepositoryService().createDeployment().addResourcesFromZipInputStream(zs).deploy();
              System.out.println("部署成功:deploymentid:"+id);
        }

    找到所有最新版本的流程定义

    @Test
        public void findNewVersionInfo(){
            //查询所有
            List<ProcessDefinition> list = pe.getRepositoryService().createProcessDefinitionQuery()//
            .orderAsc(ProcessDefinitionQuery.PROPERTY_VERSION)
                    .list();
            Map<String,ProcessDefinition> map=new java.util.HashMap<String,ProcessDefinition>();
            for (ProcessDefinition item : list) {
                map.put(item.getKey(),item);
            }
            for (ProcessDefinition pd : map.values()) {
                System.out.println("id:"+pd.getId()+"	name:"+pd.getName()+"	key"+pd.getKey()+"	版本号:"+pd.getVersion()+"	部署的id:"+pd.getDeploymentId());
            }
        }

    设置流程变量

    public void setVariable() {
            pe.getExecutionService().setVariable("jbpm01.90001", "请假天数", 18);
        }
    
    @Test
        public void getVariable() {
            Integer days = (Integer) pe.getExecutionService().getVariable("jbpm01.90001", "请假天数");
            System.out.println(days);
        }

     

  • 相关阅读:
    二叉树计数2(卡特兰数+高精乘低精+高精除低精)
    奶牛的身高(差分约束)
    海底高铁(差分)
    假期(动态规划+单调队列)
    RY哥查字典(字符串双模hash初步)
    元素查找(hash初步)
    【模板】单源最短路径 堆优化的dijkstra
    【模板】单源最短路径spfa
    【并查集】noi2001食物链
    【带权并查集】银河英雄传说
  • 原文地址:https://www.cnblogs.com/Smile-123/p/6150630.html
Copyright © 2020-2023  润新知