JBPM總結

JBPM:爲工作流的一個框架,java業務流程管理系統
JBPM入門:
工作流:就是業務過程的部分或整體在計算機應用環境下的自動化,主要解決:多個人在一起工作完成某件事的步驟
將JBPM控制檯部署到tomcat中:
將項目jbpm-console導入到myeclipse中,並修改jbpm.hibernate.cfg.xml中的數據庫用戶名和密碼
1:定義工作流,執行工作流
流程:首先需要一個人-----》定義流程,png圖片爲用戶查看,xml文檔:爲計算機程序提供------》執行流程:由用戶參與執行(eg員工,經理)
注意:創建流程圖時,要定義每個任務的流程分配eg:提交申請--->員工 審批--->部門經理
JBPM所有的操作都是通過service完成的
//創建流程引擎,加載類路徑下的文件jbpm.cfg.xml
private ProcessEngine processEngine=new org.jbpm.api.Configuration().setResource("jbpm.cfg.xml").buildProcessEngine();
//創建數據庫18張表:
public void testCreate18Table(){
  new Configuration().configure("jbpm.hibernate.cfg.xml").buildSessionFactory();
 }
//部署流程定義
 @Test
 public void deployProcessDefination(){
  String deploymentID=processEngine.getRepositoryService()//管理部署對象和流程定義的service
  .createDeployment()//部署對象
  .addResourceFromClasspath("helloWorld/helloWorld.jpdl.xml")
  .addResourceFromClasspath("helloWorld/helloWorld.png")
  .deploy();//部署
  System.out.println("部署流程定義ID:"+deploymentID);
 }
//啓動流程實例
 @Test
 public void startProcessDefination(){
  String processDefinationKey="helloWorld";(流程定義的Key即爲流程圖中的key屬性,若不寫莫認爲name屬性的值)
  ProcessInstance pi=processEngine.getExecutionService()//管理執行的service
  .startProcessInstanceByKey(processDefinationKey);//按照流程定義的key啓動流程實例
  System.out.println("流程ID:"+pi.getId());
  System.out.println("流程定義的id:"+pi.getProcessDefinitionId());
 }
//查看我的個人任務列表
 @Test
 public void findMyPersonTaskList(){
  //String userId="員工";
  //String userId="部門經理";
  String userId="總經理";
  List<Task> list=processEngine.getTaskService()//調用管理任務的service
  .findPersonalTasks(userId);//
  if(list!=null&&list.size()>0){
   for (Task task : list) {
    System.out.println(task.getId());
    System.out.println(task.getName());//任務名稱
    System.out.println(task.getAssignee());//任務辦理人
    System.out.println(task.getCreateTime());//創建時間
    System.out.println(task.getExecutionId());//執行ID
   }
//辦理個人任務
 @Test
 public void banliTask(){
  String taskId="40001";
  processEngine.getTaskService()
  .completeTask(taskId);//指定任務的ID完成任務
  System.out.println("完成任務");
 }

JBPM的工作流程:
部署流程定義(加載流程圖)---》啓動流程實例(執行流程)-----》查看我的個人任務列表-----》辦理個人任務
按照流程定義的key屬性進行查詢,返回一個集合,List<processDefinition> list=processengine.getRepositoryService
創建流程引擎的三種方式:
//加載流程引擎的三種方式
 //第一種方式:加載類路徑下的jbpm.cfg.xml
 //private ProcessEngine processEngine=new Configuration().setResource("jbpm.cfg.xml").buildProcessEngine();
 //第二種方式:默認的方式,自動加載類路徑下的jbpm.cfg.xml
 //private ProcessEngine processEngine =new Configuration().buildProcessEngine();
 //第三種方式:單例模式
private ProcessEngine processEngine =Configuration.getProcessEngine();
JBPM沒有提供修改的功能
使用版本號來確定當前執行的是哪一個流程
部署對象:一次部署一個或者多個文件信息
流程定義:解析流程定義的XML,得到的流程定義規則的信息,JBPM就是按照解析出來流程定義的規則執行工作流
流程實例和任務:
#與流程實例、執行對象、任務相關的表
SELECT * FROM jbpm4_execution  #正在執行流程實例表

SELECT * FROM jbpm4_hist_procinst #流程實例的歷史表

SELECT * FROM jbpm4_task #正在執行任務信息表

SELECT * FROM jbpm4_hist_task #任務歷史表


與流程實例,執行對象任務相關的表jbpm_execution:流程實例表  jbpm4_hist_procinst:流程實例的歷史表  jbpm4_task:任務
執行對象:表示流程執行一次的過程
流程實例:表示流程執行一次的過程
任務:當活動節點是任務的時候,要執行的操作
活動節點:任務活動,指定辦理人完成任務;狀態活動:使當前活動處於等待狀態;
執行對象和流程實例的區別:
執行對象爲流程的一次執行過程
流程實例爲從開始到結束最大的流程分支,就是流程實例
什麼情況下,流程實例就是執行對象?
只有一個流程的時候,此時流程實例就是執行對象
流程變量:
使用流程變量,用於在活動環節設置變量值,並可以在下一個環節獲得變量值,方便在各個環節中查看流程變量
涉及到的表:jbpm4_variable
連線(transition):
    1:部署流程定義利用addResourceFromUrl   this.getclass().getResouce();
    2:啓動流程實例
    3:查看個人任務(以流程實例的ID進行查看,獲取唯一值)
    4:完成我的個人任務(按照指定的連線名稱完成任務)
連線的特點:
1、一個活動中可以指定一個或多個Transition(Start中只能有一個,End中沒有)。
  * 開始活動中只能有一個Transition。
  * 結束活動中沒有Transition。
  * 其他活動中有1條或多條Transition
2、如果只有一個,則可以不指定名稱(名稱是null);
     如果有多個,則要分別指定唯一的名稱。

判斷(decision):
 1:部署流程定義利用addResourceFromUrl   this.getclass().getResouce();
    2:啓動流程實例,同時設置流程變量:Map<String,Object> variables=new haskMap<>;
variables.put("報銷金額",500),1000元以下流程直接結束,1000元以上流程要經過總經理執行
    3:查看個人任務(以流程實例的ID進行查看,獲取唯一值)
    4:完成我的個人任務
創建一個類實現decisionhandler,覆蓋方法decide,參數表示與流程相關的對象,返回值爲:表示返回指定連線的名字
在方法中:Interger value=execition.getVARIABLE("報銷金額"),如果value不爲null並且小於1000
分籤和會籤(fork and join):
1:部署流程定義
2:啓動流程實例
分配個人任務總結:
個人任務及三種分配方式:
    1:在.jpdl.xml中直接寫 assignee="張三"
    2:在.jpdl.xml中寫 assignee=“#{userId}”,變量的值要是String的。
         使用流程變量指定辦理人
    3,使用AssignmentHandler接口,要使類實現該接口,在類中定義:
         assignable.setAssignee(userId); // 指定個人任務的辦理人
        使用任務ID和辦理人重新指定辦理人:
     processEngine.getTaskService().assignTask(taskId, userId);
分配組任務總結:
組任務及三種分配方式:
    1:在.jpdl.xml中直接寫 candidate-users=“小A,小B,小C,小D"
    2:在.jpdl.xml中寫 candidate-users =“#{userIds}”,變量的值要是String的。
         使用流程變量指定辦理人
              Map<String, Object> variables = new HashMap<String, Object>();
              variables.put("userIDs", "大大,小小,中中");
    3,使用AssignmentHandler接口,使用類實現該接口,在類中定義:
            //添加組任務的用戶
assignable.addCandidateUser("張無忌");
assignable.addCandidateUser(“張三丰”);   
組任務分配給個人任務:
     processEngine.getTaskService().takeTask(taskId, userId);
個人任務分配給組任務:
     processEngine.getTaskService().assignTask(taskId, null);
向組任務添加人員:
     processEngine.getTaskService().addTaskParticipatingUser(taskId, userId, Participation.CANDIDATE);

活動的概念:
          task:
         state:
         custom(自定義節點):特點:當使用自定義活動時,此時流程默認不會在自定義活動節點上停留,而是執行完execute方法後,繼續往下執行,
當流程離開自定義活動的時候,需要調用signal方法,使用自定義活動時,此時流程默認不會在自定義活動節點上停留,signal方法不會被執行,要想調用signal方法,必須讓自定義活動節點處於等待狀態,將自定義活動處於等待狀態後,並且調用向後執行一步
事件(監聽器):
事件類:
public class EventListenerImpl implements EventListener 
JBPM整合項目:
1:導入相應的jar包
2:將tomcat下的lib下的el-api.jar註釋掉,導入一下三個jar包:Juel-api.jar,Juel-engine.jar,Juel-impl.jar
3:修改配置文件:在src下導入jbpm.cfg.xml文件,並在此文件下添加
<import resource="jbpm.default.cfg.xml" />
  <import resource="jbpm.businesscalendar.cfg.xml" />
  <import resource="jbpm.tx.hibernate.cfg.xml" />
  <import resource="jbpm.jpdl.cfg.xml" />
  <import resource="jbpm.bpmn.cfg.xml" />
  <import resource="jbpm.identity.cfg.xml" />
4:因爲項目中hibernate.cfg.xml文件與jbpm.hibernate.cfg.xml文件衝突,
所以修改hibernate.cfg.xml文件
添加Jbpm所需要的配置文件
  <!-- 導入JBPM工作流的映射文件 修改添加工作流-->
      <mapping resource="jbpm.repository.hbm.xml" />
      <mapping resource="jbpm.execution.hbm.xml" />
      <mapping resource="jbpm.history.hbm.xml" />
      <mapping resource="jbpm.task.hbm.xml" />
      <mapping resource="jbpm.identity.hbm.xml" />
5:使用測試類,生成18張表
6:在jbpm.cfg.xml文件中添加與spring的整合:
  <!-- 與spring整合需要 -->
  <import resource="jbpm.tx.spring.cfg.xml" />
7:在beans.xml中配置流程引擎
<!-- 配置ProcessEngine(與JBPM4.4整合) -->
<bean id="springHelper" class="org.jbpm.pvm.internal.processengine.SpringHelper">
     <property name="jbpmCfg" value="jbpm.cfg.xml"></property>
</bean>
<bean id="processEngine" factory-bean="springHelper" factory-method="createProcessEngine" /> 
7:測試流程引擎

 

設備購置計劃:提交申請---》審批(部門經理)---》審批(總經理)
設備費用離開統管理員操作此模塊
審批流程管理:部署流程定義,對流程定義的CRUD操作,主要有系統管理員操作
申請模板管理:針對流程定義(一個流程對應一個申請模板),對申請模板的CRUD的操作(文件的上傳和下載),主要有系統管理員操作
起草申請:用戶根據提供的流程模板進行下載,然後進行編輯,將編輯後的文件上傳,上傳的過程就是報審,報審後由領導進行審批,此模塊是由用戶操作(張三)
待我審批:
我的申請查詢:可以查看當前用戶的報審信息,信息包括(審覈中,審覈不通過,審覈通過),用戶可以查看每個流程的執行過程,此模塊是由用戶操作(張三)

 

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