1. 程式人生 > >Activiti 多例項實現會籤功能

Activiti 多例項實現會籤功能

一個任務需要多個角色進行審批或者表決,根據這些審批結果來決定流程的走向。實現以上任務,activiti已經提供了支援,可以使用BPMN規範的多例項活動來實現。

1.Activiti多例項:

多例項節點是在業務流程中定義重複環節的一個方法。 從開發角度講,多例項和迴圈是一樣的: 它可以根據給定的集合,為每個元素執行一個環節甚至一個完整的子流程, 既可以順序依次執行也可以併發同步執行

多例項是在一個普通的節點上添加了額外的屬性定義 (所以叫做'多例項特性'),這樣執行時節點就會執行多次。 下面的節點都可以成為一個多例項節點:

根據規範的要求,每個上級流程為每個例項建立分支時都要提供如下變數:

  • nrOfInstances:例項總數

  • nrOfActiveInstances:當前活動的,比如,還沒完成的,例項數量。 對於順序執行的多例項,值一直為1。

  • nrOfCompletedInstances:已經完成例項的數目。

可以通過execution.getVariable(x)方法獲得這些變數。

另外,每個建立的分支都會有分支級別的本地變數(比如,其他例項不可見, 不會儲存到流程例項級別):

  • loopCounter:表示特定例項的在迴圈的索引值。可以使用activiti的elementIndexVariable屬性修改loopCounter的變數名。

圖形標記

如果節點是多例項的,會在節點底部顯示三條短線。 三條線表示例項會並行執行。 三條線表示順序執行。

Xml內容

要把一個節點設定為多例項,節點xml元素必須設定一個multiInstanceLoopCharacteristics子元素。

Xml內容

要把一個節點設定為多例項,節點xml元素必須設定一個multiInstanceLoopCharacteristics子元素。

<multiInstanceLoopCharacteristicsisSequential="false|true">
 ...
</multiInstanceLoopCharacteristics>

isSequential屬性表示節點是進行 順序執行還是並行執行。

例項的數量會在進入節點時計算一次。 有一些方法配置它。一種方法是使用loopCardinality子元素直接指定一個數字。

<multiInstanceLoopCharacteristicsisSequential="false|true"><loopCardinality>5</loopCardinality></multiInstanceLoopCharacteristics>

也可以使用結果為整數的表示式:

<multiInstanceLoopCharacteristicsisSequential="false|true"><loopCardinality>${nrOfOrders-nrOfCancellations}</loopCardinality></multiInstanceLoopCharacteristics>

另一個定義例項數目的方法是,通過loopDataInputRef子元素,設定一個型別為集合的流程變數名。 對於集合中的每個元素,都會建立一個例項。 也可以通過inputDataItem子元素指定集合。 下面的程式碼演示了這些配置:

<userTaskid="miTasks"name="My Task ${loopCounter}"activiti:assignee="${assignee}"><multiInstanceLoopCharacteristicsisSequential="false"><loopDataInputRef>assigneeList</loopDataInputRef><inputDataItemname="assignee"/></multiInstanceLoopCharacteristics></userTask>

假設assigneeList變數包含這些值[kermit, gonzo, foziee]。 在上面程式碼中,三個使用者任務會同時建立。每個分支都會擁有一個用名為assignee的流程變數, 這個變數會包含集合中的對應元素,在例子中會用來設定使用者任務的分配者。

loopDataInputRefinputDataItem的缺點是1)名字不好記, 2)根據BPMN 2.0格式定義,它們不能包含表示式。activiti通過在 multiInstanceCharacteristics中設定 collection和 elementVariable屬性解決了這個問題:

<userTaskid="miTasks"name="My Task"activiti:assignee="${assignee}"><multiInstanceLoopCharacteristicsisSequential="true"activiti:collection="${myService.resolveUsersForTask()}"activiti:elementVariable="assignee"></multiInstanceLoopCharacteristics></userTask>

多例項節點在所有例項都完成時才會結束。也可以指定一個表示式在每個例項結束時執行。 如果表示式返回true,所有其他的例項都會銷燬,多例項節點也會結束,流程會繼續執行。 這個表示式必須定義在completionCondition子元素中。

<userTaskid="miTasks"name="My Task"activiti:assignee="${assignee}"><multiInstanceLoopCharacteristicsisSequential="false"activiti:collection="assigneeList"activiti:elementVariable="assignee"><completionCondition>${nrOfCompletedInstances/nrOfInstances >= 0.6 }</completionCondition></multiInstanceLoopCharacteristics></userTask>

在這裡例子中,會為assigneeList集合的每個元素建立一個並行的例項。 當60%的任務完成時,其他任務就會刪除,流程繼續執行。

以上內容為Activiti使用者手冊的內容,下面實現一個簡單地流程 2.流程實現 流程圖為: properties: XML: <userTask id="usertask1" name="會籤" activiti:assignee="${assignee}">
      <multiInstanceLoopCharacteristics isSequential="false" activiti:collection="${assigneeList}" activiti:elementVariable="assignee">
        <completionCondition>${nrOfCompletedInstances/nrOfInstances >= 0.6 }</completionCondition> 
      </multiInstanceLoopCharacteristics>
</userTask>
釋出流程: Deployment deployment = repositoryService.createDeployment()
 .addClasspathResource("com/chq/ssh/test/activiti/deploy/huiqian.bpmn20.xml")
 .deploy();
啟動流程: List<String> assigneeList=new ArrayList<String>(); //分配任務的人員
assigneeList.add("tom");
assigneeList.add("jeck");
assigneeList.add("mary");
Map<String, Object> vars = new HashMap<String, Object>(); //引數
vars.put("assigneeList", assigneeList);
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("huiqian",vars);
查詢任務: 這時查詢以上三個人的任務,都會顯示有“會籤”這個任務 List<Task> tasks = taskService.createTaskQuery().taskAssignee("mary").list();
完成任務: 會籤節點設定的:${nrOfCompletedInstances/nrOfInstances >= 0.6 } 所有任務完成超過60%,剩餘的任務就會刪除,表示會籤通過。 上面一共設定了三個任務,當兩個完成時,超過60%。流程結束

相關推薦

Activiti 例項實現功能

一個任務需要多個角色進行審批或者表決,根據這些審批結果來決定流程的走向。實現以上任務,activiti已經提供了支援,可以使用BPMN規範的多例項活動來實現。 1.Activiti多例項: 多例項節點是在業務流程中定義重複環節的一個方法。 從開發角度講,多例項和

Linux下—mysql資料庫的例項實現

準備環境: centos7 安裝 yum install mariadb-server 規劃實現多例項的目錄結構、 埠:3306,3307, 3308 每個例項存放資料庫的資料夾 /data/mysql{3306,3307,3308} /data/mysql/3306/{etc,

activiti 流程走向異常 節點變數賦值為空問題

今天遇到一個問題,在會簽發起子流程時,沒有給節點分配人,結果導致,流程走向異常,細節如下。 如圖   流程如果正常流轉的話  應該走圈紅的部分  結束   但現在走的是圈紫色的部分    這個流程已經走錯了,那這是什麼原因呢?  經過仔細排查,認真分析,機智的我終於發現了

Linux-C下C/S架構例項,實現檔案傳輸功能

/*server_func.h*/ #ifndef SERVER_H #define SERVER_H #include<stdio.h> #include<stdlib.h> #include<string.h> #include

Activiti 租戶實現全過程

歡迎使用Markdown編輯器寫部落格 本Markdown編輯器使用StackEdit修改而來,用它寫部落格,將會帶來全新的體驗哦: Markdown和擴充套件Markdown簡潔的語法 程式碼塊高亮 圖片連結和圖片上傳 LaTex數學公式 UML序列圖和

activiti 例項任務

1.1.1. 前言分享牛原創(尊重原創 轉載對的時候第一行請註明,轉載出處來自分享牛http://blog.csdn.net/qq_30739519)我們在使用activiti 工作流引擎的時候,最常用的肯定是任務節點,因為在OA系統、審批系統、辦公自動化系統中核心的處理就是

ACTIVITI 5.22.0 流程退回上一節點,實現例項序列與並行退回

import java.util.ArrayList; import java.util.Date; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util

基於Flask實現檔案的上傳功能例項Web服務

flask是Python中非常輕量的Web框架,允許開發者以非常少的程式碼實現各類的Web應用,本文將簡單例項一個簡單Web的檔案上傳功能的開發。 環境介紹 Centos 7.2, virtual env 下的python 3。 安裝flask

activit工作流-流程(例項

使用工作流的時候有時會遇到這樣的一種情況就是一個任務需要幾個人一起審批,人數不定。這時常規的使用者任務就無法滿足要求,我們稱這種任務為會籤任務。 下面是我開發中的遇到的一個業務好遇到這種情況,記錄一下,以便小白參考。 流程圖: 說明:這是一個公文流轉(收文)流程,先是“

模擬Select-Options對象實現項數據輸入功能

按鈕 new select ont exce pub and append copy SPAN { font-family: "Courier New"; font-size: 10pt; color: #000000; background: #FFFFFF } .L0S

接口的態使用; 接口應用實例:U盤、打印機可以使用共同的USB接口,插入到電腦上實現各自的功能

插入 應用 es2017 使用 bsp 功能 jpg 實現 -1 接口的多態使用 接口應用實例:U盤、打印機可以使用共同的USB接口,插入到電腦上實現各自的功能。 接口的多態使用; 接口應用實例:U盤、打印機可以使用共同的USB接口,插入到電腦上實現各自的功能。

S2SH簡單例項註解版——登入功能實現

第一步:Spring4 整合 Hibernate4 Spring4 接管 Hibernate4 所有 Bean 例項,以及 SessionFactory,事務管理器; 泛型注入; Entity  package com.java1234.entity; import j

最新js實現複製貼上功能例項

功能:實現滑鼠點選複製內容 描述:使用與手機網站、pc等端。 實現點選複製貼上功能的程式碼例項: function copy_text(text) { if(text.indexOf('-') !== -1) {

RecycleView實現長按選全選刪除功能

一、功能: recycleView橫向列表,實現item新增,長按選擇,全選,全不選的刪除,滑動刪除功能。 用realm構建資料庫儲存列表資料。用FloatingActionButton 作為新增按鈕。 思路: activity頁面最下面新增一個帶有刪除tab的view,當長按ite

php實現手機定位功能例項

最近在做通過定位手機使用者,進行訊息推送,經過分析最終做法如下 mobile.php檔案 當用戶當手機訪問該頁面時,通過實現頁面表單隱藏封裝自動提交獲取手機瀏覽器經緯度並post給伺服器 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

vue基於mint-ui元件loadmore實現上拉載入更,下拉重新整理功能

這個是模擬手機寫的簡單樣式,不要在意這些細節,為了撐滿容器每次載入十二   那就開始程式碼了  ==》 先安裝 mint-ui 在main.js中引入mint-ui的css樣式:  import 'mint-ui/lib/style.css' 在

spring boot 整合mybatis實現分頁功能例項

1.匯入依賴 在你pom.xml檔案中新增如下整合 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:sc

基於mysqld_multi實現MySQL 5.7.24例項程序配置

MySQL多例項的原理 mysql多例項,簡單理解就是在一臺伺服器上,mysql服務開啟多個不同的埠(如3306、3307、3308)執行多個服務程序。這些 mysql 服務程序通過不同的 socket來監聽不同的資料埠,進而互不干涉的提供各自的服務。 在同一臺伺服器上,mysql 多

java實現excel下載功能例項

其實需求很簡單,就是點選按鈕後,向後臺傳入查詢條件,然後根據查詢條件獲取滿足條件的記錄通過excel下載。 方案一:使用ajax方式不可以原因 匯出excel算是檔案下載了,後臺需要向前臺(瀏覽器)寫檔案流,而ajax請求獲取的資料的都是字串(此點當時在除錯頁面的時候,Response響應中

公文流程在oa辦公上如何實現呢?

我們知道oa辦公上有很多辦公功能,比如工作流、工作報表、車輛管理、會議管理、文件管理、考勤管理、客戶管理等,都能很好地起到協助企業高效辦公的效果。 而在政府或企事業單位辦公中常常有公文會籤這一程式,公文會籤流程是對公文集思廣益,徵集各部分意見,確認公文是否閱讀的辦公流程。那麼公文會籤流程在oa辦公上如何