jbpm 總結

1、利用jpdl圖形設計器分析和設計流程
2、定義流程
3、加載和啓動jbpm流程定義、
A、利用JbpmConfiguration.createJbpmContext(),得到jbpmContext上下文對象;
B、再利用JbpmContext上下文對象得到GraphSession對象;
C、根據GraphSession對象來加載流程定義,根據流程定義id來加載得到流程定義對象;
D、創建流程實例:啓動流程
ProcessInstance processInstance = new ProcessInstance(processDefinition);
E、保存jbpmContext.save(processInstance);
F、關閉jbpmContext.close();

=======================================================================================
一、部署流程定義

JbpmContext jbpmContext =  JbpmConfiguration.getInstance().createJbpmContext();


ProcessDefinition processDefinition = ProcessDefinition
      .parseXmlResource(“jdpl/hello/processdefinition.xml");

//部署流程定義,如果已經存在同名的定義,則版本號會自動累加
jbpmContext. deployProcessDefinition(processDefinition);

 jbpmContext.close();
 
 
 ======================================================================================
 
 二、加載和開始流程
 
 JbpmContext jbpmContext =JbpmConfiguration.getInstance.createJbpmContext();
GraphSession graphSession = jbpmContext.getGraphSession();
//加載流程定義
ProcessDefinition processDefinition = graphSession
  .loadProcessDefinition(processDefinitionId);

// 創建流程實例:啓動流程
ProcessInstance processInstance = new ProcessInstance(processDefinition);

//此時,rootToken指向流程定義的第一個節點

jbpmContext.save(processInstance);

jbpmContext.close();


=====================================================================================

三、給任務設置參與者
某一個任務固定由某人處理:
  <task-node name="collectform" >
      <task >
        <assignment actor-id=“manager” />"
      </task>
      <transition name="auditfork" to="auditfork" />
    </task-node>

=====================================================================================  

四、給任務設置參與者
用變量傳遞參與者的ID:  值一般在web層確定
定義配置:
  <task-node name="collectform" >
      <task >
        <assignment class='org.ministone.training.jbpm.UserIdAssignmentHandler' />“
       <assignment actor-id=‘#{userId}' />“
      </task>
      <transition name="auditfork" to="auditfork" />
    </task-node>
Handler 實現
public class UserIdAssignmentHandler implements AssignmentHandler {
    public void assign(Assignable assignable, ExecutionContext executionContext) throws Exception {
        String actorId = (String) executionContext.getVariable("userId");              
        assignable.setActorId(actorId);    
    }
}


=====================================================================================

五、獲取工作列表

獲取待辦列表:
 JbpmContext jbpmContext = JbpmConfiguration.getInstance().createJbpmContext();
 TaskMgmtSession taskMgmtSession =   jbpmContext.getTaskMgmtSession();

 //只能獲取尚未完成的任務列表(待辦任務)
  List list = taskMgmtSession.findTaskInstances(userId);

   jbpmContext.close();
在實際的應用中,需要自己寫DAO來獲取各種列表,例如待籤、待辦、已辦、辦結等列表,而且可以進行條件查詢,分頁等


======================================================================================
六、執行任務
典型代碼:取得某個任務id對應的任務實例
JbpmContext jbpmContext = JbpmConfiguration.getInstance().createJbpmContext();
TaskMgmtSession taskMgmtSession = jbpmContext.getTaskMgmtSession();
TaskInstance taskInstance = taskMgmtSession.loadTaskInstance(id);
taskInstance.start();
jbpmContext.save(taskInstance);
jbpmContext.close();

start()方法的調用
標識着一個任務的執行的開始:任務的開始時間字段會被填充
在實際業務中類似簽收的作用
也可以帶入參數(actorId)來主動參與任務的執行

======================================================================================

七、如何結束任務

典型代碼:
JbpmContext jbpmContext = JbpmConfiguration.getInstance().createJbpmContext();
TaskMgmtSession taskMgmtSession = jbpmContext.getTaskMgmtSession();
TaskInstance taskInstance = taskMgmtSession.loadTaskInstance(id);
taskInstance.end();
jbpmContext.save(taskInstance);
jbpmContext.close();

end 方法的調用
當前任務實例的結束:任務的結束時間字段會被填充
下一個節點的初始化(實際上調用了token.signal()方法)
當前任務的結束和下一個流程節點的開始是在一個事務內完成,從而保證了數據的完整性


======================================================================================

八、設置(流程實例)變量

變量用來處理工作流相關數據
不需要定義
和流程實例信息一起被持久化
變量的訪問和賦值是在某一個token上進行的,缺省時,是基於root Token
變量的作用域和所屬的token的生命週期一致,分支上同名變量互不影響,和parent的同名變量也互不影響
典型代碼:
JbpmContext jbpmContext = JbpmConfiguration.getInstance().createJbpmContext();
GraphSession graphSession = jbpmContext.getGraphSession();

ProcessInstance processInstance = graphSession.loadProcessInstance(Long
    .parseLong(instanceId));
ContextInstance contextInstance = processInstance.getContextInstance();
contextInstance.setVariable(vname, value); //設置到了rootToken

jbpmContext.save (processInstance);
jbpmContext.close();


====================================================================================
九、對JbpmContext的理解(-)
職責
封裝了對流程實例的持久化操作
用於獲取GraphSession對象;
主要方法
Connection getConnection()
Session getSession()
public GraphSession getGraphSession()
public TaskMgmtSession getTaskMgmtSession()
public LoggingSession getLoggingSession()
public SchedulerSession getSchedulerSession()
public void close()

  理解(二)
 
  典型用法
 JbpmContext jbpmContext = JbpmConfiguration.getInstance().createJbpmContext();
try {
    TaskInstance taskInstance = ...
     ...do your process operations..............
  jbpmContext.save(taskInstance);
 }catch(Throwable){
    //process exception here
  }
   finally {
    jbpmContext.close();
   }

理解(三)
web.xml中的配置
filter>
        <filter-name>JbpmContextFilter</filter-name>
        <filter-class>org.jbpm.web.JbpmContextFilter</filter-class>
    </filter>
……
 <filter-mapping>
        <filter-name>JbpmContextFilter</filter-name>
        <url-pattern>/wfapp/*</url-pattern>
    </filter-mapping>


jsp頁面上 <%
      JbpmContext jbpmContext = JbpmConfiguration.getInstance().getCurrentJbpmContext();
      List list = jbpmContext.getGraphSession().findLatestProcessDefinitions();
      for (int i = 0; i < list.size(); i++) {
          ProcessDefinition pd = (ProcessDefinition)list.get(i);
 %>
      <tr><td><%=pd.getName()%></td><td><%=pd.getVersion()%></td> </tr>
 <% }  %> <!– 不需要關閉-->

======================================================================================


十、對GraphSession的理解
職責
Graph 相關的數據持久化操作
主要是ProcessDefinition和ProcessInstance
主要方法
 public void saveProcessDefinition( ProcessDefinition processDefinition )
public ProcessDefinition loadProcessDefinition(long processDefinitionId)
public ProcessDefinition findProcessDefinition(String name, int version)
 public List findAllProcessDefinitions()
public void saveProcessInstance(ProcessInstance processInstance)
 public ProcessInstance loadProcessInstance(long processInstanceId)
public List findProcessInstances(long processDefinitionId)
Delete方法


=====================================================================================

十一、TaskMgmtSession的理解

職責
TaskInstance相關的數據查詢操作
TaskInstance數據通過ProcessInstance進行保存
主要方法
public List findTaskInstances(String actorId)
public List findPooledTaskInstances(String actorId)
public List findTaskInstancesByToken(long tokenId)
public TaskInstance loadTaskInstance(long taskInstanceId)
沒有save方法,save是通過對processInstance的操作實現的

======================================================================================

總結:

一、jBPM編程步驟總結
創建流程定義
部署流程定義
啓動流程實例
獲取任務列表
執行某個任務
結束任務

二、工作流應用一般開發步驟
分析業務流程、用jPDL對業務流程進行建模
部署流程定義
創建和啓動流程實例
獲取待辦任務
執行任務
提交(結束)任務


本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/frank3G/archive/2010/02/04/5287700.aspx

發佈了15 篇原創文章 · 獲贊 1 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章