JBPM

JBPM簡介

什麼是jbpm

   JBPM,全稱是Java Business Process Management(業務流程管理),它是覆蓋了業務流程管理、工做流、服務協做等領域的一個開源的、靈活的、易擴展的可執行流程語言框架。java

爲何用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.部署流程定義ui

@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的值this

@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.查看任務列表spa

    
    @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()+"\t任務名稱:"+task.getName()+"\t任務的辦理人:"+task.getAssignee());
        }
        

6.查詢當前任務所在點hibernate

    @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()+"\tname:"+pd.getName()+"\tkey:"+pd.getKey()+"\t版本號:"+pd.getVersion()+"\t部署的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()+"\tname:"+pd.getName()+"\tkey"+pd.getKey()+"\t版本號:"+pd.getVersion()+"\t部署的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()+"\tname:"+pd.getName()+"\tkey"+pd.getKey()+"\t版本號:"+pd.getVersion()+"\t部署的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);
    }
相關文章
相關標籤/搜索