JBPM 工作流 一些接口及方法

  1. 接口  
  2. ProcessEngine           工作流引擎   可以通過spring和 Configuration.getProcessEngine();  
  3. ExecutionService        執行                
  4. ProcessInstance         流程實例              
  5. ProcessDefinition       流程定義  
  6. TaskService         任務  
  7. IdentityService         自動增長  
  8. HistoryService          歷史記錄  
  9. ManagementService       管理  
  10. RepositoryService       倉庫  
  11.   
  12.   
  13.   
  14. 方法:  
  15. 1.ProcessEngine        
  16.     processEngine.setAuthenticatedUserId(String );  
  17.     processEngine.setHibernateSession(Object);  
  18.     processEngine.setJdbcConnection(Connection);  
  19.   
  20.     Object get(String);  
  21.     ExecutionService getExecutionService();  
  22.     HistoryService  getHistoryService();  
  23.     IdentityService getIdentityService();  
  24.     ManagementService getManagementService();  
  25.     RepositoryService getRepositoryService();  
  26.     TaskService getTaskService();  
  27.   
  28.   
  29.   
  30. 1.查詢流程實例:new Instance  
  31. List<ProcessInstance>  instances = executionService.createProcessInstanceQuery().list();  
  32.   
  33. 2.查詢流程進度  
  34.     1)得到當前流程中相匹配的活動 (可以得到活動的長高寬..)  
  35.     <%String id = request.getParameter("id");  
  36.     ProcessEngine processEngine = Configuration.getProcessEngine();  
  37.     RepositoryService repositoryService = processEngine.getRepositoryService();  
  38.     ExecutionService executionService = processEngine.getExecutionService();  
  39.     ProcessInstance processInstance = executionService.findProcessInstanceById(id);  
  40.     Set<String> activityNames = processInstance.findActiveActivityNames();  
  41.     ActivityCoordinates ac = repositoryService.getActivityCoordinates(processInstance.getProcessDefinitionId(),activityNames.iterator().next());%>  
  42.     <div style="position:absolute;border:1px solid red;left:<%=ac.getX()%>px;top:<%=ac.getY()%>px;width:<%=ac.getWidth()%>px;height:<%=ac.getHeight()%>px;"></div>  
  43.   
  44.     2)生成圖片  
  45.     <img src="Definition_definitionImage.action?id=<%=id %>" style="position:absolute;left:0px;top:0px;" align="middle">  
  46.               
  47.         RepositoryService repositoryService = this.getProcessEngine().getRepositoryService();         
  48.         ExecutionService executionService = this.getProcessEngine().getExecutionService();        
  49.         String id = this.getRequest().getParameter("id");         
  50.         ProcessInstance processInstance = executionService.findProcessInstanceById(id);       
  51.         String processDefinitionId = processInstance .getProcessDefinitionId();  
  52.          // processDefinitionId 方法表示去 JBPM4_DEPLOYPROP 中按 processDefinitionId和 STRINGVAL_ 字段去找 DEPLOYMENT  
  53.          // 簡單說就是通過 流程部署的小項id 去找 流程對象  
  54.         ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()  
  55.             .processDefinitionId(processDefinitionId).uniqueResult();  
  56.         System.out.println(processDefinition.getImageResourceName()+"-----"+processDefinition.getDeploymentId());         
  57.         // 圖片輸入流    
  58.         InputStream inputStream = null;    
  59.         // 如果是上傳的是 xml 文件 , processDefinition.getImageResourceName() 就會是null .  
  60.         if(processDefinition.getImageResourceName()==null){  
  61.             String did = processDefinition.getDeploymentId();  
  62.               DefinitionImage definitionImage = this.getJbpmService().findImageByDefinitionId(did);  //自己寫的Service不是JBPM的API  
  63.               if(definitionImage!=null){  
  64.                   //  通過 這個 xml 的 流程id 找到它在數據庫 definitionImage表中的記錄 ,中間也有他的 圖片名稱   
  65.                   // 從而構造出 inputStream 對象   
  66.                   String uploadRoot = super.getRequest().getRealPath("/upload/jpdl/"+definitionImage.getImageName());  
  67.                  try {  
  68.                     inputStream = new FileInputStream(uploadRoot);  
  69.                 } catch (FileNotFoundException e) {  
  70.                     // TODO Auto-generated catch block  
  71.                     e.printStackTrace();  
  72.                 }  
  73.               }  
  74.               
  75.         }else{  
  76.             // 從數據庫讀到的輸入流 .   
  77.             inputStream = repositoryService.getResourceAsStream(processDefinition.getDeploymentId(),processDefinition.getImageResourceName());  
  78.         }  
  79.         byte[] b = new byte[1024];  
  80.         int len = -1;  
  81.         try {  
  82.             ServletOutputStream sos = this.getResponse().getOutputStream();  
  83.             while ((len = inputStream.read(b, 01024)) != -1) {  
  84.                 sos.write(b, 0, len);  
  85.             }  
  86.         } catch (Exception e) {  
  87.             // TODO: handle exception  
  88.             e.printStackTrace();  
  89.         }  
  90.   
  91. 3.查詢流程定義 (相當於Class,流程實例相當於new 的類)  
  92. List<ProcessDefinition> definitionList =  this.getProcessEngine().getRepositoryService().createProcessDefinitionQuery().list();  
  93.   
  94. 4.開啓流程,已經有動態表單了。  
  95.                 String id=reuqest.getParameter("id");  //得到流程定義ID  
  96.                 // 得到當前用戶   
  97.                 UserInfo userInfo = super.getLoginUser();  
  98.                 //爲了方便測試 , 先寫死   
  99.                 Map<String, Object> map = new HashMap<String, Object>();  
  100.                 map.put(Definition_Action.USER_INFO, userInfo.getUserId());  
  101.                 // 爲什麼這裏不能有多個參數  
  102.                 map.put(Definition_Action.FORM_ID, formId);  // form 表單 id   
  103.                 // 得到專門操作流程實例的 執行對象   
  104.                 System.out.println(map);  
  105.                 ExecutionService executionService = this.getProcessEngine()  
  106.                         .getExecutionService();  
  107.                   
  108.                 // 開啓實例  ,  ProcessInstance 對象好像對應的就是 ExecutionService 的表    
  109.                 ProcessInstance pi = executionService.startProcessInstanceById(id,map);  
  110.   
  111. 5.上傳流程定義  
  112.     /* 
  113.      * 上傳方法 (non-Javadoc) , 方法名寫錯了 , 應該是 uploadDefinition  
  114.      * 難點 
  115.      * 1. 上傳的 zip 格式就很好處理 
  116.      * 2. 上傳的是 xml , 要複雜一點 , 因爲 xml 文件是不帶 png 流程圖的 , 這樣的話就實現不了流程跟蹤了 ,  
  117.       * 所有要去網上找了個 根據  xml 生成流程圖 png 的工具 (這個方法中沒實現 ) , 
  118.       * 3.  把 xml的 流程id 和 生成的流程圖名寫到數據庫中,當然前提是,把 xml要上傳到 tomcat 先.  
  119.     */  
  120.     File src = this.getUpload();  
  121.         // 得到  "知識庫" service   
  122.         RepositoryService rService = this.getProcessEngine().getRepositoryService();   
  123.           
  124.         String fileName = this.getUploadFileName();  
  125.         String ext = fileName.substring(fileName.lastIndexOf(".")+1,fileName.length());  
  126.           
  127.         if(ext.equals("zip")){  
  128.             try {  
  129.                 ZipInputStream zis = new ZipInputStream(new FileInputStream(src));  
  130.                 rService.createDeployment().addResourcesFromZipInputStream(zis)  
  131.                         .deploy();  
  132.             } catch (Exception e) {  
  133.                 // TODO: handle exception  
  134.                 e.printStackTrace();  
  135.             }  
  136.         }else if(ext.equals("xml")){  
  137.         //如果上傳成功後就要放到自己的表中保存起來。  
  138.         //流程定義對象 id   
  139.         String definitionId = rService.createDeployment().addResourceFromInputStream(this.getUploadFileName(),new FileInputStream(src)).deploy();  
  140.     }  
  141.   
  142. 6.刪除流程定義  
  143.     RepositoryService repositoryService = this.getProcessEngine().getRepositoryService();  
  144.     //刪除要流程部署ID  
  145.     repositoryService.deleteDeploymentCascade("depolymentId");  
  146.   
  147. 7.查詢我的任務  
  148.     TaskService taskService = this.getProcessEngine().getTaskService();  
  149.     //得到用戶任務   
  150.     List<Task> taskList = taskService.findPersonalTasks(userInfo.getUserId());   
  151.     //SQL:select * from JBPM4_TASK where assignee=?;   
  152.   
  153.     // 得到任務變量 formId   ?? var這裏是不是在上面(開啓流程)已經定義好了的。  
  154.         Object formId = taskService.getVariable(task.getId(), Definition_Action.FORM_ID);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章