Activiti 是一個針對企業使用者、開發人員 、系統管理者的輕量級工作流業務管理平台(Business Process Management, 簡稱BPM),其核心是使用 Java 開發的快速 、 穩定的 BPMN2.0 流程引擎 。Activiti是開源的,并基于Apache許可發行。Activiti可以在任何Java應用程式、伺服器、叢集或雲中運作,它可以與 Spring 完美內建。
Activiti Github位址:https://github.com/Activiti/Activiti
工作流的生命周期
在介紹Activiti的表結構之前,非常有必要先對工作流的生命周期有一定的了解。因為在對業務流程進行設計與運作的過程中,都在展現着工作流的生命周期,并且,Activiti的表結構中有一部分也是基于生命周期設計的。
一個完整的工作流生命周期會經過以下五個階段:定義、釋出、執行、監控、優化。

- 定義:業務需求人員收集業務需求,然後交由開發人員加工轉化為計算機可以識别的流程定義
- 釋出:開發人員打包各種資源,然後在系統管理平台中釋出流程定義(包括流程定義檔案 、自定義表單 、 任務監聽類等資源 )
- 執行:流程引擎按照事先定義好的流程,以任務驅動的方式予以執行
- 監控:監控依賴執行階段 。業務人員在辦理任務的同時,引擎會收集每個任務的辦理結果,然後根據結果做出處理
- 優化:對整個流程的運作結果進行分析,在此基礎上進一步改進,并再次開始一個新的周期
Activiti表結構
Activiti(6.0.0)總共包含28張資料表,所有的表名預設以"ACT_"開頭
Activiti資料表按類别可以分為五大類:
資料表分類 | 描述 |
---|---|
ACT_GE_* | 通用資料表(2張) |
ACT_HI_* | 曆史資料表(8張) |
ACT_ID_* | 身份資料表(4張) |
ACT_RE_* | 倉庫資料表(3張) |
ACT_RU_* | 運作時資料表(9張) |
上述總共26張表,剩餘兩張表:
資料表分類 | 描述 |
---|---|
ACT_EVT_LOG | 事件日志資料表 |
ACT_PROCDEF_INFO | 流程定義動态改變資訊表 |
一、通用資料表
資料表分類 | 描述 |
---|---|
ACT_GE_PROPERTY | 屬性表 |
ACT_GE_BYTEARRAY | 資源表 |
1. ACT_GE_PROPERTY
該表為屬性表,儲存流程引擎的KV鍵值屬性,用于存儲流程引擎的級别資訊,包括資料庫曆史操作和資料庫版本等,在啟動流程引擎時建立。上圖中底下的三條記錄是建立資料庫時自動插入的,插入語句寫在建表的 sql 語句中。
該表的字段說明:
-
:流程執行相關的執行個體計數器功能,預設是關閉的,開啟後在 ACT_RU_EXECUTION 表的後幾個帶有 *COUNT 的字段會顯示計數資訊,可以通過配置 activiti.cfg.xml 添加以下語句來開啟配置。cfg.execution-related-entities-cout
-
:記錄資料庫的主鍵ID,每對資料庫進行一次修改(如部署流程定義檔案)該值就會發生變化:next.dbid值+步長,預設步長idBlockSize = 2500。其中的 VALUE_ 和 REV_ 初始值為1,上圖中表示我總共進行了59次修改:1+59*2500=147501next.dbid
-
:表示對Activiti整個資料庫的操作曆史,這裡是 create,表示目前僅做過建立表的操作,若整個資料庫是從5.x的版本進行更新的,那麼該值就會是update的值,同時 REV_ 的值會+1schema.history
-
:表示Activiti的資料庫的版本schema.history
通過 ManagementService 的 getProperties 方法可以擷取屬性值
/**
* 擷取屬性表中的屬性資訊
*/
public static void getProperties(){
ManagementService managementService = processEngine.getManagementService();
Map<String, String> properties = managementService.getProperties();
for(String str: properties.keySet()){
logger.info(str + ":" + properties.get(str));
}
}
2. ACT_GE_BYTEARRAY
該表為資源表,用于儲存Activiti運作過程中的資源(如:流程定義檔案bpmn和對應的png圖檔,需要持久化儲存的序列化對象,手工添加的資源資訊)
關鍵字段說明:
-
:該字段為版本号,本質是一個樂觀鎖,若我們對資源檔案進行過修改操作,該值+1;REV_
-
:流程資源檔案對應的流程部署ID;DEPLOYMENT_ID_
-
:流程定義檔案一般都是以大對象進行儲存,類型為BLOB;點選該字段的值,若為PNG的圖檔資訊,我們将顯示方式由文本改為圖檔,會在下方顯示流程圖檔;BYTES_
-
:表示該資源是手動添加的還是自動生成的,0為使用者添加,1為引擎生成;若我們在部署資源檔案的時候隻添加了bpmn檔案,流程引擎會為我們自動生成 png的圖檔GENERATED_
除了以資源檔案添加的方式,也可以通過手工方式添加資源資訊,我們以插入一個字元串為例:
public static void testByteArrayInsert(){
ManagementService managementService = processEngine.getManagementService();
managementService.executeCommand(new Command<Object>() {
@Override
public Object execute(CommandContext commandContext) {
ByteArrayEntityImpl entity = new ByteArrayEntityImpl();
entity.setId("10004");
entity.setName("testSource");
entity.setBytes("testSource".getBytes());
commandContext.getByteArrayEntityManager().insert(entity);
// commandContext.getByteArrayEntityManager().deleteByteArrayById("10004");
return null;
}
});
}
二、流程定義存儲表
資料表分類 | 描述 |
---|---|
ACT_RE_DEPLOYMENT | 流程部署表 |
ACT_RE_PROCDEF | 流程定義表 |
ACT_RE_MODEL | 流程模型表 |
1. ACT_RE_DEPLOYMENT
該表為流程部署表,用于記錄流程的部署情況(流程部署的名稱、類别、key辨別、租戶ID、部署時間等)
關鍵字段說明:
-
:用于标記該流程所屬的流程類型CATEGORY_
-
:流程辨別KEY_
-
:該流程所屬的租戶,不同租戶對應的流程為不同的版本TENANT_ID_
想要對上表中的字段有更清晰地認識,可以操縱下面這段代碼:
/**
* 部署流程定義檔案
*/
private static void deploy() {
Deployment deployment = processEngine.getRepositoryService()
.createDeployment()
.addClasspathResource("diagrams/MyProcess.bpmn")
.addClasspathResource("diagrams/MyProcess.png")
.name("FirstApprove流程")
.category("測試流程")
.tenantId("A")
.key("simpleForm")
.activateProcessDefinitionsOn(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS")
.parse("2020-04-15 09:46:00:545"))
.deploy();
System.out.println("流程部署ID:"+deployment.getId());
System.out.println("流程部署Name:"+deployment.getName());
}
1)當我們部署了一個流程的時候,預設是激活狀态的,若我們設定了 activateProcessDefinitionsOn則表示流程未激活,需要以手工方式進行激活。2)上述代碼執行後,相應的有三張表發生了變化,ACT_GE_BYTEARRAY 表中增加了兩條資源記錄,ACT_RE_DEPLOYMENT 表中增加了一條部署記錄,ACT_RE_PROCDEF 表中增加了一條流程定義資訊記錄。
2. ACT_RE_PROCDEF
該表為流程定義資訊表,用于記錄部署的流程定義資訊
關鍵字段說明:
-
:表示的是樂觀鎖(對流程的修改操作後,該字段值加1,如對流程定義的暫定和激活操作)REV_
Activiti6.0表結構完整分析記錄工作流的生命周期Activiti表結構一、通用資料表二、流程定義存儲表三、運作時資料表四、身份資料表五、曆史資料表六、剩餘兩張表 -
:流程定義類别,表示的是流程定義檔案(xml格式)中的targetNamespace的屬性值CATEGORY_
Activiti6.0表結構完整分析記錄工作流的生命周期Activiti表結構一、通用資料表二、流程定義存儲表三、運作時資料表四、身份資料表五、曆史資料表六、剩餘兩張表 -
:流程定義檔案的 name 屬性值NAME_
-
:流程定義檔案的ID值,我們一般以 KEY 值作為流程定義的唯一表辨別,并且通過 KEY 值來啟動流程定義檔案KEY_
-
:流程定義的版本号,隻要流程定義的ID值不變,每進行一次流程釋出,該值加1VERSION_
-
和DESCRIPTION
對應流程定義檔案:HAS_START_FORM_KEY_
Activiti6.0表結構完整分析記錄工作流的生命周期Activiti表結構一、通用資料表二、流程定義存儲表三、運作時資料表四、身份資料表五、曆史資料表六、剩餘兩張表 -
:流程暫停狀态,1為激活狀态,2為暫停挂起狀态。SUSPENSION_STATE_
3. ACT_RE_MODEL
模型資訊表(用于WEB設計器),在5.x的版本用于WEB設計器,一些json資料會存在此表中,這裡不做過多說明。
三、運作時資料表
資料表分類 | 描述 |
---|---|
ACT_RU_EXECUTION | 運作時流程執行個體執行表 |
ACT_RU_TASK | 運作時任務表 |
ACT_RU_IDENTITYLINK | 運作時參與者資訊表 |
ACT_RU_VARIABLE | 運作時變量表 |
ACT_RU_EVENT_SUBSCR | 運作時事件訂閱表 |
ACT_RU_JOB | 運作時作業表 |
ACT_RU_TIMER_JOB | 運作時定時器表 |
ACT_RU_SUSPENDED_JOB | 運作時暫停作業表 |
ACT_RU_DEADLETTER_JOB | 運作時死信表 |
1. ACT_RU_EXECTION
該表記錄運作時的流程執行個體與分支的執行資訊
該運作時執行表為啟動下面的流程圖後的結果,我們啟動該流程,首先進入到callActivity(調用式子流程),該子流程會調用第二幅圖中的流程,是以運作時的執行表會有這麼多條記錄(包括兩條主幹線,以及其他的節點記錄)。
關鍵字段說明:
-
:為業務辨別,主流程才會擁有業務主鍵,可以在開啟流程執行個體的時候注入,該業務辨別隻有在主線流程中可以檢視到。BUSINESS_KEY_
Activiti6.0表結構完整分析記錄工作流的生命周期Activiti表結構一、通用資料表二、流程定義存儲表三、運作時資料表四、身份資料表五、曆史資料表六、剩餘兩張表 -
:父執行ID,對應的是上一執行資訊的ID号PARENT_ID_
-
:調用式子流程的父執行ID(一般為CallActiviti所對應的ID)SUPER_EXEC_
-
:是否活動流程執行個體,0為非活動,1為活動(一個分支節點完成,則該分支的IS_ACTIVE會變為0)IS_ACTIVE_
- IS_CONCURRENT_:是否并發,0為非并發,1為并發(這裡的并發并非并行執行的概念)
-
:是否全局流程執行,0非,1是IS_SCOPE
- IS_EVENT_SCOPE_:是否激活狀态,沒有使用到事件的情況下,一般都為0
- IS_MI_ROOT_:是否多執行個體根執行流
-
:挂起狀态,1正常,2挂起SUSPENSION_STATE_
- CACHED_ENT_STATE_:緩存結束狀态
- LOCK_TIME_:鎖定時間,鎖定時間是不被并發操作的
剩下的幾個帶有 _COUNT_的字段為其他幾張運作時表的記錄數,需要配置activiti.cfg.xml的
<property name=“enableExecutionRelationshipCounts” value=“true”/>計數器功能,才生效
2. ACT_RU_TASK
該表記錄運作時的 userTask任務資訊。
關鍵字段說明:
- PARENT_TASK_ID_:父節點任務ID,由父節點間接啟動
- OWNER_:擁有人,一般情況下為空,隻有在委托時才有值
- DELEGATION_:委托狀态,PENDING委托中,RESOLVED已處理,無委托則為空
-
:優先級别,預設為50(Main Config中可配置)PRIORITY_
-
:過期時間(Main Config中可配置)DUE_DATE_
-
:類别(Main Config中可配置)CATEGORY_
-
:挂起狀态,1正常,2挂起SUSPENSION_STATE_
-
:該任務節點的擷取時間CLAIM_TIME_
3. ACT_RU_VARIABLE
記錄運作時的變量資訊
關鍵字段說明:
-
:類型integer,String,double,json,null等TYPE_
-
:資源資訊ID,若該變量需要用到資源表中的資訊,則對應的是資源表中的ID值BYTEARRAY_ID_
-
:存儲持久化對象的對象IDTEXT2_
4. ACT_RU_IDENTITYLINK
記錄運作時相關的使用者資訊
關鍵字段說明:
TYPE_
:類型assignee,candidate,owner,starter,participant
設定使用者類别的方式為:
@Test
public void query(){
TaskService taskService = processEngine.getTaskService();
Task task = taskService.createTaskQuery().processDefinitionKey("simpleProcess").singleResult();
// taskService.setOwner(task.getId(), "李四");
taskService.addUserIdentityLink(task.getId(), "趙六", IdentityLinkType.STARTER);
}
5. ACT_RU_EVENT_SUBSCR
事件訂閱表,記錄與消息事件定義相關的資訊
事件訂閱表可以通過
部署并啟動
包含消息事件的流程定義來測試
(案例1)消息開始事件
流程定義檔案(my-process-message.bpmn20.xml)如下:
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:activiti="http://activiti.org/bpmn"
xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC"
xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema"
expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test">
<message id="messageStart" name="my-message"></message>
<process id="myProcessMessage">
<startEvent id="start" >
<messageEventDefinition messageRef="messageStart" />
</startEvent>
<sequenceFlow id="flow1" sourceRef="start" targetRef="someTask" />
<userTask id="someTask" name="Activiti is awesome!" />
<sequenceFlow id="flow2" sourceRef="someTask" targetRef="end" />
<endEvent id="end" />
</process>
</definitions>
(案例2)中間捕獲消息事件定義
流程定義檔案(my-process-message-received.bpmn20.xml)如下:
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:activiti="http://activiti.org/bpmn"
xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC"
xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema"
expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test">
<message id="messageStart" name="my-message"></message>
<process id="myProcessCatchMessage">
<startEvent id="start" />
<sequenceFlow id="flow1" sourceRef="start" targetRef="message-received" />
<intermediateCatchEvent id = "message-received">
<messageEventDefinition messageRef="messageStart" />
</intermediateCatchEvent>
<!--<userTask id="someTask" name="Activiti is awesome!" />-->
<sequenceFlow id="flow2" sourceRef="message-received" targetRef="end" />
<endEvent id="end" />
</process>
</definitions>
關鍵字段說明:
-
:事件訂閱類型,message,signalEVENT_TYPE_
-
:事件訂閱名稱EVENT_NAME_
-
:流程定義節點IDACTIVITY_ID_
-
:配置資訊(若在開始事件中配置了消息事件定義,則該配置資訊即流程定義ID)CONFIGURATION_
-
:建立時間,時間戳形式CREATED_
6. ACT_RU_JOB
運作時作業表,這一類的總共有四張表:
- ACT_RU_JOB:記錄異步任務的資料
- ACT_RU_TIMER_JOB:記錄定時事件的資料
- ACT_RU_SUSPENDED_JOB:記錄暫停的的資料,比如流程中有一個定時任務,如果把這個任務停止工作了,這個任務會在ACT_RU_SUSPENDED_JOB中寫入資料
- ACT_RU_DEADLETTER_JOB:無法執行工作表的資料, 如果一個任務執行了很多次,都無法執行,那麼這個任務會寫到該表中
備注ps:
- ACT_RU_JOB 和 ACT_RU_TIMER_JOB 兩張表的表結構為一模一樣的
- ACT_RU_JOB 比 ACT_RU_DEADLETTER_JOB 多了三個字段LOCK_EXP_TIME_、LOCK_OWNER_和 RETRIES
- ACT_RU_JOB 比 ACT_RU_SUSPENDED_JOB 多了兩個字段LOCK_EXP_TIME_、LOCK_OWNER_
(案例)定時開始事件
啟動一個定時事件事件流程(my-process-job.bpmn20.xml):
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:activiti="http://activiti.org/bpmn"
xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC"
xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema"
expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test">
<process id="my-process">
<startEvent id="start">
<timerEventDefinition> <!-- 配置定時器 -->
<timeCycle>R5/PT10S</timeCycle> <!--循環執行5次,每10秒執行一次-->
</timerEventDefinition>
</startEvent>
<sequenceFlow id="flow1" sourceRef="start" targetRef="someTask" />
<userTask id="someTask" name="Activiti is awesome!" />
<sequenceFlow id="flow2" sourceRef="someTask" targetRef="end" />
<endEvent id="end" />
</process>
</definitions>
關鍵字段說明:
-
:鎖定節點LOCK_OWNER_
-
:是否唯一EXCLUSIVE_
-
:重試次數3RETRIES_
-
:異常堆棧(資源表ID)EXCEPTION_STACK_ID_
-
:異常資訊EXCEPTION_MSG_
-
:重複表達式,如R5/PT10SREPEAT_
-
:處理器類型,如 timer-start-eventHANDLER_TYPE_
-
:處理器配置,如 {“activityId”:“start”}表示配置的節點為 start 節點HANDLER_CFG_
四、身份資料表
資料表分類 | 描述 |
---|---|
ACT_ID_USER | 使用者基本資訊表 |
ACT_ID_GROUP | 使用者組表 |
ACT_ID_MEMBERSHIP | 使用者與組關系表 |
ACT_ID_INFO | 使用者擴充資訊表 |
這一類表是五大類中最簡單,最容易了解的,但一般在項目開發中,我們通常會使用自己的使用者表。
Activiti中對使用者和使用者組的支援自帶有POJO對象,并支援序列化。如下面表示 ACT_ID_USER 表對應的POJO類
1. ACT_ID_USER
該表存放使用者的基本資訊,包括使用者名、電子郵箱、密碼、照片等
REV
:仍然表示的是樂觀鎖,表示對該使用者進行修改的次數。
public static void setUser() throws Exception {
User user = identityService.newUser("004");
user.setFirstName("劉");
user.setLastName("啟明");
user.setEmail("[email protected]");
user.setPassword("123456");
identityService.saveUser(user);
//為某個使用者設定照片
InputStream imInputStream = IdentityServiceTest.class.getClassLoader()
.getResourceAsStream("diagrams/photo.jpeg");
byte[] data = toByteArray(imInputStream);
String mimeType = "photo";
Picture picture = new Picture(data, mimeType);
identityService.setUserPicture("001" ,picture);
System.out.println("設定使用者成功");
}
2. ACT_ID_GROUP
使用者組表存放使用者的群組資訊,包括使用者組名、組類型。
private static void setGroup(){
Group userGroup = identityService.newGroup("01");
userGroup.setName("使用者組");
userGroup.setType("使用者");
identityService.saveGroup(userGroup);
System.out.println("設定組成功");
}
當然,上面的 ID_值,不一定要是數字,可以是字元串類型。
3.ACT_ID_MEMBERSHIP
使用者關系表存放使用者隸屬的表,通過 IdentityServiceImpl 的 createMembership(String userId, String groupId) 方法可以直接建立使用者組關系
private static void setMembership(){
identityService.createMembership("001", "01");
identityService.createMembership("003", "01");
identityService.createMembership("004", "01");
identityService.createMembership("002", "02");
identityService.createMembership("003", "03");
identityService.createMembership("004", "04");
System.out.println("設定使用者關系成功");
}
同樣的,這裡的 USER_ID_ 和 GROUP_ID_ 隻要是字元串類型就可以。
4. ACT_ID_INFO
用于存放除基本資訊外的的擴充資訊,如年齡、位址、聯系方式等
private static void setInfo(){
identityService.setUserInfo("001", "age", "18");
identityService.setUserInfo("001", "address", "BeiJing");
}
關鍵字段說明:
-
:資訊類型,可以設定使用者賬号(account)、使用者資訊(userinfo)和NULL三種值。TYPE_
-
:使用者賬号的密碼字段,目前的Activiti版本并沒有使用該字段。PASSWORD_
-
:該資訊的父資訊ID,如果一條資料設定了父資訊ID,則表示該資料是使用者賬号(資訊)的明細資料,例如一個賬号有激活日期,那麼激活日期就是該賬号的明細資料,此處使用了自關聯來實作。PARENT_ID_
五、曆史資料表
資料表分類 | 描述 |
---|---|
ACT_HI_ACTINST | 曆史節點資訊表 |
ACT_HI_ATTACHMENT | 曆史附件表 |
ACT_HI_COMMENT | 曆史評論表 |
ACT_HI_DETAIL | 曆史詳細變更表 |
ACT_HI_IDENTITYLINK | 曆史參與者表 |
ACT_HI_PROCINST | 曆史流程執行個體表 |
ACT_HI_TASKINST | 曆史任務表 |
ACT_HI_VARINST | 曆史變量表 |
1. ACT_HI_PROCINST
曆史流程執行個體表,該表記錄流程引擎啟動的流程執行個體。隻要有一條執行個體啟動,無論該執行個體是否完成,都會在該表中插入一條記錄。
關鍵字段說明:
-
:記錄流程開始到結束的時間,機關為毫秒DURATION_
-
:調用式子流程中的父流程的ID值SUPER_PROCESS_INSTANCE_ID_
2. ACT_HI_ACTINST
曆史節點資訊表,該表記錄流程運作過程中的每個節點資訊,包括開始節點、結束節點、使用者任務、服務任務、網關等
關鍵字段說明:
-
:隻有使用者任務才有TASK_ID值TASK_ID_
-
:針對callActivity調用式子流程中的被調用的流程執行個體ID值CALL_PROC_INST_ID_
3. ACT_HI_TASKINST
使用者任務執行個體表,記錄曆史的使用者任務資訊
關鍵字段說明:
-
:父節點調用的任務IDPARENT_TASK_ID_
-
:該節點的擷取時間CLAIM_TIME_
4. ACT_HI_ATTACHMENT
曆史附件表,記錄曆史附件相關資訊
關鍵字段說明:
1.USER_ID_:使用者ID
2.NAME_:附件名稱
3.DESCRIPTION_:添加的描述資訊
4.TYPE_:附件類型
5.
URL
:附件位址
6.
CONTENT_ID_
:位元組表的ID
8.TIME_:建立時間
在添加附件的時候需要指定任務ID和流程執行個體ID,并通過指定URL來聲明附件的位址,如下所示:
//添加附件
taskService.createAttachment("url", task.getId(), processInstance.getId(), "name", "desc", "/diagrams/test.jpg");
5. ACT_HI_COMMENT
曆史評論表,為使用者任務設定評論或者設定所有者。
關鍵字段說明:
- TYPE_:意見記錄類型,有event和comment,當是comment時為處理意見。
-
:值為下列内容中的一種:AddUserLink、DeleteUserLink、AddGroupLink、DeleteGroupLink、AddComment、AddAttachment、DeleteAttachment,值為AddComment時為處理意見。ACTION_
-
:用于存放流程産生的資訊,比如審批意見MESSAGE_
- FULL_BLOB_:全部消息,類型為LONGBLOB
下面示例的代碼用于添加曆史評論,指定流程任務和流程執行個體,添加評論資訊:MESSAGE_
//添加流程所有者
taskService.setOwner(task.getId(), "user1");//ACTION_顯示為AddUserLink
//添加評論
taskService.addComment(task.getId(), task.getProcessInstanceId(), "record note1");//ACTION_顯示為AddComment
taskService.addComment(task.getId(), task.getProcessInstanceId(), "record note2");
6. ACT_HI_DETALIL
曆史細節表,用于記錄曆史的詳細資訊。
關鍵字段說明:
1.
TYPE_
:類型有FormProperty 和VariableUpdate
2. DOUBLE_、LONG_、TEXT_:分别顯示變量為浮點型、整型和字元串型的變量,TEXT2為存儲JPA持久化對象時,才會有值,此值為對象ID
3.
VAR_TYPE_
:類型說明: jpa-entity、boolean、bytes、serializable(可序列化)、自定義type(根據你自身配置)、 CustomVariableType、date、double、integer、long、null、short、string
修改曆史變量并且記錄在act_hi_detail表中:
//下面設定初始的變量為key0 : value0,key1 : value1等
RuntimeService runtimeService = processEngine.getRuntimeService();
Map<String, Object> variables = Maps.newHashMap();
variables.put("key0", "value0");
variables.put("key1", "value1");
variables.put("key2", "value2");
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("simpleProcess", variables);
//修改key1的值為value1_1,相應的修改記錄在act_hi_detail表中
runtimeService.setVariable(processInstance.getId(),"key1","value1_1");
7. ACT_HI_IDENTITYLINK
該表為曆史使用者表,用于記錄曆史的參與者資訊
TYPE_:類型,主要分為以下幾種:assignee、candidate、owner、starter 、participant
六、剩餘兩張表
1. ACT_EVT_LOG
事件日志表,用于記錄與事件相關的一些日志資訊,如流程執行個體結束、建立變量、變量删除、建立任務和任務配置設定等。
事件日志表,該表不可修改,隻能寫入和删除
關鍵字段說明:
-
:自增主鍵(Activiti表中唯一有自增主鍵的表)LOG_NR_
-
:類型,包括:PROCESSINSTANCE_START、PROCESSINSTANCE_END、ACTIVITY_STARTED、ACTIVITY_COMPLETED、SEQUENCEFLOW_TAKEN、VARIABLE_CREATED、VARIABLE_UPDATED、TASK_ASSIGNED、TASK_CREATEDTYPE_
-
:時間戳,寫入事件的時間點TIME_STAMP_
-
:使用者USER_ID_
-
:内容資料,json序列化存到資料庫中,内容非常大(為該表中的最核心的資料,官方建議不要存儲到mysql中而是存到MongoDB或者elisticsearch中,自動完成對json資料的解析)DATA_
-
:鎖定節點LOCK_OWNER_
-
:鎖定時間LOCK_TIME_
-
:是否正在執行IS_PROCESSED_
2. ACT_PROCDEF_INFO
該表為流程定義擴充表,一般不常用
- PROC_DEF_ID_:流程定義ID
-
:為主鍵ID,對應ACT_GE_BYTEARRAY的IDINFO_JSON_ID_