亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

工作流學習——Activiti流程實例、任務管理四步曲

2019-11-08 00:24:48
字體:
來源:轉載
供稿:網友

一、前言

 

    上一篇文章中我們將Activiti流程定義管理的知識進行了介紹,這篇文章我們繼續Activiti流程實例和任務管理的學習。

 

二、正文

 

流程實例(PRocessInstance )

 

    流程實例(ProcessInstance)和上一篇文章中流程定義(ProcessDefinition)的關系,與類和實例對象的關系有點像,ProcessDefinition是整個流程步驟的說明而ProcessInstance就是指流程定義從開始到結束的那個最大的執行路線。 

 

執行對象(Execution)

 

    提到ProcessInstance同時又會出現另一個名詞,那就是執行對象(Execution),Execution是按照ProcessDefinition的規則執行的當前的路線,

 

    如果ProcessDefinition只有一個執行路線的話,那么Execution和ProcessInstance就是完全一樣了如果ProcessDefinition中有多個執行路線的話,Execution和ProcessInstance可能是同一個也可能不是同一個。所以得出結論:一個流程中ProcessInstance有且只能有一個,而Execution可以存在多個。

 

任務(Task )

 

    任務(Task)應該比較好理解,就是當流程執行到某步驟或某環節時生產的任務信息。

 

    在上篇文章中我們將如何畫流程圖、如何部署流程定義已經介紹,流程定義和流程實例的關系剛才已經介紹了,所有現在我們就該開始啟動流程實例了:

代碼

 

啟動流程實例

[java] view plain copy/**  * 啟動流程實例  */  @Test  public void startProcessInstance() {      // 流程定義的key      String processDefinitionKey = "HelloWorld";      ProcessInstance pi = processEngine.getRuntimeService()// 與正在執行的流程實例和執行對象相關的Service              .startProcessInstanceByKey(processDefinitionKey);// 使用流程定義的key啟動流程實例,key對應HelloWorld.bpmn文件中id的屬性值,使用key值啟動,默認是按照最新版本的流程定義啟動      System.out.println("流程實例ID:" + pi.getId());      System.out.println("流程定義ID:" + pi.getProcessDefinitionId());  }  運行結果:

    流程實例ID:501

    流程定義ID:HelloWorld:2:404

 

說明:

 

    1)在數據庫的act_ru_execution正在執行的執行對象表中插入一條記錄

    2)在數據庫的act_hi_procinst程實例的歷史表中插入一條記錄

    3)在數據庫的act_hi_actinst活動節點的歷史表中插入一條記錄

    4)我們圖中節點都是任務節點,所以同時也會在act_ru_task流程實例的歷史表添加一條記錄

    5)在數據庫的act_hi_taskinst任務歷史表中也插入一條記錄。

 

 

查詢歷史流程實例

    

    流程實例啟動以后,我們也可以對某個流程實例一共一共執行了多少次流程進行查詢,因為我們本例中現在剛進行了一個流程,所以目前只能查出一個流程:

[java] view plain copy/**  * 查詢歷史流程實例  */  @Test  public void findHistoryProcessInstance(){      String processInstanceId="501";      HistoricProcessInstance hpi = processEngine.getHistoryService()              .createHistoricProcessInstanceQuery()              .processInstanceId(processInstanceId)              .singleResult();      System.out.println(hpi.getId() +"    "+hpi.getProcessDefinitionId()+"   "+ hpi.getStartTime()+"   "+hpi.getDurationInMillis());  }  運行結果:

    501    HelloWorld:2:404   Fri Jun 26 09:34:51 CST 2015   null

 

 

 

查詢當前的個人任務

    在上面講流程啟動后,因為該節點是任務節點所以在任務表中插入了任務的記錄,現在我們就通過辦理人將任務進行下查詢:

[java] view plain copy/**  * 查詢當前的個人任務  */  @Test  public void findMyPersonTask() {      String assignee = "張三"; // TODO      List<Task> list = processEngine.getTaskService()// 與正在執行的任務管理相關的service              .createTaskQuery()// 創建任務查詢對象              // 查詢條件              .taskAssignee(assignee)// 指定個人任務查詢,指定辦理人              // .taskCandidateGroup("")//組任務的辦理人查詢              // .processDefinitionId("")//使用流程定義ID查詢              // .processInstanceId("")//使用流程實例ID查詢              // .executionId(executionId)//使用執行對象ID查詢              /** 排序 */              .orderByTaskCreateTime().asc()// 使用創建時間的升序排列              // 返回結果集              // .singleResult() //返回唯一的結果集              // .count()//返回結果集的數量              // .listPage(firstResult, maxResults)//分頁查詢              .list();// 返回列表      if (list != null && list.size() > 0) {          for (Task task : list) {              System.out.println("任務ID:" + task.getId());              System.out.println("任務名稱:" + task.getName());              System.out.println("任務的創建時間:" + task.getCreateTime());              System.out.println("任務的辦理人:" + task.getAssignee());              System.out.println("流程實例ID:" + task.getProcessInstanceId());              System.out.println("執行對象ID:" + task.getExecutionId());              System.out.println("流程定義ID:" + task.getProcessDefinitionId());              System.out                      .println("##################################################");          }  運行結果:

    任務ID:504

    任務名稱:提交申請

    任務的創建時間:Fri Jun 2609:34:51 CST 2015

    任務的辦理人:張三

    流程實例ID:501

    執行對象ID:501

    流程定義ID:HelloWorld:2:404

    ##################################################

 

說明:

    1)因為是任務查詢,所以從processEngine中應該得到TaskService

    2)使用TaskService獲取到任務查詢對象TaskQuery

    3)為查詢對象添加查詢過濾條件,使用taskAssignee指定任務的辦理者(即查詢指定用戶的代辦任務),同時可以添加分頁排序等過濾條件

    4)調用list方法執行查詢,返回辦理者為指定用戶的任務列表

    5)任務ID、名稱、辦理人、創建時間可以從act_ru_task表中查到。

    6)在現在這種情況下,ProcessInstance相當于Execution

    7) 一個Task節點和Execution節點是1對1的情況,在task對象中使用Execution_來表示他們之間的關系

    8)任務ID在數據庫表act_ru_task中對應“ID_”列

 

完成任務

    查詢完任務后,我們接下來將這個任務id為504的任務進行完成:

[java] view plain copy/**  * 完成我的任務  */  @Test  public void compliteMyPersonTask() {      // 任務ID      String taskId = "504";      processEngine.getTaskService().complete(taskId);      ;      System.out.println("完成任務:任務ID:" + taskId);  }  運行結果:

    完成任務:任務ID:504

 

說明:

    1)是完成任務,所以從ProcessEngine得到的是TaskService。

    2)當執行完這段代碼,再以員工的身份去執行查詢的時候,會發現這個時候已經沒有數據了,因為正在執行的任務中沒有數據。

    3)對于執行完的任務,activiti將從act_ru_task表中刪除該任務,下一個任務會被插入進來。

    4)以”部門經理”的身份進行查詢,可以查到結果。因為流程執行到部門經理審批這個節點了。

    5)再執行辦理任務代碼,執行完以后以”部門經理”身份進行查詢,沒有結果。

    6)重復第3和4步直到流程執行完。

 

查詢歷史任務

    員工張三的任務已經完成,現在任務到部門經理李四了,如果我們現在仍然查詢張三的任務的話,自然是查詢不到了,只有查詢李四才可以查到,不過我們可以通過流程實例id查詢歷史任務,查詢歷史任務可以將已經辦理過的任務和現在正在執行的任務都查詢出來:

[java] view plain copy/**  * 查詢歷史任務  */  @Test  public void findHistoryTask(){      String processInstanceId="501";      List<HistoricTaskInstance> list = processEngine.getHistoryService()//與歷史數據(歷史表)相關的service              .createHistoricTaskInstanceQuery()//創建歷史任務實例查詢              .processInstanceId(processInstanceId)  //              .taskAssignee(taskAssignee)//指定歷史任務的辦理人              .list();      if(list!=null && list.size()>0){          for(HistoricTaskInstance hti:list){              System.out.println(hti.getId()+"    "+hti.getName()+"    "+hti.getProcessInstanceId()+"   "+hti.getStartTime()+"   "+hti.getEndTime()+"   "+hti.getDurationInMillis());              System.out.println("################################");          }      }       }  運行結果:

    504    提交申請   501   Fri Jun 26 09:34:51 CST2015   Fri Jun 26 09:50:50 CST 2015   959867

    ################################

    602    審批【部門經理】   501   Fri Jun 26 09:50:51 CST2015   null   null

    ################################

 

查詢流程是否結束

    我們還可以通過流程實例id查詢某個流程現在的狀態,是仍然在執行過程中呢,還是流程執行已經結束:

 

[java] view plain copy/**  * 查詢流程狀態(判斷流程正在執行,還是結束)  */  @Test  public void isProcessEnd(){      String processInstanceId =  "501";      ProcessInstance pi = processEngine.getRuntimeService()//表示正在執行的流程實例和執行對象              .createProcessInstanceQuery()//創建流程實例查詢              .processInstanceId(processInstanceId)//使用流程實例ID查詢              .singleResult();            if(pi==null){          System.out.println("流程已經結束");      }      else{          System.out.println("流程沒有結束");      }        }  

運行結果:

    流程沒有結束

 

三、總結

 

    我們這篇文章主要是流程實例、執行對象、任務以及他們之間的關系進行了學習,同時我們還將啟動和查詢流程實例、判斷流程實例是否執行結束、查看和辦理任務以及查詢歷史任務都進行了介紹。

http://blog.csdn.net/zwk626542417/article/details/46646565


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲国产日韩欧美综合久久| 精品国产依人香蕉在线精品| 最近中文字幕mv在线一区二区三区四区| 国产亚洲精品美女| 亚洲一区二区三区乱码aⅴ| 欧美亚洲午夜视频在线观看| 日韩中文字幕网址| 亚洲美女精品久久| 亚洲国模精品私拍| 日韩免费不卡av| 久久国产精品久久精品| 欧美激情在线观看视频| 午夜精品久久久久久久99热| 久久99久久久久久久噜噜| 亚洲人成五月天| 色综合色综合久久综合频道88| 亚洲激情小视频| 国产精品美女久久久久av超清| 日韩欧美国产一区二区| 中文字幕不卡av| 欧美黑人xxx| 欧美激情在线播放| 日韩中文字幕av| 亚洲高清免费观看高清完整版| 久久人人爽人人爽人人片av高请| 欧美大尺度激情区在线播放| 欧美精品videossex性护士| 国产精品日韩欧美综合| 色777狠狠综合秋免鲁丝| 尤物精品国产第一福利三区| 欧美日韩成人黄色| 国产成人精品一区| 日本精品在线视频| 国产精品久久久久久久天堂| 中文字幕精品av| 日本亚洲欧洲色α| 一色桃子一区二区| 亚洲精品久久久久久久久久久久| 性欧美视频videos6一9| 亚洲国产高清高潮精品美女| 欧美激情在线一区| 92版电视剧仙鹤神针在线观看| 欧美夫妻性视频| 久久视频中文字幕| 国产精品在线看| 日韩欧美在线观看| 91精品视频免费看| 夜夜嗨av色综合久久久综合网| 日韩欧美在线播放| 亚洲精品一区在线观看香蕉| 国内精品久久久久久中文字幕| 精品无人区太爽高潮在线播放| 国产精品视频在线观看| 国产视频精品一区二区三区| 国产玖玖精品视频| 日韩欧美一区二区三区| 亚洲丝袜av一区| 精品动漫一区二区三区| 中文字幕在线看视频国产欧美在线看完整| 欧美日韩亚洲网| 日韩欧美在线视频| 国产精品va在线播放我和闺蜜| 尤物yw午夜国产精品视频| 国产成人精品在线观看| 91精品视频免费| 亚洲网站视频福利| 亚洲一区中文字幕| 欧美黄色片在线观看| 久久91精品国产| 在线看福利67194| 亚洲女人被黑人巨大进入| 丝袜美腿精品国产二区| 青青草精品毛片| 久久国产天堂福利天堂| 人人澡人人澡人人看欧美| 亚洲福利视频网站| 亚洲欧美国产高清va在线播| 久久久精品一区二区三区| 欧美视频裸体精品| 欧美日韩一区二区三区在线免费观看| 欧美成人亚洲成人日韩成人| 日韩精品免费观看| 欧洲亚洲在线视频| 国产精品久久久久久av下载红粉| 欧美日韩国产精品一区| 国产精品欧美一区二区| 亚洲人高潮女人毛茸茸| 88xx成人精品| 日韩中文字在线| 菠萝蜜影院一区二区免费| 一区二区av在线| 亚洲欧美日韩国产中文| 久久综合伊人77777尤物| 自拍亚洲一区欧美另类| 国产精品综合不卡av| 欧美日韩亚洲天堂| 亚洲精品wwwww| 欧美专区日韩视频| 亚洲欧美在线磁力| 亚洲欧美另类自拍| 一区二区三区视频在线| 97成人精品视频在线观看| 日韩激情av在线免费观看| 欧美丰满少妇xxxxx做受| 国产日韩av在线播放| 国产精品视频自拍| 精品国产成人在线| 97在线日本国产| 亚洲综合日韩中文字幕v在线| 亚洲国产成人久久| 亚洲男人天天操| 中文字幕亚洲一区在线观看| 在线观看久久久久久| 精品久久久久久中文字幕一区奶水| 国产精品日韩欧美| 97视频在线观看成人| 国产xxx69麻豆国语对白| 欧美最猛性xxxx| 亚洲第一区在线| 午夜免费日韩视频| 久久久久久久久久久久久久久久久久av| 国产精品www网站| 亚洲福利视频专区| 国产精品第二页| 日韩欧美中文在线| 亚洲欧美一区二区三区久久| 精品久久久香蕉免费精品视频| 欧美亚洲激情在线| 午夜欧美不卡精品aaaaa| 欧美理论电影在线观看| 亚洲第一页自拍| 97在线观看视频国产| 亚洲成人av在线播放| 亚洲女性裸体视频| 久久偷看各类女兵18女厕嘘嘘| 日韩乱码在线视频| 亚洲国产精品专区久久| 中文字幕在线看视频国产欧美在线看完整| 成人黄在线观看| 国产成人精品久久| 国产成人av网| 国产日韩欧美电影在线观看| 国产人妖伪娘一区91| 国产精品美女久久久免费| 亚洲国产精品专区久久| 日韩欧美在线网址| 午夜精品一区二区三区在线视频| 成人午夜黄色影院| 亚洲成人久久久久| 久久精品一区中文字幕| 久久久久久久久久久亚洲| 国产精品免费久久久| 亚洲精品久久久久久久久久久| 一本一道久久a久久精品逆3p| 91精品国产乱码久久久久久久久| 中文字幕日韩欧美在线| 自拍亚洲一区欧美另类| 国产日韩在线播放| 都市激情亚洲色图| 日本精品性网站在线观看| 91国偷自产一区二区三区的观看方式| 久久久久久久久爱| 亚洲成av人影院在线观看| 亚洲男人天堂手机在线|