程式資訊
- 程式 ID:
WORKFLOWVIEW - 所屬子系統:Other
- 狀態:stable
工作流程派送(簽核發起)¶
功能簡介¶
「工作流程派送」是各單據在工具列按下 工作流程(簽核)時跳出的設定面板,負責把一張已存在的單據送進公司的簽核/工作流程。它做三件事:
- 從該單據的單據別自動載入可用的流程樣板,由樣板帶出每一道關卡(處理人、審核順序、處理事項)。
- 讓使用者檢視並微調流程關卡(可手動補關卡、改處理人 Email),並掛上附件。
- 按
儲存後正式發行:寫入聯絡單/工作流程資料、產生簽核 PDF、並寄信通知下一關處理人。
它不是查詢報表,而是簽核流程的發起與檢視面板。發起後,後續每一關的簽核動作改在 工作流程簽核 進行;而流程樣板(每個單據別預設有哪些關卡)則在 流程樣板選擇 維護。
從哪裡打開
本面板沒有獨立的主選單入口,而是由單據作業(Ade 表單)的 工作流程 按鈕觸發:系統先取得目前單據的主檔,檢查可否送簽,再以 ContentWindowService 彈出本視窗(程式 WorkflowService.ExecuteWorkflowAsync)。因此必須先有一張存好的單據才會出現此畫面。
前置需求¶
- 權限:執行單據作業時需具備該單據的工作流程/簽核權限(
AllowWorkflow);無權限會提示「沒有權限」並中止。 - 基礎資料:流程能不能正確帶出關卡,取決於下列資料的維護——
| 資料 | 影響的結果 |
|---|---|
| 流程樣板(依單據別設定) | 流程樣板 下拉的選項與預設帶出的關卡;沒有樣板就無法送簽 |
| 樣板關卡設定(處理事項、審核順序、處理部門) | Detail 清單每一列的處理事項/審核順序/處理人 |
| 人事資料(員工 Email、簽名圖檔) | 各關卡的處理人 Email(補寄通知用)、發行者簽名圖檔(產 PDF 用) |
| 部門 / 處理人對照(WKFLOWHANDLER seek) | 手動新增關卡時,處理部門選人後帶回部門名稱/處理人/Email |
| 單據主檔欄位(客戶、廠商、部門、特殊人員) | 樣板 Pick 依這些值挑選對應關卡(例如某客戶走特定簽核線) |
操作步驟¶
- 在單據作業中先儲存好一張單據,再按工具列的
工作流程(簽核)。系統會帶出本面板,上方顯示該單據的聯絡單號/建檔日期/製表人員/結案/主旨等唯讀資訊。 - 在
流程樣板下拉選擇要套用的流程樣板。- 選定後系統自動帶出內容(依樣板與單據內容組出的簽核說明)、主旨,並在下方 Detail 清單列出該樣板的所有關卡。
- 右側文字框會顯示該樣板的顯示流程(流程文字說明)。
- 視需要在內容欄補充說明(可編輯、可換行)。
- 視需要掛上附件:在右上附件清單按
載入選檔、按顯示開檔;附件列預設提供 10 筆空白列可填。 - 視需要微調流程關卡(多數欄位唯讀,僅特定情況開放,詳見欄位連動與附加功能):
- 在清單空白處按右鍵
新增數筆可在流程末端補一道關卡。 - 補的關卡用
處理部門seek 欄選人,會自動帶回部門名稱/處理人/Email。
- 在清單空白處按右鍵
- 確認無誤後按
儲存。系統會:- 寫入聯絡單與工作流程資料、產生簽核 PDF、並寄 Email 通知下一關處理人。
- 存檔後視窗自動關閉(
CloseWindowAfterSave);按取消同樣會關閉視窗(CloseWindowAfterCancel)。
注意
一旦流程已發行(單據已在簽核中),再次打開本面板時整個流程清單與樣板下拉會變成唯讀,只能檢視進度、不能再改樣板或關卡——後續處理請改用 工作流程簽核。
欄位說明¶
主檔(上方資訊區)¶
| 欄位 | 必填 | 說明 / 預設 |
|---|---|---|
| 聯絡單號 | — | 唯讀;新發起時系統暫填 +++,存檔後由系統產生正式單號 |
| 建檔日期 | — | 唯讀;選樣板時帶入今天 |
| 製表人員 | — | 唯讀;預設為目前登入者(顯示其姓名) |
| 結案 | — | 唯讀;流程結案狀態 |
| 主旨 | — | 可編輯;選樣板時自動組成「顯示流程,單號:xxx,發行:登入者」 |
| 內容 | — | 可編輯、可換行;選樣板時依樣板+單據內容自動帶入,已有內容則保留 |
流程樣板區¶
| 欄位 | 可編輯 | 說明 |
|---|---|---|
| 流程樣板 | 未發行時可選 | 依單據別載入可用樣板;發行後唯讀並定位到當前樣板 |
| 顯示流程 | — | 唯讀;所選樣板的流程文字說明 |
流程關卡清單(Detail)¶
| 欄位 | 可編輯 | 說明 / 預設 |
|---|---|---|
| 序號 | — | 關卡序號 |
| 審核順序 | — | 簽核先後順序;發行關卡為 0 |
| 處理事項 | 手動列可改 | 下拉(通知/發行/簽核…);手動新增列預設 通知 |
| 處理部門 | 手動列可改 | seek 欄選人,帶回部門名稱/處理人/Email |
| 部門名稱/處理人姓名 | — | 由樣板或 seek 帶出 |
| 處理人Email | 可改 | 樣板未填時,若人事資料有 Email 且設定要寄信會自動補上 |
| 實際處理人 | — | 實際執行該關卡的人(簽核後回填) |
| 狀態 | — | 該關卡狀態;手動新增列預設「未開始」 |
| 處理時間 | — | 該關卡處理完成時間 |
| 流程結束 | — | 是否為流程結束關卡 |
| 電子郵件 | — | 是否寄 Email 通知(Y/N),手動新增列預設 Y |
| 產生報表 | — | 該關卡要產生的報表名稱(發行關卡用以產 PDF) |
| 執行方法/方法名稱/參數 | — | 自動執行設定(核可後觸發指定方法) |
| 開始日/到期日 | — | 手動新增列預設今天 |
| 完成率 | — | 0~100;手動新增列預設 0、發行關卡 100 |
| 處理說明/退件序號/退件說明 | — | 簽核過程回填的處理/退件資訊 |
附件清單¶
| 欄位 | 可編輯 | 說明 |
|---|---|---|
| 序號 | — | 附件序號,自動編號(D3,如 001) |
| 載入 | 按鈕 | 按 載入 開檔案對話框選檔並掛到該列 |
| 附件 | — | 已掛附件的檔名(唯讀) |
| 標籤 | 可改 | 附件分類標籤(系統會依單據客戶/廠商/部門等帶入預設標籤) |
| 顯示 | 按鈕 | 按 顯示 開啟該附件 |
欄位連動與附加功能¶
這一節列出本面板「輸入某欄位/按某按鈕後系統會做什麼」,全部以實際程式碼為準。
打開面板時(自動帶資料)¶
- 自動判斷新發起或檢視既有流程:開窗時呼叫
GetNoteMaster(單據別, 主檔id)。若該單據已建過聯絡單/流程,直接載入既有主檔、附件與流程關卡;否則建一張新的聯絡單(NewCommpr),帶入單據別、單號、製表人員(登入者)、資料表名稱等預設。 - 自動補 10 筆空白附件列:
AddItem會在現有附件之後補 10 筆空列供填寫,序號接續既有最大序號(格式D3)。 - 已發行 → 全面唯讀:若查到的流程關卡筆數 > 0(
SetWorkflow(true)),樣板下拉與流程清單設為唯讀、隱藏手動加列;樣板下拉自動定位到單據目前的流程樣板號。 - 自動嘗試帶出單據資料:開窗時若
CanSave()成立(尚未發行、流程關卡都還是新列、且CheckTemplate通過——即流程中有「發行」關卡),就先做一次TransferQuery把來源單據的資料抓進來;若樣板缺發行關卡,CheckTemplate會在此時(開窗階段)提示「沒有發行者,請檢查工作流程表是否有設定錯誤」。
選擇「流程樣板」後(SetCommpr)¶
當你在 流程樣板 下拉選定一個樣板(且流程尚未發行),系統會:
- 以
GetContents依樣板+單據組出內容文字(內容原本空白才填,不覆蓋你已打的字)並取得viewxml(非「歷史記錄」模式時寫回主檔,供產 PDF 用)。 - 帶入建檔日期=今天、聯絡單號=
+++(暫填)。 - 組出主旨=「{顯示流程},單號:{單號},發行:{登入者}」。
- 寫回流程樣板號,並呼叫
SetDetail1用樣板挑出所有關卡。
關卡挑選與帶值(SetDetail1 / Pick)¶
- 透過
DARB_WKFLOW_PICK依樣板+廠商代號/客戶代號/部門代號/特殊人員挑出對應關卡(這四個值來自來源單據主檔,由WorkflowConstructorParameter反射取得)。 - 登入者佔位符
#I#:樣板某關卡的處理部門若填#I#,代表「此關由目前登入者本人處理」,系統會清空部門並帶入登入者為處理人(SetSignInUserWhenPlaceholder)。 - 發行關卡自動帶發行者:處理事項為「發行」的關卡,自動帶入登入者為處理人並設完成率 100、狀態完成(
SetPublish)。 - 自動補 Email:若關卡設定要寄信(電子郵件=
Y)但 Email 空白,會去人事資料用處理人編號補 Email(SetEmail)。
流程關卡清單操作¶
- 右鍵「新增數筆」(手動補關卡):只有尚未發行且已選樣板(流程清單已有列)時才能加列(
AddItem);新列預設處理事項=通知、狀態=未開始、優先順序=一般(Normal)、開始日/到期日=今天、電子郵件=Y、完成率=0,序號/審核順序接在末端。只有手動新增的列開放編輯(IsRowReadOnly),樣板帶出的列維持唯讀。 - 處理事項下拉:選定後寫回處理事項碼/處理事項(系統值)/顯示名稱(
JobCodeEnum)。 - 處理部門 seek 欄(WKFLOWHANDLER):選定人員後自動帶回部門名稱、處理人編號、處理人姓名、Email(
Rowsetter)。
附件操作¶
載入:開檔案對話框選檔,把檔名寫進該附件列;若該列原本不是新增列,會把增刪修標記改為E(修改)(LoadFileExecute)。顯示:以系統預設程式開啟該附件(OpenFileExecute)。- 附件不可刪條件:
禁止刪除=Y的附件列為唯讀、不可編輯刪除(CanEdit)。
按「儲存」後(發行流程,SqlEditTurnViewModel_AfterSave)¶
- 把主檔、附件、流程關卡一起上傳(
SetUpdateSource→CommprBll)。 - 產生簽核 PDF:若發行關卡有設定「產生報表」,依
viewxml與報表名稱產出 PDF(CreatePdf/WorkflowPDFHelper),並以登入者的簽名圖檔作為發行者簽章;發行關卡沒設定報表時則略過產 PDF。 - 通知下一關:以
Detail1第一關的pkid呼叫WorkflowApproveBll.NotifyNext,由它找出下一關處理人;只對電子郵件=Y且 Email 有值的關卡寄出工作流程通知信。 - 重新整理來源單據資料並自動關閉本視窗。
「沒有發行者」是開窗時擋、不是按儲存時擋
流程必須有一道「發行」關卡的檢查(CheckTemplate)發生在打開面板的當下(CanSave() 內),而非按 儲存 時:缺發行關卡時開窗階段就會跳「沒有發行者…」,且不會去帶來源單據資料。AfterSave 流程本身不再重做這項檢查。
規劃中/未啟用
XAML 中保留了一顆 Get Workflow 按鈕(GetCommpr2Command),目前已註解停用;流程關卡改由選樣板時自動帶出,毋須手動按鈕取得。
常見問題¶
按了「工作流程」沒有反應或提示無資料?
本面板必須先有一張已儲存的單據才會打開。若提示無權限,表示你對該單據沒有工作流程/簽核權限;若提示無資料,請先在單據作業新增並儲存一張單據再送簽。
流程樣板下拉是空的、選不到東西?
樣板依單據別載入。若該單據別還沒有設定任何流程樣板,下拉就會是空的,自然無法送簽。請先在流程樣板選擇/流程樣板維護為該單據別建立樣板。
一打開工作流程面板就跳「沒有發行者」?
流程關卡中必須有一道「發行」關卡才能送簽。這項檢查(CheckTemplate)在面板開啟當下就會執行,缺發行關卡時開窗階段即提示「沒有發行者,請檢查工作流程表是否有設定錯誤」。這通常是流程樣板設定缺了發行者,請到流程樣板選擇檢查該樣板的關卡設定是否正確。
關卡的處理人 Email 是空白,通知信沒寄出?
通知信只會寄給電子郵件=Y 且 Email 有值的關卡。系統會在挑關卡時用處理人編號到人事資料補 Email;若人事資料本身沒填 Email,這一關就補不到、也不會寄信。請補齊該員工的 Email。
為什麼整個流程清單變成灰色、改不了?
表示這張單據的流程已經發行(已進入簽核)。發行後樣板與關卡都鎖定唯讀,只能檢視進度。後續的核可/退件請到工作流程簽核處理。
手動「新增數筆」加不了關卡?
只有在尚未發行且已選定流程樣板(流程清單已有列)時才開放手動加列;流程已發行或還沒選樣板時,右鍵新增不會有作用。
相關功能¶
需補截圖清單
以下截圖待功能 runtime 驗收後補拍(放 docs/Other/images/):
workflowview-step1.png— 面板全貌(上方單據資訊+流程樣板下拉+流程關卡清單)workflowview-step2.png— 流程樣板下拉與帶出的流程關卡清單workflowview-step3.png— 附件清單(含「載入」「顯示」按鈕)workflowview-step4.png— 手動「新增數筆」補關卡與 WKFLOWHANDLER seek 選人