簽核元件很大,會拆成2篇
| 顯示名稱 | 簽核 |
|---|---|
| node_type | FormAdapter |
| 一句話用途 | 流程在此停下來等待人工核決,由簽核者類型解析出的對象送出決定後,依決定選擇的路徑繼續往下走 |
| 會讓流程等待 | 是。狀態變成等待中,直到有權限的簽核者送出決定;設了簽核逾時且時間到,由執行器自動喚醒改道;沒人可簽時大多數情況會直接結束流程,不會停在等待 |
| 出線 | 依設定而定:未啟用自訂決策時,可選節點本身的出線(單選或複選);啟用自訂決策時,可選「決策選項」定義的按鈕,每個按鈕各自配對 0~多條出線,配 0 條代表這個按鈕本身就是流程終態 |
| 可用範圍 | 所有企業(不是受限節點) |
簽核(FormAdapter)是流程裡唯一負責「讓人做決定」的節點:流程執行到這裡會停下來進入 等待狀態,直到指定的簽核者在表單中心送出決定,才依決定選擇的出線繼續往下走。誰是「指定的簽核者」由 「簽核者類型」決定——可以是固定的某個人、固定的一個角色(還能再限定在哪個單位範圍)、發起人自己,或是 由流程變數動態指出,這是本節點最容易設錯、也是本篇花最多篇幅講清楚的部分。
它同時管理三件配套的事:簽核者能不能順手改幾個表單欄位(欄位權限)、簽核意見要不要填以及至少要幾個字、 要不要在超過指定時間都沒人簽核時自動改道(避免案件無限期卡住)。純粹要寫入或讀取一個值、不需要人工介入 的情境不該用這個節點——那是「設定變數」「寫入欄位」該做的事;FormAdapter 唯一的職責是等人 做決定,本身不做任何運算或外部呼叫。
它也只能做到「這批候選人裡任何一位簽了就算數」,做不到「全部人都要簽過」(會簽):要做到全員會簽, 得靠多個各自等待不同人的 FormAdapter 節點並行,再用並行匯合節點收尾,單一 FormAdapter 節點沒有這個能力。
設計器的簽核節點設定視窗分三個分頁:基本設定、決策控制器、欄位權限設定,以下依分頁列出。
| 面板欄位 | config key | 必填 | 預設值 | 說明 |
|---|---|---|---|---|
| 簽核者類型 | assignee_type | 選填(省略時視同 INITIATOR) | INITIATOR | 五選一:INITIATOR 發起人(表單建立者)/USER 指定用戶/ ROLE 指定角色/DYNAMIC 動態(從變數取)/DEPARTMENT 指定部門(舊)。DEPARTMENT 只在既有設定本來就是這個值時,下拉選單才會出現 「指定部門(舊)=該部門成員,請改用「指定角色」+單位範圍」這個選項;新設定一律改用 ROLE+單位範圍。 |
| 從組織樹選擇(USER)/選擇角色(ROLE)/變數名稱(DYNAMIC) | assignee_value | 視 assignee_type 而定,INITIATOR 免填 | 空字串 | USER:一或多個使用者 secure_code(逗號分隔,任一人簽即可,不是要全部人都簽)/ ROLE:角色 secure_code/DYNAMIC:流程變數名稱,不含 ${}與前綴/DEPARTMENT(舊):部門(單位)secure_code。 |
| 單位範圍 | unit_scope | 僅 assignee_type=ROLE 時可設 | GLOBAL | 四選一:GLOBAL 不限單位(全企業持有此角色的人都算)/UNIT 指定單位/APPLICANT_UNIT 申請人所屬單位/APPLICANT_ANCESTOR 申請人單位的上層。 |
| (單位範圍=指定單位時出現的單位下拉) | unit_secure_code | unit_scope=UNIT 時必填 | — | 目標單位 secure_code。 |
| 往上……層(超過根就取根) | unit_levels_up | unit_scope=APPLICANT_ANCESTOR 時必填,須 ≥1 | 1 | 從申請人所屬單位起算往上幾層;層數超過組織頂層時取頂層。 |
| 申請人本人就是簽核者時 | self_target_action | 僅 unit_scope=APPLICANT_UNIT/APPLICANT_ANCESTOR 時可設 | escalate_or_return | 三選一:escalate_or_return 往上一層找,到根仍是本人就退回申請人(預設)/ escalate_or_self 往上一層找,到根仍是本人就由本人簽/self 不往上, 直接由本人簽。只有「職位型」角色(如部門主管)會做這項檢查;本人以代理或候補身分列在簽核者內 也算命中。 |
| 選擇模式 | selection_mode | 選填 | single | single 單選(Radio,一次只能選一條出線)/multiple 複選 (Checkbox,可一次選多條出線同時推進多個分支)。 |
| 顯示備註欄位 | allow_comment | 選填 | true | 是否顯示簽核意見輸入框。關閉後畫面上不會出現輸入框——與下一列的 「最少字數」搭配時要特別小心,見注意事項。 |
| 最少字數 | min_comment_length | 選填 | 0 | 簽核意見至少要幾個字,「0 = 不需要留言」。舊版用布林欄位 require_comment(true=至少 1 字),畫面上已不再提供設定入口, 僅在讀取沒有 min_comment_length 的舊資料時當退路。 |
| 啟用逾時自動處理 | timeout_enabled | 選填 | false | 開啟後,超過指定時間沒人簽核就自動走「逾時去向」指定的路徑。 |
| 逾時時間(分鐘) | timeout_minutes | timeout_enabled=true 時必填,須介於 1~14400 | — | 14400 分鐘=10 天,是平台目前允許的最長逾時。 |
| 計時方式 | timeout_mode | timeout_enabled=true 時可設 | ABSOLUTE | ABSOLUTE 絕對時間(24 小時全時倒數)/WORKING 工作時間(只在簽核者 的班表工作時間內倒數,扣掉請假;簽核者沒有班表時自動退回 ABSOLUTE,見注意事項)。 |
| 逾時去向 | timeout_path_id | timeout_enabled=true 時必填 | — | 未啟用自訂決策時填「出線」的 edge id;啟用自訂決策時填「決策選項」的 id。逾時到期時,系統自動 視為簽核者選了這個路徑;若這個路徑目前已經不在可選清單裡(例如改了出線或決策後忘了重新指定), 逾時功能會整個悄悄不啟用,見注意事項。 |
| 找不到簽核人時 | no_assignee_action | 選填 | return | return 退回申請人重送,流程直接以 REJECTED 結束(預設)/ fallback_role 改派給指定角色,流程正常進入等待簽核狀態。 |
| (找不到簽核人時=改派給角色時出現的角色下拉) | no_assignee_role_secure_code | no_assignee_action=fallback_role 時必填 | — | 角色 secure_code;該角色當下沒有任何人持有也不會被判定失敗,只是繼續停在等待中,等有人拿到 這個角色再簽。 |
| 面板欄位 | config key | 必填 | 預設值 | 說明 |
|---|---|---|---|---|
| 啟用自定義決策選項 | use_custom_decisions | 選填 | false | 關閉時可選路徑=節點本身的所有出線;開啟後可選路徑改由「決策選項」定義任意數量、任意文字的 按鈕。 |
| 傳出變數名稱 | output_variable | 僅 use_custom_decisions=true 時有意義 | 空字串 | 簽核者選擇的決策「傳出值」(或逾時自動改道時對應決策的值)會寫入這個流程變數 (${v.此變數}),供下游節點讀取(分支、通知、子流程等)。 |
| 新增決策 → 顯示名稱/傳出值/按鈕風格/條件顯示,右側連連看配對「決策 → 流程去向」 | decision_options(陣列,每項含 id/label/ value/style/target_edges/visible_when) | use_custom_decisions=true 時至少一項,且每項都要配對出線才能儲存 | [] | label 是按鈕文字;value 是寫入傳出變數的值;style 只影響按鈕顏色(主要/成功/警告/危險/預設);target_edges 是這個按鈕要往下走的 出線,可以是 0 條(=這個按鈕本身就是流程終態)、1 條或多條。 |
| 條件顯示(可選):變數名/運算子/比較值 | decision_options[].visible_when | 選填 | null | 設計器可以填,儲存進 decision_options 並原樣傳到前端,但目前沒有任何程式碼會讀它 來決定按鈕是否顯示——填了不會有任何實際效果,見注意事項。真正能動態隱藏決策按鈕的是下一列的 「來向變數控制」。 |
| 來向變數控制 → 新增來向變數 → 新增控制規則 | input_variables(陣列,每項含 var_name/controls[]) | 選填 | [] | 讀取一個既有的流程變數(var_name,格式與 assignee_value 用 DYNAMIC 時相同,不含前綴),依條件(==/!=/>/ >=/</<=/contains/ not_empty/empty)動態控制兩種效果:decision_visibility (只顯示 target_option_ids 列出的決策,其餘全部隱藏)或 field_permission (覆蓋指定表單欄位在這次簽核的權限)。 |
| 面板欄位 | config key | 必填 | 預設值 | 說明 |
|---|---|---|---|---|
| 每個表單欄位的「簽核者」下拉(唯讀/可修改/隱藏) | field_permissions.approver.<欄位 key> | 選填 | 未設定的欄位視為唯讀 | 決定簽核者在簽核畫面能不能修改該表單欄位;簽核者真的送出的欄位修改,只有標成「可修改」才會被 接受,其餘一律拒絕(回應 403)。 |
| 每個表單欄位的「閱讀者」下拉(唯讀/可修改/隱藏) | field_permissions.reader.<欄位 key> | 選填 | 未設定的欄位視為唯讀 | 決定其他檢視者(不是這一關的簽核者,但看得到這張表單的人)看到的欄位權限;「隱藏」的欄位值 不會出現在回應裡。 |
簽核者類型=DYNAMIC 時,assignee_value 直接寫流程變數名稱(不含 ${} 與前綴),依 NODE > FLOW > TREE 優先序取值;值可以是單一字串,也可以是陣列 (陣列會逐一轉成簽核者清單,多人任一人簽即可)。
來向變數控制(input_variables[].var_name)與決策選項的「條件顯示」 (visible_when.variable,雖然目前沒有效果)用的都是同一種直接變數名稱寫法。
表單欄位(${f.欄位})、流程資訊(${wi.…})等帶前綴的變數替換語法, 本節點自己的設定欄位不會用到;它們是下游節點(例如防禦決策的原因樣板)讀取簽核結果時才用得上。
output_variable(僅 use_custom_decisions=true 時有意義):簽核者送出的 決策「傳出值」,或逾時自動改道時對應決策的值,會寫進這個流程變數(FLOW scope,整個流程都讀得到, 效果等同「設定變數」節點)。未啟用自訂決策的純出線模式不會寫任何流程變數,即使填了傳出變數名稱。
每一次有結果(人工簽核、逾時自動改道、找不到簽核人)都會新增一筆簽核紀錄 (fw_approval_records),欄位包含動作(approved/rejected/ timeout/no_assignee)、簽核意見、簽核者,以及只有透過代理或候補身分放行 時才有值的 acted_as_kind/acted_as_role_code。
若簽核者被欄位權限允許修改某些欄位、且真的送出了修改,對應欄位會寫回表單實例的資料,同時各自留一筆 欄位異動紀錄。