:從零配置采購申請分級審批)
1. 項目概述為什么我們需要“靈活工作流場景模板”在SAP的日常運維和項目實施中審批流是繞不開的核心環(huán)節(jié)。無論是采購訂單的創(chuàng)建、財務(wù)憑證的過賬還是人事變動的申請背后都有一套或多套工作流在默默運轉(zhuǎn)。傳統(tǒng)的SAP工作流如使用SWB2、SWDD等事務(wù)碼配置的經(jīng)典工作流功能強大但配置過程往往較為復(fù)雜牽一發(fā)而動全身尤其是在需要為不同業(yè)務(wù)場景定制差異化審批路徑時配置和維護的工作量會急劇增加。這就引出了“靈活工作流”Flexible Workflow的概念。它不是要取代經(jīng)典工作流而是作為一種更敏捷、更易用的補充方案尤其適用于那些審批規(guī)則相對簡單、但場景多變、需要快速部署的業(yè)務(wù)需求。而“場景模板”Scenario Template則是靈活工作流的核心構(gòu)件。你可以把它理解為一個預(yù)定義的、可復(fù)用的審批流程“藍圖”。當(dāng)業(yè)務(wù)用戶在前臺觸發(fā)某個操作比如創(chuàng)建一張采購申請系統(tǒng)會根據(jù)預(yù)設(shè)的規(guī)則自動選擇匹配的場景模板并實例化出一個具體的工作流實例推送給相應(yīng)的審批人。想象一下你們公司有十幾種采購類型每種類型的金額審批權(quán)限都不同。如果沒有場景模板你可能需要在后臺為每一種組合都單獨配置一條工作流繁瑣且容易出錯。而有了場景模板你只需要定義好“采購類型”和“金額區(qū)間”這兩個條件以及對應(yīng)的審批層級系統(tǒng)就能自動判斷該走哪條路。這大大提升了流程的靈活性和可維護性。本次要深入探討的就是如何從零開始在SAP中創(chuàng)建這樣一個強大的靈活工作流場景模板核心事務(wù)碼是SWDD_SCENARIO。2. 核心概念與架構(gòu)拆解理解靈活工作流的“五臟六腑”在動手配置之前我們必須先理清幾個關(guān)鍵概念及其相互關(guān)系這是避免后續(xù)配置混亂的基礎(chǔ)。2.1 靈活工作流的核心組件一個完整的靈活工作流體系主要由以下幾部分構(gòu)成業(yè)務(wù)對象Business Object與業(yè)務(wù)上下文Business Context這是工作流的源頭。任何需要審批的事情都必須對應(yīng)一個SAP業(yè)務(wù)對象比如采購申請Bus. Object:BUS2105、采購訂單BUS2012等。業(yè)務(wù)上下文則定義了更具體的場景例如“采購申請-創(chuàng)建”或“采購訂單-金額變更”。系統(tǒng)通過標準增強點如WORKFLOW_START或BAdI如WORKFLOW_BUSINESS_OBJECT_EC來捕獲業(yè)務(wù)對象的事件并將其傳遞給靈活工作流引擎。條件Condition這是決策的大腦。條件用于判斷當(dāng)前業(yè)務(wù)實例比如一張具體的采購申請單應(yīng)該適用哪個場景模板。條件通常基于業(yè)務(wù)對象的字段值例如PurchaseRequisition.NetAmount 10000 AND PurchaseRequisition.PurchaseGroup 001。條件在事務(wù)碼SWF_COND中定義和維護。場景Scenario與場景模板Scenario Template這是我們要創(chuàng)建的核心。一個場景代表一類完整的審批流程需求。而一個場景模板則是這個場景的一個具體實現(xiàn)版本它綁定了一組具體的條件、審批步驟和代理規(guī)則。一個場景下可以有多個模板系統(tǒng)會按優(yōu)先級評估條件選擇第一個符合條件的模板來執(zhí)行。SWDD_SCENARIO就是創(chuàng)建和管理它們的入口。步驟Step與審批者Approver步驟定義了審批流程中的環(huán)節(jié)如“直接主管審批”、“部門經(jīng)理審批”、“財務(wù)審批”。每個步驟需要指定審批者是誰這里就涉及到代理規(guī)則Agent Assignment。審批者可以是具體的用戶ID、職位、工作中心或者通過動態(tài)規(guī)則如“申請人的直接上級”來確定。工作流定義Workflow Definition當(dāng)場景模板被觸發(fā)后系統(tǒng)在后臺會自動生成一個經(jīng)典工作流定義以WS開頭。這個定義是系統(tǒng)級的通常我們不需要直接修改它。靈活工作流配置的本質(zhì)就是在定義一個能自動生成這些工作流定義的規(guī)則集。2.2 SWDD_SCENARIO你的核心操作臺SWDD_SCENARIO是一個集成的配置界面。在這里你可以創(chuàng)建和管理場景定義場景的編號、描述和所屬業(yè)務(wù)對象。創(chuàng)建和管理場景模板為場景添加具體的模板設(shè)定其有效期、優(yōu)先級并關(guān)聯(lián)條件。設(shè)計審批步驟以圖形化或表格形式拖拽添加審批步驟并設(shè)置步驟間的順序串行、并行、會簽。分配代理審批人為每一個步驟指定審批者確定規(guī)則。模擬和測試在不影響生產(chǎn)數(shù)據(jù)的情況下測試模板的條件匹配和流程走向是否正確。注意靈活工作流的配置通常需要一定的后臺權(quán)限并且對業(yè)務(wù)對象的字段結(jié)構(gòu)要有清晰了解。建議在開發(fā)或測試系統(tǒng)先行演練。3. 實戰(zhàn)演練一步步創(chuàng)建你的第一個采購申請審批模板現(xiàn)在我們假設(shè)一個最常見的業(yè)務(wù)需求為采購申請PR創(chuàng)建審批流程。規(guī)則是金額 ≤ 5000元只需申請人直接主管審批金額 5000元且 ≤ 20000元需要部門經(jīng)理審批金額 20000元需要部門經(jīng)理和財務(wù)總監(jiān)兩級審批。3.1 前期準備定義條件SWF_COND條件是我們流程的“決策器”必須先定義好。事務(wù)碼打開SWF_COND。創(chuàng)建條件條件1低額審批條件IDZPR_LOW_VALUE描述采購申請金額小于等于5000條件表達式PurchaseRequisition.NetAmount LE 5000條件2中額審批條件IDZPR_MEDIUM_VALUE描述采購申請金額大于5000且小于等于20000條件表達式PurchaseRequisition.NetAmount GT 5000 AND PurchaseRequisition.NetAmount LE 20000條件3高額審批條件IDZPR_HIGH_VALUE描述采購申請金額大于20000條件表達式PurchaseRequisition.NetAmount GT 20000實操心得在SWF_COND中編寫條件時務(wù)必使用業(yè)務(wù)對象的技術(shù)名稱如PurchaseRequisition和字段的技術(shù)名稱如NetAmount。如果不確定字段名可以到事務(wù)碼SWO1中查看業(yè)務(wù)對象BUS2105的組件結(jié)構(gòu)。另外條件表達式支持AND、OR等邏輯運算符但要注意括號的使用以確保邏輯正確。3.2 核心配置創(chuàng)建場景與模板SWDD_SCENARIO進入事務(wù)碼打開SWDD_SCENARIO。創(chuàng)建新場景點擊“創(chuàng)建”按鈕。輸入場景ID如ZPR_APPROVAL和描述如“采購申請分級審批”。在“業(yè)務(wù)對象”字段中輸入BUS2105采購申請的業(yè)務(wù)對象系統(tǒng)會自動帶出描述。保存。此時你創(chuàng)建了一個空的場景。為場景添加第一個模板低額審批在左側(cè)導(dǎo)航樹中右鍵點擊你的場景ZPR_APPROVAL選擇“創(chuàng)建模板”。輸入模板ID如TPL_LOW和描述。關(guān)鍵設(shè)置優(yōu)先級設(shè)為10數(shù)字越小優(yōu)先級越高。系統(tǒng)會從高優(yōu)先級開始評估條件。條件點擊“條件”頁簽將之前創(chuàng)建的條件ZPR_LOW_VALUE分配給它。有效期通常留空表示長期有效。如果需要設(shè)置臨時流程可以在這里指定起止日期。設(shè)計步驟切換到“步驟”頁簽。這里通常使用“表格視圖”更直觀。點擊“創(chuàng)建步驟”輸入步驟ID如STEP10描述“直接主管審批”。代理分配這是核心。點擊該步驟的“代理”列。在彈出的對話框中選擇“規(guī)則”。常用的規(guī)則有WF_ORG_UNIT_MANAGER根據(jù)組織架構(gòu)找經(jīng)理。你需要指定“組織單位”的來源例如“申請人的默認職位所屬的組織單元”。更常用的方法是使用“表達式”點擊“表達式”按鈕可以編寫ABAP表達式來動態(tài)決定審批人。例如要找到申請人的直接上級表達式可能是{PurchaseRequisition.Requester}.Supervisor。這需要你的HR組織架構(gòu)已維護完整。對于本例我們假設(shè)通過一個自定義的BAdI或用戶出口能根據(jù)申請人工號找到其直接主管的用戶ID。這里我們先簡化為選擇“規(guī)則”并指定一個測試用戶。步驟類型默認為“審批”表示需要審批人執(zhí)行動作批準、拒絕、重定向。還有“通知”、“任務(wù)”等類型。保存這個模板。創(chuàng)建第二個模板中額審批同樣右鍵場景創(chuàng)建新模板TPL_MEDIUM描述“部門經(jīng)理審批”優(yōu)先級設(shè)為20。分配條件ZPR_MEDIUM_VALUE。在步驟中創(chuàng)建一步STEP20描述“部門經(jīng)理審批”。代理分配可以選擇規(guī)則WF_ORG_UNIT_MANAGER并指向部門級別的組織單元。創(chuàng)建第三個模板高額審批創(chuàng)建模板TPL_HIGH優(yōu)先級30條件ZPR_HIGH_VALUE。這里需要串行兩步STEP30_A“部門經(jīng)理審批”代理同模板二。STEP30_B“財務(wù)總監(jiān)審批”。點擊“創(chuàng)建后續(xù)步驟”系統(tǒng)會自動將兩個步驟用箭頭連接表示串行。為第二步分配代理例如指定固定的財務(wù)總監(jiān)用戶ID或通過規(guī)則找到財務(wù)部門的負責(zé)人。你的場景結(jié)構(gòu)現(xiàn)在應(yīng)該類似下表場景模板ID優(yōu)先級條件步驟串行目標審批人ZPR_APPROVALTPL_LOW10金額 ≤ 5000STEP10: 直接主管審批申請人的直接主管ZPR_APPROVALTPL_MEDIUM205000 金額 ≤ 20000STEP20: 部門經(jīng)理審批部門經(jīng)理ZPR_APPROVALTPL_HIGH30金額 20000STEP30_A: 部門經(jīng)理審批部門經(jīng)理STEP30_B: 財務(wù)總監(jiān)審批財務(wù)總監(jiān)3.3 激活與傳輸配置完成后模板狀態(tài)通常是“已修改”。需要激活才能生效。在SWDD_SCENARIO中選中你的場景點擊工具欄上的“激活”按鈕。系統(tǒng)會激活該場景下的所有模板。激活過程會生成后臺的工作流定義WS*開頭的任務(wù)。你可以通過事務(wù)碼SWIA查看已生成的工作流模板。所有配置都存儲在特定的傳輸請求中。記得將其分配到正確的傳輸請求以便后續(xù)傳輸?shù)綔y試和生產(chǎn)系統(tǒng)。重要提示激活后務(wù)必進行模擬測試SWDD_SCENARIO界面通常提供“模擬”或“測試”功能。你可以輸入一個采購申請?zhí)栂到y(tǒng)會展示根據(jù)該申請數(shù)據(jù)會觸發(fā)哪個模板、流程如何走。這是驗證條件邏輯和代理分配是否正確的最關(guān)鍵一步避免配置錯誤直接影響生產(chǎn)業(yè)務(wù)流程。4. 高級技巧與深度優(yōu)化配置基礎(chǔ)流程搭建起來后我們會遇到更復(fù)雜的需求。以下是一些進階配置點和技巧。4.1 復(fù)雜條件與多條件組合現(xiàn)實中的審批規(guī)則遠不止金額。可能還需要考慮采購組、工廠、物料組、成本中心等多個維度。在SWF_COND中你可以創(chuàng)建包含多個字段的復(fù)雜條件。例如PurchaseRequisition.NetAmount GT 10000 AND (PurchaseRequisition.PurchaseGroup EQ 001 OR PurchaseRequisition.Plant EQ 1000)在SWDD_SCENARIO中一個模板可以分配多個條件。這些條件之間是“與AND”的關(guān)系。也就是說必須所有分配的條件都滿足該模板才會被選中。這為你提供了極大的靈活性來精確控制模板的觸發(fā)范圍。4.2 動態(tài)代理分配的精髓靜態(tài)指定用戶ID是最不推薦的方式因為人員會變動。動態(tài)分配才是靈活工作流的靈魂。使用標準規(guī)則SAP預(yù)置了許多規(guī)則以WF_或FLEXWF_開頭如WF_ORG_UNIT_MANAGER找組織單元負責(zé)人、WF_RESPS_FOR_ORG_UNIT找負責(zé)某組織單元的所有人。在代理分配界面選擇“規(guī)則”然后選擇合適的規(guī)則并配置其參數(shù)來源通常來自業(yè)務(wù)對象的字段。使用ABAP表達式這是最強大的方式。點擊“表達式”按鈕進入表達式編輯器。你可以引用業(yè)務(wù)對象的屬性使用ABAP語法和函數(shù)進行復(fù)雜邏輯判斷。示例1找申請人的二級上級。{PurchaseRequisition.Requester}.Supervisor.Supervisor示例2根據(jù)成本中心找負責(zé)人。可能需要調(diào)用函數(shù)HR_GET_ORGA_FOR_OBJECT來獲取成本中心對應(yīng)的負責(zé)人職位再找到該職位上的用戶。表達式調(diào)試表達式編輯器通常有“測試”功能輸入一個業(yè)務(wù)對象實例如采購申請?zhí)柨梢灶A(yù)覽表達式計算出的結(jié)果這對調(diào)試非常有用。4.3 并行審批與會簽有些步驟需要多人同時審批并行且可能需要所有人或一定比例的人同意會簽。創(chuàng)建并行步驟在“步驟”表格視圖中創(chuàng)建兩個步驟如STEP_A,STEP_B它們沒有前后的箭頭連接且屬于同一個“容器步驟”或直接并列系統(tǒng)即視其為并行。設(shè)置會簽規(guī)則選中代表這一組并行步驟的“容器步驟”如果沒有可以先創(chuàng)建一個類型為“并行處理”的容器步驟再把具體步驟放進去。在容器步驟的屬性中找到“完成規(guī)則”All所有人必須同意一票否決。Percentage達到指定百分比的人同意即可。At least one至少一人同意即可。Majority多數(shù)人同意。 根據(jù)業(yè)務(wù)風(fēng)險控制要求選擇合適的規(guī)則。4.4 集成自定義審批邏輯與通知自定義審批UI標準的工作流任務(wù)可能信息不全。你可以通過開發(fā)Web Dynpro或Fiori應(yīng)用作為“定制任務(wù)”在SWDD_SCENARIO的步驟屬性中將“任務(wù)類型”指向你自定義的應(yīng)用從而為審批人提供更豐富的操作界面和業(yè)務(wù)數(shù)據(jù)。郵件與消息通知除了審批任務(wù)本身你還可以在步驟前后添加“通知”類型的步驟。通知步驟可以觸發(fā)發(fā)送郵件、發(fā)送SAP Office消息、或創(chuàng)建通知到用戶的統(tǒng)一收件箱如SAP Fiori Launchpad的Notifications。這用于知會相關(guān)方流程進度而不需要他們執(zhí)行審批動作。5. 常見問題排查與運維心得即使配置再仔細上線后也可能遇到各種問題。以下是一些典型問題的排查思路。5.1 工作流沒有觸發(fā)這是最常見的問題。請按以下順序排查檢查業(yè)務(wù)對象事件是否觸發(fā)在創(chuàng)建采購申請時系統(tǒng)是否真的調(diào)用了工作流啟動的增強點可以在標準增強點WORKFLOW_START或 BAdIWORKFLOW_BUSINESS_OBJECT_EC的實現(xiàn)中設(shè)置斷點或添加日志確認事件是否被捕獲以及傳遞的業(yè)務(wù)對象實例ID是否正確。檢查場景模板是否激活在SWDD_SCENARIO中確認你的場景和模板狀態(tài)是“已激活”而不是“已修改”或“已鎖定”。檢查條件是否匹配使用SWDD_SCENARIO的模擬測試功能輸入有問題的業(yè)務(wù)單據(jù)號看系統(tǒng)模擬執(zhí)行后選擇了哪個模板。如果顯示“未找到場景”說明所有模板的條件都不滿足。仔細檢查業(yè)務(wù)單據(jù)的字段值是否真的符合你設(shè)定的條件。特別注意金額、日期等字段的格式和單位如金額是否包含稅必須與條件表達式中的預(yù)期完全一致。檢查代理是否分配成功在模擬測試中查看具體步驟的“代理”列。如果顯示“未找到代理”則說明代理分配規(guī)則或表達式執(zhí)行失敗未能解析出任何有效的審批人。需要檢查代理分配配置并用表達式測試功能進行調(diào)試。檢查用戶是否有工作流收件箱審批任務(wù)最終會發(fā)到用戶的SAP Business Workplace事務(wù)碼SBWP或Fiori通知中心。確保目標用戶已分配SAP_USER參數(shù)并且工作流系統(tǒng)用戶WF-BATCH已正確配置且運行正常。5.2 審批任務(wù)找不到或顯示錯誤任務(wù)消失在SBWP中檢查用戶的“已完成工作”文件夾。可能任務(wù)已被其他用戶如秘書代審批或者被系統(tǒng)自動處理如果配置了缺省代理或替代規(guī)則。任務(wù)鏈接點不開這通常與工作流容器中綁定的業(yè)務(wù)對象實例有關(guān)。可能是對象實例已被刪除或鎖定。可以通過事務(wù)碼SWI1工作流日志或**SWI2*工作流實例查詢具體的工作流實例查看其錯誤信息。“循環(huán)檢測”錯誤如果在代理分配規(guī)則中A的上級是BB的上級又是A或者最終指向了自己系統(tǒng)會檢測到代理分配循環(huán)并報錯。需要檢查組織架構(gòu)數(shù)據(jù)的完整性。5.3 性能優(yōu)化建議當(dāng)流程非常復(fù)雜或單據(jù)量巨大時需關(guān)注性能。條件優(yōu)化避免在條件中使用過于復(fù)雜或需要訪問多張數(shù)據(jù)庫表的函數(shù)。盡量使用業(yè)務(wù)對象上直接可用的字段。代理規(guī)則優(yōu)化動態(tài)表達式雖然靈活但執(zhí)行成本可能較高。對于相對固定的映射如特定工廠對應(yīng)固定審批組可以考慮在自定義表中維護映射關(guān)系然后在表達式中通過簡單的表讀取來獲取審批人這比復(fù)雜的組織架構(gòu)遍歷更高效。定期歸檔使用事務(wù)碼SWIA或SWI6定期歸檔已完成的工作流實例可以保持工作流運行時表如SWWUSERWI的清爽提升系統(tǒng)整體性能。5.4 配置變更管理業(yè)務(wù)流程不是一成不變的。當(dāng)審批規(guī)則需要調(diào)整時修改而非直接覆蓋盡量不要刪除舊的激活模板而是創(chuàng)建一個新的模板版本或新的模板并調(diào)整其優(yōu)先級。先將新模板激活并測試確認無誤后再停用舊模板。這可以實現(xiàn)平滑過渡避免流程中斷。影響分析在SWDD_SCENARIO中通常有“使用位置清單”或“影響分析”功能可以查看一個條件或規(guī)則被哪些模板引用。在修改前先做分析避免 unintended consequences。完整測試任何配置變更都必須經(jīng)過完整的單元測試模擬測試和集成測試在測試系統(tǒng)創(chuàng)建真實業(yè)務(wù)單據(jù)觸發(fā)流程。