FlowableAPI的使用

自学Java笔记本發表於2024-04-03

image

// 它涉及啟動流程定義的新流程例項。
RuntimeService runtimeService = processEngine.getRuntimeService();

// RepositoryService 可能是使用 Flowable 引擎時需要的第一個服務。
RepositoryService repositoryService = processEngine.getRepositoryService();
// 圍繞任務的所有內容都分組在 TaskService 中
TaskService taskService = processEngine.getTaskService();
ManagementService managementService = processEngine.getManagementService();
IdentityService identityService = processEngine.getIdentityService();
HistoryService historyService = processEngine.getHistoryService();
FormService formService = processEngine.getFormService();
DynamicBpmnService dynamicBpmnService = processEngine.getDynamicBpmnService();

Query API 查詢介面

從引擎查詢資料有兩種方式:查詢API和本機查詢。查詢 API 允許您使用流暢的 API 編寫完全型別安全的查詢。您可以向查詢新增各種條件(所有這些條件都作為邏輯 AND 一起應用)和精確的一個排序。以下程式碼顯示了一個示例:

//  指定查詢條件,僅返回分配給 "kermit" 使用者的任務
//指定查詢條件,僅返回流程變數 "orderId" 的值為 "0815" 的任務。這表示只查詢具有特定訂單ID的任務。
//按照任務的到期日期(Due Date)升序
List<Task> tasks = taskService.createTaskQuery()
    .taskAssignee("kermit") 
    .processVariableValueEquals("orderId", "0815")
    .orderByDueDate().asc()
    .list();

Variables 變數

每個流程例項都需要並使用資料來執行其組成的步驟。在 Flowable 中,這些資料稱為變數,儲存在資料庫中。變數可以用在表示式中(例如,在獨佔閘道器中選擇正確的外出順序流),在呼叫外部服務時的Java服務任務中(例如,提供服務呼叫的輸入或儲存服務呼叫的結果)等等。在。
image

流程例項可以具有變數(稱為流程變數),而且執行(是指向流程活動位置的特定指標)和使用者任務也可以具有變數。流程例項可以具有任意數量的變數。每個變數都儲存在 ACT_RU_VARIABLE 資料庫表中的一行中。

所有 startProcessInstanceXXX 方法都有一個可選引數,用於在建立和啟動流程例項時提供變數。例如,從執行時服務:

     RuntimeService runtimeService = processEngine.getRuntimeService();
        /*鍵是稍後將用於檢索變數的識別符號*/
        Map<String, Object> variables = new HashMap<String, Object>();
        variables.put("employee", employee);
        variables.put("nrOfHolidays", nrOfHolidays);
        variables.put("description", description);
        /*當流程例項啟動時,將建立一個執行並將其放入啟動事件中。從那裡開始,此執行遵循使用者任務的序列流以供經理批准並執行使用者任務行為。
        此行為將在資料庫中建立一個任務,稍後可以使用查詢找到該任務。使用者任務處於等待狀態,引擎將停止進一步執行任何操作,返回 API 呼叫。*/
        ProcessInstance processInstance =
                runtimeService.startProcessInstanceByKey("holidayRequest", variables);//<!--    使用金鑰啟動流程   -->

可以在流程執行期間新增變數。例如,(執行時服務):

void setVariable(String executionId, String variableName, Object value);
void setVariableLocal(String executionId, String variableName, Object value);
void setVariables(String executionId, Map<String, ? extends Object> variables);
void setVariablesLocal(String executionId, Map<String, ? extends Object> variables);

還可以檢索變數,如下所示。請注意,TaskService 上也存在類似的方法。這意味著任務(如執行)可以具有僅在任務持續時間內“活動”的區域性變數。

Map<String, Object> getVariables(String executionId);
Map<String, Object> getVariablesLocal(String executionId);
Map<String, Object> getVariables(String executionId, Collection<String> variableNames);
Map<String, Object> getVariablesLocal(String executionId, Collection<String> variableNames);
Object getVariable(String executionId, String variableName);
<T> T getVariable(String executionId, String variableName, Class<T> variableClass);

變數通常用在 Java 委託、表示式、執行或任務偵聽器、指令碼等中。在這些構造中,當前執行或任務物件可用,並且可用於變數設定和/或檢索。最簡單的方法是:

// 獲取實際的任務列表
TaskService execution = processEngine.getTaskService();

execution.getVariables();
execution.getVariables(Collection<String> variableNames);
execution.getVariable(String variableName);

execution.setVariables(Map<String, object> variables);
execution.setVariable(String variableName, Object value);