<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    溫馨提示:您的每一次轉(zhuǎn)載,體現(xiàn)了我寫此文的意義!!!煩請您在轉(zhuǎn)載時注明出處http://m.tkk7.com/sxyx2008/謝謝合作!!!

    雪山飛鵠

    溫馨提示:您的每一次轉(zhuǎn)載,體現(xiàn)了我寫此文的意義!!!煩請您在轉(zhuǎn)載時注明出處http://m.tkk7.com/sxyx2008/謝謝合作!!!

    BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
      215 Posts :: 1 Stories :: 674 Comments :: 0 Trackbacks

    本文電子版文檔下載
    State
    、Decision 、Task活動詳解:

    State表示一個等待狀態(tài)。當(dāng)流程實例執(zhí)行到state節(jié)點時會暫停下來(處于等待狀態(tài)),流程的執(zhí)行會在外部觸發(fā)器被調(diào)用之前一直等待(會暫停)

    Decision條件判斷節(jié)點,表示在多條路徑中選擇一條。一個 decision 活動擁有很多個傳出的轉(zhuǎn)移。流程的執(zhí)行到達一個 decision 活動時,會自動進行計算來決定采用哪個傳出的轉(zhuǎn)移(滿足條件時,向下執(zhí)行,沒有符合條件時會停留在decision活動的上一個活動)

    Task任務(wù)組件,主要用來為流程實例分配任務(wù)。通常與form表單相關(guān)聯(lián).(會暫停下來)

    State節(jié)點示例

    無分支的state節(jié)點

    流程定義文件:

    <?xml version="1.0" encoding="UTF-8"?>

    <process name="demo" xmlns="http://jbpm.org/4.3/jpdl">

       <start g="134,113,48,48" name="start">

          <transition g="-53,-17" name="to state" to="state"/>

       </start>

       <state g="219,204,92,52" name="state">

          <transition g="-41,-17" name="to end" to="end"/>

       </state>

       <end g="329,301,48,48" name="end"/>

    </process>

    測試代碼:

    ProcessInstance processInstance=executionService.startProcessInstanceByKey("demo");

            System.out.println("流程實例Id:"+processInstance.getId());

            System.out.println("流程定義Id:"+processInstance.getProcessDefinitionId());

            //判斷當(dāng)前是否位于start節(jié)點

            System.out.println("是否位于start節(jié)點:"+processInstance.isActive("start"));//false

            //判斷當(dāng)前是否位于state節(jié)點

            System.out.println("是否位于state節(jié)點:"+processInstance.isActive("state"));//true

            //判斷流程是否結(jié)束

            System.out.println("判斷流程是否結(jié)束:"+processInstance.isEnded());//false

            System.out.println("------------------------>使流程繼續(xù)向下執(zhí)行");

            //使流程繼續(xù)向下執(zhí)行

            //ProcessInstance instanceState=executionService.signalExecutionById(processInstance.getId());

            //此處也可以這么寫

            ProcessInstance instanceState=executionService.signalExecutionById(processInstance.getId(),"to end");

            //to end為流程定義中用于連接state和end節(jié)點之間transition的name屬性的值

            //判斷當(dāng)前是否位于state節(jié)點

            System.out.println("是否位于state節(jié)點:"+instanceState.isActive("state"));//false

            //判斷流程是否結(jié)束

            System.out.println("判斷流程是否結(jié)束:"+instanceState.isEnded());//true

    執(zhí)行結(jié)果:

    流程實例Id:demo.7

    流程定義Id:demo-1

    是否位于start節(jié)點:false

    是否位于state節(jié)點:true

    判斷流程是否結(jié)束:false

    ------------------------>使流程繼續(xù)向下執(zhí)行

    是否位于state節(jié)點:false

    判斷流程是否結(jié)束:true

    有分支的state節(jié)點:

    注意:在此流程定義中在state節(jié)點后含有2個分支(2個transition 即to 400和to 200),那么在使流程實例從state節(jié)點向下執(zhí)行的時候需要明確給出transition的方向name屬性的值,否則流程實例會一直處于state節(jié)點

    executionService.signalExecutionById(processInstance.getId(), "to 200");

    流程定義文件:

    <?xml version="1.0" encoding="UTF-8"?>

    <process name="demo" xmlns="http://jbpm.org/4.3/jpdl">

       <start g="347,27,48,48" name="start">

          <transition g="-53,-17" name="to state" to="state"/>

       </start>

       <state g="329,132,92,52" name="state">

          <transition name="to 200" to="200" g="-41,-17"/>

          <transition name="to 400" to="400" g="-41,-17"/>

       </state>

       <end g="358,321,48,48" name="end"/>

       <state name="200" g="420,226,92,52">

          <transition name="to end" to="end" g="-41,-17"/>

       </state>

       <state name="400" g="266,225,92,52">

          <transition name="to end" to="end" g="-41,-17"/>

       </state>

    </process>

    測試代碼:

    ProcessInstance processInstance=executionService.startProcessInstanceByKey("demo");

            System.out.println("------------------------>使流程繼續(xù)向下執(zhí)行");

            System.out.println("------------------------>使流程流向200");

            ProcessInstance processInstance200=executionService.signalExecutionById(processInstance.getId(), "to 200");

            System.out.println("當(dāng)前流程是否位于200節(jié)點---->"+processInstance200.isActive("200"));//true

            System.out.println("當(dāng)前流程是否結(jié)束---->"+processInstance200.isEnded());//false

            /*System.out.println("------------------------>使流程流向400");

            ProcessInstance processInstance400=executionService.signalExecutionById(processInstance.getId(), "to 400");

            System.out.println("當(dāng)前流程是否位于400節(jié)點---->"+processInstance400.isActive("400"));

            System.out.println("當(dāng)前流程是否結(jié)束---->"+processInstance400.isEnded());*/

    執(zhí)行結(jié)果:

    ------------------------>使流程繼續(xù)向下執(zhí)行

    ------------------------>使流程流向200

    當(dāng)前流程是否位于200節(jié)點---->true

    當(dāng)前流程是否結(jié)束---->false

    流向400的自己測試

    由于流程定義中200和400均為state節(jié)點,所以流程在流經(jīng)200或400節(jié)點后仍會停留在該節(jié)點,以下代碼完成流程實例從start->200->end這一過程

    ProcessInstance processInstance=executionService.startProcessInstanceByKey("demo");

            //查詢該流程實例的活動節(jié)點

            System.out.println(processInstance.findActiveActivityNames());

            //因為流程實例啟動后,它會自動向下執(zhí)行,直到遇到state或task等節(jié)點時暫停下來,在我們的流程定義文件中緊跟在start后的節(jié)點為state,所以流程實例會在state節(jié)點暫停下來

            Execution execution=processInstance.findActiveExecutionIn("state");//查詢當(dāng)前流程實例的當(dāng)前節(jié)點

            ProcessInstance processInstance200=executionService.signalExecutionById(execution.getId(), "to 200");//此時流程流向200

            System.out.println("當(dāng)前流程是否位于200節(jié)點---->"+processInstance200.isActive("200"));//true

            System.out.println("當(dāng)前流程是否結(jié)束---->"+processInstance200.isEnded());//false

            //使流程繼續(xù)向下執(zhí)行(結(jié)束)

            System.out.println("-------使流程繼續(xù)向下執(zhí)行(結(jié)束)------->");

            //由于200節(jié)點后沒有分支僅有end這一節(jié)點,所以200與end之間transition的name屬性的值可以省略,當(dāng)然加上更好

            ProcessInstance instance=executionService.signalExecutionById(processInstance200.getId());//流程執(zhí)行到end,結(jié)束流程實例

            System.out.println("當(dāng)前流程是否結(jié)束---->"+instance.isEnded());//true

    執(zhí)行結(jié)果:

    [state]

    當(dāng)前流程是否位于200節(jié)點---->true

    當(dāng)前流程是否結(jié)束---->false

    -------使流程繼續(xù)向下執(zhí)行(結(jié)束)------->

    當(dāng)前流程是否結(jié)束---->true

    Decision節(jié)點示例

    流程圖:

    流程定義:

    在使用Decision時,一個Decision活動應(yīng)配置為以下三種中的一種

    decision 會檢查每一個傳出的轉(zhuǎn)移里的內(nèi)置條件。流程的執(zhí)行會采用第一個內(nèi)置條件為

    true 或者沒有設(shè)置內(nèi)置條件的轉(zhuǎn)移

    第一種:使用Decision內(nèi)置條件(返回true或false)

        即在流程定義中設(shè)置每一個transition的子節(jié)點condition,并為每一個condition填充expr屬性

    形如:

    <condition expr="${coder=='200'}"></condition>

    詳細的流程定義

    <?xml version="1.0" encoding="UTF-8"?>

    <process name="decision" xmlns="http://jbpm.org/4.3/jpdl">

       <start g="61,51,48,48" name="開始">

          <transition g="-47,-17" name="to waite" to="waite"/>

       </start>

       <decision g="188,160,48,48" name="gowhere">

          <transition g="-41,-17" name="to 200" to="200">

           <condition expr="${coder=='200'}"></condition>

          </transition>

          <transition g="-41,-17" name="to 500" to="500">

           <condition expr="${coder=='500'}"></condition>

          </transition>

          <transition g="-41,-17" name="to 404" to="404">

           <condition expr="${coder=='404'}"></condition>

          </transition>

       </decision>

       <state g="386,143,92,52" name="200">

          <transition g="-47,-17" name="to 結(jié)束" to="結(jié)束"/>

       </state>

       <state g="296,261,92,52" name="500">

          <transition g="-47,-17" name="to 結(jié)束" to="結(jié)束"/>

       </state>

       <state g="197,389,92,52" name="404">

          <transition g="-47,-17" name="to 結(jié)束" to="結(jié)束"/>

       </state>

       <end g="498,407,48,48" name="結(jié)束"/>

       <state g="114,97,92,52" name="waite">

          <transition g="-65,-17" name="to gowhere" to="gowhere"/>

       </state>

    </process>

    觀察紅色標(biāo)注的部分

    測試代碼:

    Map<String, String> map=new HashMap<String, String>();

            //coder為流程定義中表達式的名稱

            map.put("coder", "200");

            ProcessInstance processInstance=executionService.startProcessInstanceByKey("decision",map);

            System.out.println("流程是否處于waite節(jié)點?"+processInstance.isActive("waite"));//true

            ProcessInstance processInstanceDecision=executionService.signalExecutionById(processInstance.getId());

            System.out.println("流程是否處于waite節(jié)點?"+processInstanceDecision.isActive("waite"));//false

            System.out.println("流程是否處于gowhere節(jié)點?"+processInstanceDecision.isActive("gowhere"));//false

            System.out.println("流程是否處于200節(jié)點?"+processInstanceDecision.isActive("200"));//true

            System.out.println("流程是否處于404節(jié)點?"+processInstanceDecision.isActive("404"));//false

            System.out.println("流程是否處于500節(jié)點?"+processInstanceDecision.isActive("500"));//false

    代碼說明:

    在一開始定義了一個Map,在程序中手動為coder(詳見流程定義中的condition的expr屬性)賦值200,當(dāng)流程實例啟動時運行到decision時會自動計算每一個transition節(jié)點子節(jié)點condition里面的expr屬性(詳見流程定義中),如果某一內(nèi)置條件(condition)執(zhí)行為true,則就將流程執(zhí)行到該節(jié)點。在使用此種方式時, condition的expr中設(shè)置的下一活動的活動名稱(name),而不是transition的name屬性.這里緊跟在decision活動后有三個活動200、404、500且三個活動名稱依次為200、404、500,所以程序中為coder賦值200就表示將流程執(zhí)行到200這個活動.

    執(zhí)行結(jié)果:

    流程是否處于waite節(jié)點?true

    流程是否處于waite節(jié)點?false

    流程是否處于gowhere節(jié)點?false

    流程是否處于200節(jié)點?true

    流程是否處于404節(jié)點?false

    流程是否處于500節(jié)點?false

    第二種:為流程定義中decision活動設(shè)置expr屬性,decision 表達式返回類型為字符串的向外轉(zhuǎn)移的名字,使用此種方式不用再去為每一個transition設(shè)置condition子節(jié)點

    形如:

    <decision g="188,160,48,48" name="gowhere" expr="${towhere}">

    這里towhere就表示流程流經(jīng)decision活動后要流經(jīng)的下一個transition的name屬性的值

    詳細的流程定義文件:

    <?xml version="1.0" encoding="UTF-8"?>

    <process name="decision" xmlns="http://jbpm.org/4.3/jpdl">

       <start g="61,51,48,48" name="開始">

          <transition g="-47,-17" name="to waite" to="waite"/>

       </start>

       <decision g="188,160,48,48" name="gowhere" expr="${towhere}">

          <transition g="-41,-17" name="to 200" to="200">

          </transition>

          <transition g="-41,-17" name="to 500" to="500">

          </transition>

          <transition g="-41,-17" name="to 404" to="404">

          </transition>

       </decision>

       <state g="386,143,92,52" name="200">

          <transition g="-47,-17" name="to 結(jié)束" to="結(jié)束"/>

       </state>

       <state g="296,261,92,52" name="500">

          <transition g="-47,-17" name="to 結(jié)束" to="結(jié)束"/>

       </state>

       <state g="197,389,92,52" name="404">

          <transition g="-47,-17" name="to 結(jié)束" to="結(jié)束"/>

       </state>

       <end g="498,407,48,48" name="結(jié)束"/>

       <state g="114,97,92,52" name="waite">

          <transition g="-65,-17" name="to gowhere" to="gowhere"/>

       </state>

    </process>

    重點關(guān)注紅色標(biāo)注的地方

    執(zhí)行代碼:

    Map<String, String> map=new HashMap<String, String>();

            // towhere為流程定義中表達式的名稱

            map.put("towhere", "to 200");

            ProcessInstance processInstance=executionService.startProcessInstanceByKey("decision",map);

            System.out.println("流程是否處于waite節(jié)點?"+processInstance.isActive("waite"));//true

            ProcessInstance processInstanceDecision=executionService.signalExecutionById(processInstance.getId());

            System.out.println("流程是否處于waite節(jié)點?"+processInstanceDecision.isActive("waite"));//false

            System.out.println("流程是否處于gowhere節(jié)點?"+processInstanceDecision.isActive("gowhere"));//false

            System.out.println("流程是否處于200節(jié)點?"+processInstanceDecision.isActive("200"));//true

            System.out.println("流程是否處于404節(jié)點?"+processInstanceDecision.isActive("404"));//false

            System.out.println("流程是否處于500節(jié)點?"+processInstanceDecision.isActive("500"));//false

    代碼解釋:

    從流程圖中我們可以看出decision后有三個transition,且每個transition的name屬性的值依次為to 200、to 404、to 500.在代碼中聲明了一Map對象,并為該Map添加一個以towhere作為鍵to 200位置的元素,然后使流程向下執(zhí)行.那么當(dāng)流程實例流經(jīng)decision活動時,會計算decision節(jié)點expr的值,從中選擇下一個transition的名稱,然后向下執(zhí)行.

    使用此種方式為decision節(jié)點設(shè)置expr屬性,設(shè)置的是下一個transition的name屬性,請與第一種情況加以區(qū)別(第一種情況設(shè)置的下一活動的name)

    執(zhí)行結(jié)果:

    流程是否處于waite節(jié)點?true

    流程是否處于waite節(jié)點?false

    流程是否處于gowhere節(jié)點?false

    流程是否處于200節(jié)點?true

    流程是否處于404節(jié)點?false

    流程是否處于500節(jié)點?false

    第三種:為decision配置一個handler的類(在流程定義中在decision節(jié)點內(nèi)部配置<handler/>子節(jié)點,并設(shè)置該元素的class屬性為你自己的類)該類實現(xiàn)了org.jbpm.api.jpdl.DecisionHandler.你需要賦寫

    String decide(OpenExecution execution);方法即可,在該方法最終返回decision活動后的下一個transition的name屬性的值

    形如:

    <handler class="com.jbpm.decision.handler.HandlerDecision"></handler>

    這里class="com.jbpm.decision.handler.HandlerDecision"就表示實現(xiàn)了org.jbpm.api.jpdl.DecisionHandler的自定義類,你只需要賦寫String decide(OpenExecution execution) 方法,在該方法最終返回decision活動后的下一個transition的name屬性的值

    詳細的流程定義文件:

    <?xml version="1.0" encoding="UTF-8"?>

    <process name="decision" xmlns="http://jbpm.org/4.3/jpdl">

       <start g="61,51,48,48" name="開始">

          <transition g="-47,-17" name="to waite" to="waite"/>

       </start>

       <decision g="188,160,48,48" name="gowhere">

         <handler class="com.jbpm.decision.handler.HandlerDecision"></handler>

          <transition g="-41,-17" name="to 200" to="200">

          </transition>

          <transition g="-41,-17" name="to 500" to="500">

          </transition>

          <transition g="-41,-17" name="to 404" to="404">

          </transition>

       </decision>

       <state g="386,143,92,52" name="200">

          <transition g="-47,-17" name="to 結(jié)束" to="結(jié)束"/>

       </state>

       <state g="296,261,92,52" name="500">

          <transition g="-47,-17" name="to 結(jié)束" to="結(jié)束"/>

       </state>

       <state g="197,389,92,52" name="404">

          <transition g="-47,-17" name="to 結(jié)束" to="結(jié)束"/>

       </state>

       <end g="498,407,48,48" name="結(jié)束"/>

       <state g="114,97,92,52" name="waite">

          <transition g="-65,-17" name="to gowhere" to="gowhere"/>

       </state>

    </process>

    請關(guān)注紅色標(biāo)注部分:

    測試代碼:

    Map<String, String> map=new HashMap<String, String>();

            //towhere為流程定義中表達式的名稱

            map.put("towhere", "執(zhí)行到200這個活動");

            //map.put("towhere", "執(zhí)行到404這個活動");

            //map.put("towhere", "執(zhí)行到500這個活動");

            ProcessInstance processInstance=executionService.startProcessInstanceByKey("decision",map);

            System.out.println("流程是否處于waite節(jié)點?"+processInstance.isActive("waite"));//true

            ProcessInstance processInstanceDecision=executionService.signalExecutionById(processInstance.getId());

            System.out.println("流程是否處于waite節(jié)點?"+processInstanceDecision.isActive("waite"));//false

            System.out.println("流程是否處于gowhere節(jié)點?"+processInstanceDecision.isActive("gowhere"));//false

            System.out.println("流程是否處于200節(jié)點?"+processInstanceDecision.isActive("200"));//true

            System.out.println("流程是否處于404節(jié)點?"+processInstanceDecision.isActive("404"));//false

            System.out.println("流程是否處于500節(jié)點?"+processInstanceDecision.isActive("500"));//false

    處理類:

    package com.jbpm.decision.handler;

    import org.jbpm.api.jpdl.DecisionHandler;

    import org.jbpm.api.model.OpenExecution;

    @SuppressWarnings("serial")

    public class HandlerDecision implements DecisionHandler {

        @Override

        public String decide(OpenExecution execution) {

            String towhere=(String) execution.getVariable("towhere");

            String result = null;

            if("執(zhí)行到200這個活動".equals(towhere)){

                result="to 200";

            }else if("執(zhí)行到404這個活動".equals(towhere)){

                result="to 404";

            }else if("執(zhí)行到500這個活動".equals(towhere)){

                result="to 500";

            }

            return result;

        }

    }

    代碼解釋:

    在測試代碼中同樣創(chuàng)建了一個map對象,然后為該map對象添加了一個以towhere為鍵的值,并在流程實例向下執(zhí)行的時候傳遞該map對象。

    在HandlerDecision處理類中,通過execution.getVariable("towhere");獲取towhere的value,然后依次判斷,看是否與之前放進去的值匹配,若匹配的話就返回到一個你想使流程向那執(zhí)行的transition的name屬性的值.至此流程就會沿著這個值的方向向下執(zhí)行.

    執(zhí)行結(jié)果:

    流程是否處于waite節(jié)點?true

    流程是否處于waite節(jié)點?false

    流程是否處于gowhere節(jié)點?false

    流程是否處于200節(jié)點?true

    流程是否處于404節(jié)點?false

    流程是否處于500節(jié)點?false

    需要說明的是代碼中為map對象設(shè)置的鍵值跟流程定義無任何關(guān)系,你可以任意設(shè)置,只要符合map的使用規(guī)律即成,完了在流程實例向下執(zhí)行的時候順帶傳遞此map對象,最后在自定義的處理類中根據(jù)之前的設(shè)置的鍵來獲取值,最終返回一個你期望到達的transition即可。

    Task是一個任務(wù)活動,主要是在流程實例經(jīng)過活動時為某一人或組指派任務(wù)(流程到達此活動時會暫停下來)

    Task有一個可選的assignee屬性

    第一, assignee用來指示用戶, 負責(zé)完成任務(wù)的人。分配人是一個任務(wù)中的字符串屬性 引用一個用戶。(直接指定一個字符串)

    第二,這個屬性默認會當(dāng)做表達式來執(zhí)行。(指定一個表達式,然后在代碼里為該表達式賦值) 如:在這里任務(wù)被分配給#{order.owner}。這意味著首先使用order這個名字查找一個對象。 其中一個查找對象的地方是這個任務(wù)對應(yīng)的流程變量。 然后getOwner()方法會用來 獲得用戶id, 引用的用戶負責(zé)完成這個任務(wù)。

    示例:

    流程定義圖

    第一種情況:(直接指定一個字符串)

    流程定義文件:

    <?xml version="1.0" encoding="UTF-8"?>

    <process name="task" xmlns="http://jbpm.org/4.3/jpdl">

       <start g="99,112,48,48" name="start">

          <transition g="-47,-17" name="to task" to="task"/>

       </start>

       <task g="155,221,92,52" name="task" assignee="lisi">

          <transition g="-41,-17" name="to end" to="end"/>

       </task>

       <end g="260,350,48,48" name="end"/>

    </process>

    關(guān)注紅色部分

    解釋,在task中直接將任務(wù)指派給lisi

    測試代碼(查看lisi的任務(wù)列表)

    ProcessInstance processInstance=executionService.startProcessInstanceByKey("task");

            System.out.println("流程是否處于task節(jié)點?"+processInstance.isActive("task"));//true

            System.out.println("流程實例Id:"+processInstance.getId());

            List<Task> list=taskService.findPersonalTasks("lisi");

            for (Task task : list) {

                System.out.println("任務(wù)活動名稱:"+task.getActivityName());

                System.out.println("流程實例Id:"+task.getExecutionId());

                System.out.println("任務(wù)活動Id:"+task.getId());

                System.out.println("任務(wù)活動創(chuàng)建時間:"+task.getCreateTime());

                System.out.println("任務(wù)活動進度:"+task.getProgress());

                System.out.println("任務(wù)活動分配給:"+task.getAssignee());

            }

    代碼解釋:

    使用taskService.findPersonalTasks("lisi");即可取得lisi的任務(wù)列表

    執(zhí)行結(jié)果:

    流程是否處于task節(jié)點?true

    流程實例Id:task.7

    任務(wù)活動名稱:task

    流程實例Id:task.7

    任務(wù)活動Id:8

    任務(wù)活動創(chuàng)建時間:2010-09-29 11:54:34.25

    任務(wù)活動進度:null

    任務(wù)活動分配給:lisi

    第二種情況:(為task指定一表達式)

    流程定義文件:

    <?xml version="1.0" encoding="UTF-8"?>

    <process name="task" xmlns="http://jbpm.org/4.3/jpdl">

       <start g="99,112,48,48" name="start">

          <transition g="-47,-17" name="to task" to="task"/>

       </start>

       <task g="155,221,92,52" name="task" assignee="${taskAssignee}">

          <transition g="-41,-17" name="to end" to="end"/>

       </task>

       <end g="260,350,48,48" name="end"/>

    </process>

    關(guān)注紅色部分

    解釋,在task中使用了表達式${taskAssignee}該值在程序執(zhí)行時動態(tài)分配

    測試代碼(查看任務(wù)列表)

    Map<String,String> map=new HashMap<String, String>();

            map.put("taskAssignee", "lisi");

            ProcessInstance processInstance=executionService.startProcessInstanceByKey("task",map);

            System.out.println("流程是否處于task節(jié)點?"+processInstance.isActive("task"));//true

            System.out.println("流程實例Id:"+processInstance.getId());

            List<Task> list=taskService.findPersonalTasks("lisi");

            for (Task task : list) {

                System.out.println("任務(wù)活動名稱:"+task.getActivityName());

                System.out.println("流程實例Id:"+task.getExecutionId());

                System.out.println("任務(wù)活動Id:"+task.getId());

                System.out.println("任務(wù)活動創(chuàng)建時間:"+task.getCreateTime());

                System.out.println("任務(wù)活動進度:"+task.getProgress());

                System.out.println("任務(wù)活動分配給:"+task.getAssignee());

            }

    代碼解釋:

    在程序一開始創(chuàng)建了一個map對象,并為該map添加一個元素,其鍵為流程定義中的taskAssignee值任意分配,然后傳遞該map,最后查詢?nèi)蝿?wù)列表

    執(zhí)行效果:

    流程是否處于task節(jié)點?true

    流程實例Id:task.7

    任務(wù)活動名稱:task

    流程實例Id:task.7

    任務(wù)活動Id:9

    任務(wù)活動創(chuàng)建時間:2010-09-29 11:58:07.359

    任務(wù)活動進度:null

    任務(wù)活動分配給:lisi

    最后說明一下,在jbpm中表達式$(),#()均可以成功解析

    posted on 2010-09-29 13:52 雪山飛鵠 閱讀(4087) 評論(0)  編輯  收藏 所屬分類: jbpm4
    主站蜘蛛池模板: 久久久久免费视频| 亚洲av片不卡无码久久| 成人黄动漫画免费网站视频 | 国产男女爽爽爽免费视频| 亚洲精品在线播放| 久久夜色精品国产亚洲av| 国产精品深夜福利免费观看 | 亚洲av日韩av无码黑人| 亚洲国产a级视频| 国产免费人成视频在线观看| 蜜桃成人无码区免费视频网站 | 免费看又黄又爽又猛的视频软件| 亚洲色图综合网站| 亚洲一区精品中文字幕| 亚洲七七久久精品中文国产| 日韩免费在线观看| 国产又大又黑又粗免费视频| 成年在线观看网站免费| 久久久高清免费视频 | 亚洲婷婷在线视频| 国产精品亚洲精品青青青| 亚洲人精品亚洲人成在线| 亚洲高清视频在线| 美女被爆羞羞网站在免费观看| 日韩欧美亚洲国产精品字幕久久久| 风间由美在线亚洲一区| 一区二区三区免费在线视频| 青青操视频在线免费观看| 美女视频黄的免费视频网页| 久久久久国产免费| 成全视频免费高清| 亚洲毛片αv无线播放一区| 亚洲最大视频网站| 免费精品国产自产拍在线观看| 精品无码一级毛片免费视频观看| 色欲色香天天天综合网站免费 | 国产午夜亚洲精品不卡| 免费无码又爽又刺激网站直播| 免费人成在线视频| 国产亚洲综合色就色| 精品无码专区亚洲|