天天看點

Activiti6.0表結構完整分析記錄工作流的生命周期Activiti表結構一、通用資料表二、流程定義存儲表三、運作時資料表四、身份資料表五、曆史資料表六、剩餘兩張表

Activiti 是一個針對企業使用者、開發人員 、系統管理者的輕量級工作流業務管理平台(Business Process Management, 簡稱BPM),其核心是使用 Java 開發的快速 、 穩定的 BPMN2.0 流程引擎 。Activiti是開源的,并基于Apache許可發行。Activiti可以在任何Java應用程式、伺服器、叢集或雲中運作,它可以與 Spring 完美內建。

Activiti Github位址:https://github.com/Activiti/Activiti

工作流的生命周期

在介紹Activiti的表結構之前,非常有必要先對工作流的生命周期有一定的了解。因為在對業務流程進行設計與運作的過程中,都在展現着工作流的生命周期,并且,Activiti的表結構中有一部分也是基于生命周期設計的。

一個完整的工作流生命周期會經過以下五個階段:定義、釋出、執行、監控、優化。

Activiti6.0表結構完整分析記錄工作流的生命周期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

Activiti6.0表結構完整分析記錄工作流的生命周期Activiti表結構一、通用資料表二、流程定義存儲表三、運作時資料表四、身份資料表五、曆史資料表六、剩餘兩張表

該表為屬性表,儲存流程引擎的KV鍵值屬性,用于存儲流程引擎的級别資訊,包括資料庫曆史操作和資料庫版本等,在啟動流程引擎時建立。上圖中底下的三條記錄是建立資料庫時自動插入的,插入語句寫在建表的 sql 語句中。

Activiti6.0表結構完整分析記錄工作流的生命周期Activiti表結構一、通用資料表二、流程定義存儲表三、運作時資料表四、身份資料表五、曆史資料表六、剩餘兩張表

該表的字段說明:

  1. cfg.execution-related-entities-cout

    :流程執行相關的執行個體計數器功能,預設是關閉的,開啟後在 ACT_RU_EXECUTION 表的後幾個帶有 *COUNT 的字段會顯示計數資訊,可以通過配置 activiti.cfg.xml 添加以下語句來開啟配置。
  1. next.dbid

    :記錄資料庫的主鍵ID,每對資料庫進行一次修改(如部署流程定義檔案)該值就會發生變化:next.dbid值+步長,預設步長idBlockSize = 2500。其中的 VALUE_ 和 REV_ 初始值為1,上圖中表示我總共進行了59次修改:1+59*2500=147501
  2. schema.history

    :表示對Activiti整個資料庫的操作曆史,這裡是 create,表示目前僅做過建立表的操作,若整個資料庫是從5.x的版本進行更新的,那麼該值就會是update的值,同時 REV_ 的值會+1
  3. schema.history

    :表示Activiti的資料庫的版本

通過 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

Activiti6.0表結構完整分析記錄工作流的生命周期Activiti表結構一、通用資料表二、流程定義存儲表三、運作時資料表四、身份資料表五、曆史資料表六、剩餘兩張表

該表為資源表,用于儲存Activiti運作過程中的資源(如:流程定義檔案bpmn和對應的png圖檔,需要持久化儲存的序列化對象,手工添加的資源資訊)

關鍵字段說明:

  1. REV_

    :該字段為版本号,本質是一個樂觀鎖,若我們對資源檔案進行過修改操作,該值+1;
  2. DEPLOYMENT_ID_

    :流程資源檔案對應的流程部署ID;
  3. BYTES_

    :流程定義檔案一般都是以大對象進行儲存,類型為BLOB;點選該字段的值,若為PNG的圖檔資訊,我們将顯示方式由文本改為圖檔,會在下方顯示流程圖檔;
  4. GENERATED_

    :表示該資源是手動添加的還是自動生成的,0為使用者添加,1為引擎生成;若我們在部署資源檔案的時候隻添加了bpmn檔案,流程引擎會為我們自動生成 png的圖檔

除了以資源檔案添加的方式,也可以通過手工方式添加資源資訊,我們以插入一個字元串為例:

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、部署時間等)

Activiti6.0表結構完整分析記錄工作流的生命周期Activiti表結構一、通用資料表二、流程定義存儲表三、運作時資料表四、身份資料表五、曆史資料表六、剩餘兩張表

關鍵字段說明:

  1. CATEGORY_

    :用于标記該流程所屬的流程類型
  2. KEY_

    :流程辨別
  3. 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

該表為流程定義資訊表,用于記錄部署的流程定義資訊

Activiti6.0表結構完整分析記錄工作流的生命周期Activiti表結構一、通用資料表二、流程定義存儲表三、運作時資料表四、身份資料表五、曆史資料表六、剩餘兩張表

關鍵字段說明:

  1. REV_

    :表示的是樂觀鎖(對流程的修改操作後,該字段值加1,如對流程定義的暫定和激活操作)
    Activiti6.0表結構完整分析記錄工作流的生命周期Activiti表結構一、通用資料表二、流程定義存儲表三、運作時資料表四、身份資料表五、曆史資料表六、剩餘兩張表
  2. CATEGORY_

    :流程定義類别,表示的是流程定義檔案(xml格式)中的targetNamespace的屬性值
    Activiti6.0表結構完整分析記錄工作流的生命周期Activiti表結構一、通用資料表二、流程定義存儲表三、運作時資料表四、身份資料表五、曆史資料表六、剩餘兩張表
  3. NAME_

    :流程定義檔案的 name 屬性值
  4. KEY_

    :流程定義檔案的ID值,我們一般以 KEY 值作為流程定義的唯一表辨別,并且通過 KEY 值來啟動流程定義檔案
  5. VERSION_

    :流程定義的版本号,隻要流程定義的ID值不變,每進行一次流程釋出,該值加1
  6. DESCRIPTION

    HAS_START_FORM_KEY_

    對應流程定義檔案:
    Activiti6.0表結構完整分析記錄工作流的生命周期Activiti表結構一、通用資料表二、流程定義存儲表三、運作時資料表四、身份資料表五、曆史資料表六、剩餘兩張表
  7. SUSPENSION_STATE_

    :流程暫停狀态,1為激活狀态,2為暫停挂起狀态。

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

該表記錄運作時的流程執行個體與分支的執行資訊

Activiti6.0表結構完整分析記錄工作流的生命周期Activiti表結構一、通用資料表二、流程定義存儲表三、運作時資料表四、身份資料表五、曆史資料表六、剩餘兩張表

該運作時執行表為啟動下面的流程圖後的結果,我們啟動該流程,首先進入到callActivity(調用式子流程),該子流程會調用第二幅圖中的流程,是以運作時的執行表會有這麼多條記錄(包括兩條主幹線,以及其他的節點記錄)。

Activiti6.0表結構完整分析記錄工作流的生命周期Activiti表結構一、通用資料表二、流程定義存儲表三、運作時資料表四、身份資料表五、曆史資料表六、剩餘兩張表
Activiti6.0表結構完整分析記錄工作流的生命周期Activiti表結構一、通用資料表二、流程定義存儲表三、運作時資料表四、身份資料表五、曆史資料表六、剩餘兩張表

關鍵字段說明:

  1. BUSINESS_KEY_

    :為業務辨別,主流程才會擁有業務主鍵,可以在開啟流程執行個體的時候注入,該業務辨別隻有在主線流程中可以檢視到。
    Activiti6.0表結構完整分析記錄工作流的生命周期Activiti表結構一、通用資料表二、流程定義存儲表三、運作時資料表四、身份資料表五、曆史資料表六、剩餘兩張表
  2. PARENT_ID_

    :父執行ID,對應的是上一執行資訊的ID号
  3. SUPER_EXEC_

    :調用式子流程的父執行ID(一般為CallActiviti所對應的ID)
  4. IS_ACTIVE_

    :是否活動流程執行個體,0為非活動,1為活動(一個分支節點完成,則該分支的IS_ACTIVE會變為0)
  5. IS_CONCURRENT_:是否并發,0為非并發,1為并發(這裡的并發并非并行執行的概念)
  6. IS_SCOPE

    :是否全局流程執行,0非,1是
  7. IS_EVENT_SCOPE_:是否激活狀态,沒有使用到事件的情況下,一般都為0
  8. IS_MI_ROOT_:是否多執行個體根執行流
  9. SUSPENSION_STATE_

    :挂起狀态,1正常,2挂起
  10. CACHED_ENT_STATE_:緩存結束狀态
  11. LOCK_TIME_:鎖定時間,鎖定時間是不被并發操作的

剩下的幾個帶有 _COUNT_的字段為其他幾張運作時表的記錄數,需要配置activiti.cfg.xml的

<property name=“enableExecutionRelationshipCounts” value=“true”/>計數器功能,才生效

2. ACT_RU_TASK

該表記錄運作時的 userTask任務資訊。

Activiti6.0表結構完整分析記錄工作流的生命周期Activiti表結構一、通用資料表二、流程定義存儲表三、運作時資料表四、身份資料表五、曆史資料表六、剩餘兩張表

關鍵字段說明:

  1. PARENT_TASK_ID_:父節點任務ID,由父節點間接啟動
  2. OWNER_:擁有人,一般情況下為空,隻有在委托時才有值
  3. DELEGATION_:委托狀态,PENDING委托中,RESOLVED已處理,無委托則為空
  4. PRIORITY_

    :優先級别,預設為50(Main Config中可配置)
  5. DUE_DATE_

    :過期時間(Main Config中可配置)
  6. CATEGORY_

    :類别(Main Config中可配置)
  7. SUSPENSION_STATE_

    :挂起狀态,1正常,2挂起
  8. CLAIM_TIME_

    :該任務節點的擷取時間

3. ACT_RU_VARIABLE

記錄運作時的變量資訊

Activiti6.0表結構完整分析記錄工作流的生命周期Activiti表結構一、通用資料表二、流程定義存儲表三、運作時資料表四、身份資料表五、曆史資料表六、剩餘兩張表

關鍵字段說明:

  1. TYPE_

    :類型integer,String,double,json,null等
  2. BYTEARRAY_ID_

    :資源資訊ID,若該變量需要用到資源表中的資訊,則對應的是資源表中的ID值
  3. TEXT2_

    :存儲持久化對象的對象ID

4. ACT_RU_IDENTITYLINK

記錄運作時相關的使用者資訊

Activiti6.0表結構完整分析記錄工作流的生命周期Activiti表結構一、通用資料表二、流程定義存儲表三、運作時資料表四、身份資料表五、曆史資料表六、剩餘兩張表

關鍵字段說明:

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

事件訂閱表,記錄與消息事件定義相關的資訊

Activiti6.0表結構完整分析記錄工作流的生命周期Activiti表結構一、通用資料表二、流程定義存儲表三、運作時資料表四、身份資料表五、曆史資料表六、剩餘兩張表

事件訂閱表可以通過

部署并啟動

包含消息事件的流程定義來測試

(案例1)消息開始事件

Activiti6.0表結構完整分析記錄工作流的生命周期Activiti表結構一、通用資料表二、流程定義存儲表三、運作時資料表四、身份資料表五、曆史資料表六、剩餘兩張表

流程定義檔案(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)中間捕獲消息事件定義

Activiti6.0表結構完整分析記錄工作流的生命周期Activiti表結構一、通用資料表二、流程定義存儲表三、運作時資料表四、身份資料表五、曆史資料表六、剩餘兩張表

流程定義檔案(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>
           

關鍵字段說明:

  1. EVENT_TYPE_

    :事件訂閱類型,message,signal
  2. EVENT_NAME_

    :事件訂閱名稱
  3. ACTIVITY_ID_

    :流程定義節點ID
  4. CONFIGURATION_

    :配置資訊(若在開始事件中配置了消息事件定義,則該配置資訊即流程定義ID)
  5. CREATED_

    :建立時間,時間戳形式

6. ACT_RU_JOB

Activiti6.0表結構完整分析記錄工作流的生命周期Activiti表結構一、通用資料表二、流程定義存儲表三、運作時資料表四、身份資料表五、曆史資料表六、剩餘兩張表

運作時作業表,這一類的總共有四張表:

  • ACT_RU_JOB:記錄異步任務的資料
  • ACT_RU_TIMER_JOB:記錄定時事件的資料
  • ACT_RU_SUSPENDED_JOB:記錄暫停的的資料,比如流程中有一個定時任務,如果把這個任務停止工作了,這個任務會在ACT_RU_SUSPENDED_JOB中寫入資料
  • ACT_RU_DEADLETTER_JOB:無法執行工作表的資料, 如果一個任務執行了很多次,都無法執行,那麼這個任務會寫到該表中

備注ps:

  1. ACT_RU_JOB 和 ACT_RU_TIMER_JOB 兩張表的表結構為一模一樣的
  2. ACT_RU_JOB 比 ACT_RU_DEADLETTER_JOB 多了三個字段LOCK_EXP_TIME_、LOCK_OWNER_和 RETRIES
  3. ACT_RU_JOB 比 ACT_RU_SUSPENDED_JOB 多了兩個字段LOCK_EXP_TIME_、LOCK_OWNER_

(案例)定時開始事件

Activiti6.0表結構完整分析記錄工作流的生命周期Activiti表結構一、通用資料表二、流程定義存儲表三、運作時資料表四、身份資料表五、曆史資料表六、剩餘兩張表

啟動一個定時事件事件流程(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>
           

關鍵字段說明:

  1. LOCK_OWNER_

    :鎖定節點
  2. EXCLUSIVE_

    :是否唯一
  3. RETRIES_

    :重試次數3
  4. EXCEPTION_STACK_ID_

    :異常堆棧(資源表ID)
  5. EXCEPTION_MSG_

    :異常資訊
  6. REPEAT_

    :重複表達式,如R5/PT10S
  7. HANDLER_TYPE_

    :處理器類型,如 timer-start-event
  8. HANDLER_CFG_

    :處理器配置,如 {“activityId”:“start”}表示配置的節點為 start 節點

四、身份資料表

資料表分類 描述
ACT_ID_USER 使用者基本資訊表
ACT_ID_GROUP 使用者組表
ACT_ID_MEMBERSHIP 使用者與組關系表
ACT_ID_INFO 使用者擴充資訊表

這一類表是五大類中最簡單,最容易了解的,但一般在項目開發中,我們通常會使用自己的使用者表。

Activiti中對使用者和使用者組的支援自帶有POJO對象,并支援序列化。如下面表示 ACT_ID_USER 表對應的POJO類

1. ACT_ID_USER

該表存放使用者的基本資訊,包括使用者名、電子郵箱、密碼、照片等

Activiti6.0表結構完整分析記錄工作流的生命周期Activiti表結構一、通用資料表二、流程定義存儲表三、運作時資料表四、身份資料表五、曆史資料表六、剩餘兩張表

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

使用者組表存放使用者的群組資訊,包括使用者組名、組類型。

Activiti6.0表結構完整分析記錄工作流的生命周期Activiti表結構一、通用資料表二、流程定義存儲表三、運作時資料表四、身份資料表五、曆史資料表六、剩餘兩張表
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) 方法可以直接建立使用者組關系

Activiti6.0表結構完整分析記錄工作流的生命周期Activiti表結構一、通用資料表二、流程定義存儲表三、運作時資料表四、身份資料表五、曆史資料表六、剩餘兩張表
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

用于存放除基本資訊外的的擴充資訊,如年齡、位址、聯系方式等

Activiti6.0表結構完整分析記錄工作流的生命周期Activiti表結構一、通用資料表二、流程定義存儲表三、運作時資料表四、身份資料表五、曆史資料表六、剩餘兩張表
private static void setInfo(){
        identityService.setUserInfo("001", "age", "18");
        identityService.setUserInfo("001", "address", "BeiJing");
    }
           

關鍵字段說明:

  1. TYPE_

    :資訊類型,可以設定使用者賬号(account)、使用者資訊(userinfo)和NULL三種值。
  2. PASSWORD_

    :使用者賬号的密碼字段,目前的Activiti版本并沒有使用該字段。
  3. PARENT_ID_

    :該資訊的父資訊ID,如果一條資料設定了父資訊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

曆史流程執行個體表,該表記錄流程引擎啟動的流程執行個體。隻要有一條執行個體啟動,無論該執行個體是否完成,都會在該表中插入一條記錄。

Activiti6.0表結構完整分析記錄工作流的生命周期Activiti表結構一、通用資料表二、流程定義存儲表三、運作時資料表四、身份資料表五、曆史資料表六、剩餘兩張表

關鍵字段說明:

  1. DURATION_

    :記錄流程開始到結束的時間,機關為毫秒
  2. SUPER_PROCESS_INSTANCE_ID_

    :調用式子流程中的父流程的ID值

2. ACT_HI_ACTINST

曆史節點資訊表,該表記錄流程運作過程中的每個節點資訊,包括開始節點、結束節點、使用者任務、服務任務、網關等

Activiti6.0表結構完整分析記錄工作流的生命周期Activiti表結構一、通用資料表二、流程定義存儲表三、運作時資料表四、身份資料表五、曆史資料表六、剩餘兩張表

關鍵字段說明:

  1. TASK_ID_

    :隻有使用者任務才有TASK_ID值
  2. CALL_PROC_INST_ID_

    :針對callActivity調用式子流程中的被調用的流程執行個體ID值

3. ACT_HI_TASKINST

使用者任務執行個體表,記錄曆史的使用者任務資訊

Activiti6.0表結構完整分析記錄工作流的生命周期Activiti表結構一、通用資料表二、流程定義存儲表三、運作時資料表四、身份資料表五、曆史資料表六、剩餘兩張表

關鍵字段說明:

  1. PARENT_TASK_ID_

    :父節點調用的任務ID
  2. CLAIM_TIME_

    :該節點的擷取時間

4. ACT_HI_ATTACHMENT

曆史附件表,記錄曆史附件相關資訊

Activiti6.0表結構完整分析記錄工作流的生命周期Activiti表結構一、通用資料表二、流程定義存儲表三、運作時資料表四、身份資料表五、曆史資料表六、剩餘兩張表

關鍵字段說明:

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

曆史評論表,為使用者任務設定評論或者設定所有者。

Activiti6.0表結構完整分析記錄工作流的生命周期Activiti表結構一、通用資料表二、流程定義存儲表三、運作時資料表四、身份資料表五、曆史資料表六、剩餘兩張表

關鍵字段說明:

  1. TYPE_:意見記錄類型,有event和comment,當是comment時為處理意見。
  2. ACTION_

    :值為下列内容中的一種:AddUserLink、DeleteUserLink、AddGroupLink、DeleteGroupLink、AddComment、AddAttachment、DeleteAttachment,值為AddComment時為處理意見。
  3. MESSAGE_

    :用于存放流程産生的資訊,比如審批意見
  4. 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

曆史細節表,用于記錄曆史的詳細資訊。

Activiti6.0表結構完整分析記錄工作流的生命周期Activiti表結構一、通用資料表二、流程定義存儲表三、運作時資料表四、身份資料表五、曆史資料表六、剩餘兩張表

關鍵字段說明:

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

該表為曆史使用者表,用于記錄曆史的參與者資訊

Activiti6.0表結構完整分析記錄工作流的生命周期Activiti表結構一、通用資料表二、流程定義存儲表三、運作時資料表四、身份資料表五、曆史資料表六、剩餘兩張表

TYPE_:類型,主要分為以下幾種:assignee、candidate、owner、starter 、participant

六、剩餘兩張表

1. ACT_EVT_LOG

事件日志表,用于記錄與事件相關的一些日志資訊,如流程執行個體結束、建立變量、變量删除、建立任務和任務配置設定等。

Activiti6.0表結構完整分析記錄工作流的生命周期Activiti表結構一、通用資料表二、流程定義存儲表三、運作時資料表四、身份資料表五、曆史資料表六、剩餘兩張表

事件日志表,該表不可修改,隻能寫入和删除

關鍵字段說明:

  1. LOG_NR_

    :自增主鍵(Activiti表中唯一有自增主鍵的表)
  2. TYPE_

    :類型,包括:PROCESSINSTANCE_START、PROCESSINSTANCE_END、ACTIVITY_STARTED、ACTIVITY_COMPLETED、SEQUENCEFLOW_TAKEN、VARIABLE_CREATED、VARIABLE_UPDATED、TASK_ASSIGNED、TASK_CREATED
  3. TIME_STAMP_

    :時間戳,寫入事件的時間點
  4. USER_ID_

    :使用者
  5. DATA_

    :内容資料,json序列化存到資料庫中,内容非常大(為該表中的最核心的資料,官方建議不要存儲到mysql中而是存到MongoDB或者elisticsearch中,自動完成對json資料的解析)
  6. LOCK_OWNER_

    :鎖定節點
  7. LOCK_TIME_

    :鎖定時間
  8. IS_PROCESSED_

    :是否正在執行

2. ACT_PROCDEF_INFO

該表為流程定義擴充表,一般不常用

  1. PROC_DEF_ID_:流程定義ID
  2. INFO_JSON_ID_

    :為主鍵ID,對應ACT_GE_BYTEARRAY的ID