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

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

Activiti

2019-11-14 23:28:28
字體:
來源:轉載
供稿:網友
Activiti - 設置會簽

前些天在群里聊工作流和Activiti,群里有人分享了自己的工作流引擎開源項目,大伙紛紛問這問那(比如為什么突然自己搞個PRocess engine、有沒有eclipse plugin、能不能繪制流程圖等等)。

現實生活中的工作流程,我們也經常碰到需要會簽的情況,支持會簽是很必要的。正好有兩個人問道:支持會簽嗎? 也有人也問道:什么是會簽?

如果從process engine的角度上講呢?可以說一個task節點下有多個task instance。而不是一個從task節點執行到多個task節點(這樣就是ParallelGateway了)。

如何讓一個Task節點創建出多個instance?官網是這樣說的:

To make an activity multi-instance, the activity xml element must have a multiInstanceLoopCharacteristics child element.

既然是創建多個實例,我們就需要用一個集合去存放。我們可以在multiInstanceLoopCharacteristics標簽中加入一個attribute —— activiti:collection=""。該attribute的值是當前流程實例的變量名,也就是啟動該引擎實例時傳入的Map的key。而這個Map的value必須是java.util.List類型的。但我們無需在意這個List的泛型是什么。假如泛型是String的話,act_ru_variable中變量的TYPE_字段值是string。也許我可以讓泛型是Map,那么該變量的TYPE_字段值是serialize,僅此而已。本文中activiti:collection="assigneeList"

我們在數據庫里記錄了這個集合,但我們也需要記錄這個記錄中的每一個元素。記錄每一個元素時他們的名字應該是什么?我們可以用activiti:elementVariable=""比如我設置:

    activiti:elementVariable="assignee"

假設我們現在要的效果是:有三個人可以會簽,但只要兩個人簽署便可通過。我們需要設置特定的條件來結束當前這個task。這時我們需要在multiInstanceLoopCharacteristics下增加一個子節點——completionCondition。比如我是這樣設置的:

    <completionCondition>        ${signCount >= 2 }    </completionCondition>

好了,這樣就是整個Task的定義了。(事實上我完全可以不用signCount實現這個效果。)

<userTask id="counterTask_1" name="COUNTERTASK">    <multiInstanceLoopCharacteristics        isSequential="false"        activiti:collection="assigneeList"        activiti:elementVariable="assignee">        <completionCondition>${signCount >= 2 }</completionCondition>    </multiInstanceLoopCharacteristics></userTask>

部署后的結果如下:

此處省略部署流程的操作,我們來看一下如何申請該流程。如下我在頁面中定義了三個審核人員:

<label>    <input type="checkbox" name="assigneeList" value="kim"/>kim</label><label>    <input type="checkbox" name="assigneeList" value="jin"/>jin</label><label>    <input type="checkbox" name="assigneeList" value="king"/>king</label>

然后在java中接收并start:

private String[] assigneeList;Map<String, Object> processInstVar = new HashMap<String, Object>();//必須是ListprocessInstVar.put("assigneeList", Arrays.asList(assigneeList));processInstVar.put("signCount", 0);runtimeService.startProcessInstanceById(processId, processInstVar);

啟動結果如下:

然后是執行,method只接收一個taskId:

List<Task> taskResultList = taskService.createTaskQuery().taskId(taskId)                .list();//當前executionIdString currentExecutionId = taskResultList.get(0).getExecutionId();//當前簽署總數String currentSignCount = StringUtils.defaultString(runtimeService        .getVariable(currentExecutionId, "signCount").toString(), "0");//簽署數+1runtimeService.setVariable(currentExecutionId, "signCount",        Integer.parseInt(currentSignCount) + 1);//完成taskService.complete(taskId);

我們執行了剛才創建的三個實例之一,結果是:

再執行一次,會簽節點的實例已經不存在于actrutask表了,因為我設置的是“有兩個人簽署便通過”。如下圖,當前task已經不是會簽的task了,相關的變量也消失不見了。

最后說我之前為什么說道‘事實上我完全可以不用signCount實現這個效果’,因為我們有:

所以我完全沒有必要自己去定義一個變量去記錄執行了多少次


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人在线免费观看视视频| 亚洲欧美国产视频| 欧美视频在线免费| 亚洲精品国产欧美| 日韩av在线直播| 久久精品视频va| 日本不卡高字幕在线2019| 中文字幕日韩在线播放| 最近2019年中文视频免费在线观看| 欧美成人小视频| 亚洲国产成人精品一区二区| 欧美性生活大片免费观看网址| 亚洲美女自拍视频| 国产精品自拍网| 国产日韩av高清| 美女啪啪无遮挡免费久久网站| 色av吧综合网| 亚洲综合精品一区二区| 国产美女久久久| 国产精品h在线观看| 欧美极品欧美精品欧美视频| 麻豆一区二区在线观看| 欧美精品一区在线播放| 欧美成人精品一区二区| 成人在线一区二区| 狠狠躁18三区二区一区| 欧美在线影院在线视频| 久久99热精品这里久久精品| 日韩亚洲精品视频| 欧美亚洲另类激情另类| 日韩精品亚洲精品| 国产精品男人的天堂| 色偷偷av一区二区三区乱| 亚洲娇小xxxx欧美娇小| 韩日精品中文字幕| 粉嫩老牛aⅴ一区二区三区| 精品国产乱码久久久久久天美| 亚洲一区二区三区在线免费观看| 国产一区香蕉久久| 人体精品一二三区| 欧美久久精品午夜青青大伊人| 国产一区二区三区高清在线观看| 欧美精品成人91久久久久久久| 色综合色综合久久综合频道88| 91老司机精品视频| 国产有码一区二区| 国产亚洲人成网站在线观看| 成人激情免费在线| 久久久久久香蕉网| 亚洲男人天天操| 日韩欧美视频一区二区三区| 久久69精品久久久久久久电影好| 欧美日韩中文字幕在线| 亚洲欧洲av一区二区| 精品视频在线播放免| 日韩精品中文字幕在线播放| 国产精品美女久久久久久免费| 亚洲国产精品大全| 亚洲精品国产拍免费91在线| 亚洲欧美在线第一页| 国产精品无av码在线观看| 国产精品久久久久久久久免费| 少妇高潮久久久久久潘金莲| 国产精品网址在线| 日本一区二区三区在线播放| 久久久久久伊人| 亚洲欧美在线磁力| 亚洲国产精品一区二区三区| 亚洲日本成人女熟在线观看| 91精品在线播放| 91亚洲永久免费精品| 91免费国产网站| 精品成人久久av| 亚洲男人av在线| 欧美做受高潮电影o| 2019中文在线观看| 久久久久久久久久婷婷| 91精品国产自产在线观看永久| 日韩av电影免费观看高清| 欧美激情a∨在线视频播放| 亚洲精品在线视频| 国产欧美欧洲在线观看| 亚洲电影免费观看高清完整版在线| 国产亚洲在线播放| 欧美—级a级欧美特级ar全黄| 亚洲第一精品电影| 国产精品夜色7777狼人| 日韩国产中文字幕| 日韩中文字幕在线视频播放| 国产视频999| 久久成人这里只有精品| 欧美日本啪啪无遮挡网站| 亚洲另类欧美自拍| 性视频1819p久久| 欧美激情二区三区| 国模私拍一区二区三区| 国产日韩欧美电影在线观看| 亚洲第一二三四五区| 国产成人精品一区二区| 欧美久久精品一级黑人c片| 国产在线一区二区三区| 久久精品成人欧美大片古装| 黄色一区二区三区| 国产国语刺激对白av不卡| 久久亚洲精品一区二区| 久久97久久97精品免视看| 热99精品里视频精品| 91亚洲国产成人精品性色| 最近2019中文免费高清视频观看www99| 亚洲第一区在线| 亚洲专区国产精品| 久久精品国产欧美亚洲人人爽| 欧美国产在线视频| 欧美电影在线播放| 欧美成人午夜激情视频| 欧美肥婆姓交大片| 日韩免费在线播放| 亚洲女人被黑人巨大进入al| 国产欧美一区二区三区四区| 久久精品99国产精品酒店日本| 国产女同一区二区| 中文字幕在线亚洲| 欧美日韩第一视频| 午夜精品国产精品大乳美女| 久久久久久香蕉网| 国产一区二区三区在线观看网站| 国产精品永久免费| 久久精品成人一区二区三区| 久久在线精品视频| 久久久久国产一区二区三区| 精品国产91久久久| 午夜精品在线观看| 一区二区三区无码高清视频| 日韩av影片在线观看| 精品亚洲va在线va天堂资源站| 久久久久国产精品www| 国产精自产拍久久久久久| 2019国产精品自在线拍国产不卡| 成人欧美一区二区三区在线湿哒哒| 国产午夜精品一区二区三区| 在线观看中文字幕亚洲| 久久久久久久一区二区三区| 午夜精品蜜臀一区二区三区免费| 亚洲第一精品夜夜躁人人爽| 国产精品偷伦免费视频观看的| www国产精品视频| 免费91在线视频| 亚洲欧洲自拍偷拍| 色偷偷亚洲男人天堂| 亚洲国产精品久久久久久| 久久99精品久久久久久青青91| 国产精品久久久久久久久久久久| 在线成人激情黄色| 国模私拍一区二区三区| 超碰日本道色综合久久综合| 国产999精品久久久影片官网| 国产精国产精品| 国内成人精品视频| 亚洲一区精品电影| 亚洲欧美在线x视频| 亚洲第一视频在线观看| 欧美电影院免费观看| 插插插亚洲综合网| 亚洲精品一区二区久|