jbpm實踐1

 用戶上傳流程模板---》WorkFlow -----》流程模板部署到數據庫----》deployProcess(byte[] processFile,byte[] processImg)----》流程得有公文,審批信息---》Document ,ApproveInfo ---》創建流程實例---》addProcessInstance(String wf_name,int documentId)---》公文綁定流程---》addDocForProcess(Document doc,WorkFlow wf)

 

  1. /** 
  2.  * 流程 
  3.  */ 
  4. public class WorkFlow { 
  5.  
  6.     private int wf_id; 
  7.     private String wf_name; 
  8.     private byte[] processFile; 
  9.     private byte[] processImg; 
  10.     private int flag; 
  11.  
  12.  
  13.  
  14.     public void deployProcess(byte[] processFile,byte[] processImg) { 
  15.         //將文件部署到數據庫中 
  16.         ProcessDefinition pd = ProcessDefinition.parseXmlInputStream(new ByteArrayInputStream(processFile)); 
  17.         getContext().deployProcessDefinition(pd); 
  18.         //把數據存儲在對應的tb_workFlow中 
  19.         //去到對應的WorkFlow (根據名稱取出對象) 
  20.         WorkFlow wf = wsf.findByKey(WorkFlow.class"from WorkFlow wf where wf.wf_name=?",new Object[]{pd.getName()}); 
  21.         if(wf==null) { 
  22.             wf = new WorkFlow(); 
  23.             wf.setProcessFile(processFile); 
  24.             wf.setProcessImg(processImg); 
  25.             wf.setWf_name(pd.getName()); 
  26.             wf.setFlag(1); 
  27.             save(wf); 
  28.             return
  29.         }  
  30.         wf.setProcessFile(processFile); 
  31.         wf.setProcessImg(processImg); 
  32.         wf.setWf_name(pd.getName()); 
  33.         update(wf); 
  34.     } 
  35.  
  36.  
  37.  
  38. /** 
  39.  * 公文 
  40.  */ 
  41. public class Document { 
  42.     /** 公文id**/ 
  43.     private int dom_id; 
  44.     /** 標題**/ 
  45.     private String doc_title; 
  46.     /** 描述**/ 
  47.     private String doc_desc; 
  48.     /** 附件**/ 
  49.     private byte[] content; 
  50.     /** 創建者**/ 
  51.     private User creator; 
  52.     /** 創建時間**/ 
  53.     private Date createTime; 
  54.     /** 對應流程 多對一多個公文對應一個流程**/ 
  55.     private WorkFlow workFlow; 
  56.     /** 對應流程實例**/ 
  57.     private long processInstanceId; 
  58.     /**狀態 **/ 
  59.     private String status; 
  60.     /** 附件名稱 **/ 
  61.     private String loadName; 
  62.     /** 是否顯示**/ 
  63.     private int flag; 
  64.  
  65.     /** 狀態 **/ 
  66.     public final static String STATUS_NEW = "新建"
  67.     public final static String STATUS_ING = "審覈中"
  68.     public final static String STATUS_END = "結束"
  69.  
  70.  
  71. /** 
  72.  * 審批信息 
  73.  */ 
  74. public class ApproveInfo { 
  75.     /** id **/ 
  76.     private int ao_id; 
  77.     /** 審批意見 **/ 
  78.     private String comment; 
  79.     /** 時間 **/ 
  80.     private Date approveTime; 
  81.     /** 審批公文 **/ 
  82.     private Document document; 
  83.     /** 審批者 **/ 
  84.     private User approver; 
  85.  
  86.     //得到流程實例的ID (得到流程的實例 且返回實例的ID 將公文的ID 通過變量設置在上下文中) 
  87.     public long addProcessInstance(String wf_name,int documentId) { 
  88.         JbpmContext context = getContext(); 
  89.         //通過流程名稱得到流程定義 
  90.         ProcessDefinition pd = context.getGraphSessi().findLatestProcessDefinition(wf_name); 
  91.         //通過流程定義取得流程實例 
  92.         ProcessInstance pe = new ProcessInstance(pd); 
  93.         //將公文的ID 通過變量設置在上下文中 
  94.         pe.getContextInstance().createVariable("document", documentId); 
  95.         //存儲流程實例到數據庫中 
  96.         context.save(pe); 
  97.         return pe.getId(); 
  98.          
  99.     } 
  100.     //公文綁定流程 
  101.     public void addDocForProcess(Document doc,WorkFlow wf) { 
  102.       doc.setWorkFlow(wf); 
  103.       save(doc); 
  104.       long processInstanceId = addProcessInstance(wf.getWf_name(),doc.getDom_id()); 
  105.       doc.setProcessInstanceId(processInstanceId); 
  106.       update(doc); 
  107.     } 
 

 

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