# 📍 BPMN Progress & Homework ###### tags: `Camunda` `bpmn` ## 🦫 Go client :::info :bulb: 使用 Go 和 Camunda Platform 8 進行互動 ::: ### tasklist.go 各個 func 的說明 #### 🔸 `NewZeebeClient` 創建並返回一個 Zeebe 客戶端實例,與 Zeebe 服務進行連結。 #### 🔸 `DeployBPMNFile` 部署指定的 BPMN 檔案 `NewDeployResourceCommand` 是一個部署資源的命令,將指定的檔案填入,使用 `AddResourceFile` 方法。 `fileName` 是要部署的 BPMN 檔案的路徑。 然後,使用 `Send` 發送命令到 Zeebe 服務,並得到部署的回應和可能的錯誤。如果有錯誤,使用 `log.Fatalf` 輸出錯誤訊息並終止程式執行。 最後,回傳值會是一個 `*pb.DeployResourceResponse` 的結構體,它返回部署的回應物件 `response`,其中包含了部署的相關資訊,例如部署鍵`deployment key` 等。想了解更多的話,可以點進去看與這個結構體相關的func。 #### 🔸 `CreateProcessInstance` 創建一個流程實例 `CreateInstanceCommand`,用於創建流程實例。 使用 `BPMNProcessId` 方法設置要使用的 BPMN 流程的 `processId`。 然後,`LatestVersion` 指定使用最新版本的流程。 接著檢查傳入的 `variables` 參數中的變數是否存在。如果存在,則使用 `VariablesFromMap` 將變數從 **variables 映射** 轉換為所需的格式。如果轉換過程中發生錯誤,會返回錯誤。 #### 🔸 `CancelProcessInstance` 取消指定的流程實例 `CancelInstanceCommand`,用於取消流程實例。使用 `ProcessInstanceKey` 設置要取消的流程實例的鍵值 processInstanceKey。 #### 🔸 `GetAllUserTask` 獲取所有待完成的 userTask 的詳細資訊 `ActivateJobsCommand`,用於激活特定類型的工作。 `JobType` 方法設置工作類型為 `io.camunda.zeebe:userTask`。 `MaxJobsToActivate` 設置最大要激活的工作數量為 100。 `Timeout` 方法設置超時時間為 1 分鐘。 `WorkerName` 方法設置工作者名稱為 `my-worker` #### 🔸 `GetJobInfoByProcessInstanceKey` 根據指定的流程實例 key,獲取待完成的 userTask 的詳細資訊 與前面提到的 `GetAllUserTask` 函式相似,只是在建立 `ActivateJobsCommand` 的時候多了一個條件:`ProcessInstanceKey` #### 🔸 `GetJobInfoByProcessDefinitionKey` 根據指定的流程定義 key,獲取待完成的 userTask 的詳細資訊。 與前面提到的 `GetAllUserTask` 函式相似,只是在建立 `ActivateJobsCommand` 的時候多了一個條件:`ProcessDefinitionKey` #### 🔸 `GetJobInfoByProcessId` 根據指定的流程 ID,獲取待完成的 userTask 的詳細資訊。 與前面提到的 `GetAllUserTask` 函式相似,只是在建立 `ActivateJobsCommand` 的時候多了一個條件:`ProcessId` #### 🔸 `CompleteJob` 完成指定的工作 `NewCompleteJobCommand` 創建一個新的完成工作命令。 `jobKey` 用於指定要完成的工作。 接下來使用 `VariablesFromMap` 將變數映射轉換為 Zeebe 的變數格式。 #### ID 區別 | ID | 中文 | 解釋 | | ------------------- | ---------- | ------------------ | | processDefinitionId | 流程定義ID | 整個流程的定義 | | processInstanceId | 流程實例ID | 流程中其中一個實例 | | id | 任務ID | 實例中的任務 | * `id` 不會重複 * 一個Process Instance(流程實例)是一個ProcessDefinition(流程定義)的執行 * 一個Process Instance(流程實例)可以有許多同時執行的步驟(concurrent executions) ## ⬅️ Review ### 📝 Quiz #### 🔸 4/27 - 請採購流程 :::warning 確保所有 ID 都有可讀性,表單部分自行設計 ::: ##### 請購單 建立一張請購單,填寫完成後的審核順序為:單位主管 ➡️ 總經理<p> * 審核不通過,需要重建請購單,重建超過 3 次將結束流程 * 總經理審核完畢,進入採購程序 > :speech_balloon: Tips: > - 使用 Outputs 技巧,自動控制變數 > - 使用 call subprocesses,呼叫其他流程 </p> --- ##### 採購單 建立一張採購單,填寫完成後的審核順序為:單位主管 ➡️ 處長 ➡️ 總經理 <p> * 審核不通過,需要重建採購單 * 總經理審核完畢,進行採購單入庫動作 > :speech_balloon: Tips: > - 使用 call subprocesses,呼叫其他流程 </p> --- ##### 採購單入庫 確認採購數量,數量正確,直接入庫並結束流程;如數量不足,只將部分採購品入庫,後續要進行補足,並確認數量是否正確。 --- **以上都完成後,請在 5/5 之前將 bpmn 檔案、流程demo影片 mail 給我~~** <p> 主旨:姓名 _ bpmn 小考 > [name=C109118215@nkust.edu.tw] ### 🔸 3/22 - Subprocesses & Multi-instance :::success 子流程可以是獨立的也可以嵌入到主流程中。子流程還可以是 sequential, parallel, event, 或 call subprocesses ::: #### 嵌入式的子流程範例 ![](https://i.imgur.com/QidahmF.png) * 子流程具有自己的**開始事件、結束事件**。 * 當主流程執行到子流程時,它會進入子流程並在執行子流程中的所有步驟,然後再返回到主流程中繼續執行主流程中的其他步驟。 #### Multi-instance - Sequential vs. parallel 在BPMN中,使用一個多重實例(Multi-Instance)工作項目來表示**迭代行為**。可以用來做需要多次執行的任務。 > :speech_balloon: 例如:產品需要進行多次品管檢驗,每次檢驗都需要獨立進行。 * Sequential - 序列 <p>使用序列的情況下,一次只會執行一個任務。</p> ![Sequential](https://i.imgur.com/AEyCIYq.png) * Parallel - 並列 <p> 相對地,使用並列的話,任務可以同時進行,彼此獨立,而且不用等待上一個步驟完成。 </p> ![Parallel](https://i.imgur.com/hthz90d.png) ### 🔸 3/15 - Getting started with human task orchestration :::success Users can enter the necessary data to drive the business process. ::: #### Develop a automated process ![Decide what's for dinner](https://i.imgur.com/3DcQIep.png) * set sequences flows `= meal = "Salad"` `= meal = "Chicken"`. #### Add a form ![](https://i.imgur.com/Hx3eEl8.png) * Then switch to `JSON` mode and paste all to `Decide what's for dinner`. ## 📚 Homework :::info :bulb: Better late than never. ::: ### 🔸 3/22 - 檢討與練習 #### :pencil2: 將 3/15 的作業與今日的上課內容做檢討 使用 HackMD 或 簡報等文件方式,呈現出自己的流程圖與標準答案之差異,簡單說明為什麼會想這麼畫,並將自己的流程圖進行除錯。 #### :pencil2: 嘗試繪製以下流程: 員工可以選擇請假或是執行指派任務: <p> 請假可以選擇病假、事假、公假,病假和事假要先由直屬主管批審過才能交給最高主管批審,公假直接由最高主管批審即可。 </p> <p> 執行指派任務要回報給任務經理,批審通過後結束。 </p> > :speech_balloon: 提示: > - 請假、執行指派任務擇一繪製子流程,看是要嵌入子流程或是 all activity 的方式都行 > - 作業:流程圖、簡報或文件最晚星期一之前 mail 給我 > [name=C109118215@nkust.edu.tw] > - 善用 [文件](https://docs.camunda.io/docs/components/modeler/bpmn/gateways/) 查詢基礎BPMN概念 > - 一樣有問題在群組問 ### 🔸 3/15 - 將需求視覺化呈現 #### :pencil2: 嘗試繪製以下流程: 當業務填寫一張請款單,填寫完畢繳交至主管審核,主管可以選擇退回或通過,通過後再交由總經理進行最後審核。 > :speech_balloon: 提示: > - 此流程只需要一個 `Pool` > - 練習新增多層 `Lanes` > - 練習製作表單 ( 要能夠選擇退回或通過,不一定要用select box,可以自行發揮 ) > - 有問題的話可以在群組問,建議先自己Google > - 將學到ㄉ東西與成果的重點簡化後做成簡報,必要時請善用示意圖講解。