順序審批流的簡單程式碼實現
透過白碼低程式碼開發平臺簡單實現根據使用者表設定的稽核人進行順序審批的審批流功能。
準備工作:
1、在使用者表中新增若干個審批人欄位,關聯使用者表。(我這裡只設定4級審批)
2、根據需要建立“申請單”資料表記錄申請資訊。
必須欄位:狀態(字元)、當前稽核人(關聯-使用者)、稽核歷史(集合-稽核單)
3、根據需要建立“稽核單”資料表記錄稽核人的稽核資訊。
必須欄位:稽核狀態(字元)、申請單(關聯-申請單)
實現步驟:
-
實現建立申請單的功能
1、在快速開發中建立“資料集”型別的“申請單”選單。
2、快速建立“新建”申請單功能
3、單擊新建的功能,進入流程設計頁,點選“新建申請單”步驟的設定。
將“申請人”設為當前使用者,
將“狀態”設為“1級審批”,
將“當前稽核人”設為當前使用者的1級審批,其餘根據需求設定。
4、將功能儲存釋出。
效果:
-
實現當前審批人審批功能
1、步驟1:建立“選擇申請單”的功能,步驟1:選擇“狀態”不為“透過”且不為“駁回”,“當前稽核人”為當前使用者的“申請單”。
2、步驟2:新建一條“稽核單”,將“稽核狀態”設為必填下拉選項(透過、駁回),將“申請單”設為“選擇申請單”。
-
實現流轉到下一審批人功能
1、新增“關聯獲取”步驟獲取申請人資訊,注意將所有欄位隱藏。
2、新增程式設計步驟,新增“選擇申請單”、“申請人”、“稽核資訊”三個引數,同時在程式碼區引用。
引用程式碼:
let apply = await $params.apply;//申請單 let createUser = await $params.createUser;//建立人 let approval = await $params.approval;//稽核記錄
3、新增狀態變數,引用申請單中的“狀態”欄位。
//申請單當前狀態(本次稽核前) let status = apply["5feaf06febabb14ea012579b"];
欄位id獲取方式:
4、新增可以根據當前status來指定查詢使用者表的審批人的map
//下一審批人查詢id let nextUserIdByStatusMap = { "1級審批": "5feaf1f908f77e4ea7fb6e04",//申請人的二級審批 "2級審批": "5feaf20608f77e4ea7fb6e05",//申請人的三級審批 "3級審批": "5feaf2309cff054eaf91ac69",//申請人的四級審批 "4級審批": " "//當前狀態已經是4級審批則無下一級審批 }
5、新增可以根據當前status指定下一狀態的map
//下一狀態 let nextStatusMap = { "1級審批": "2級審批", "2級審批": "3級審批", "3級審批": "4級審批" }
6、獲取下一稽核人
//獲取下一稽核人 let userEntity = "5ee84e626646265863211238"; let nextUserId = createUser[nextUserIdByStatusMap[status]]; let nextUser = await $plugin.data.getData(userEntity, nextUserId);
資料表entity獲取方法:
7、下一稽核人的判斷邏輯
//當前稽核狀態 let approvalStatus=approval["5feaf1219cff054eaf91ac5c"]; //申請單entity let applyEntity="5feaefdaebabb14ea0125792"; if(approvalStatus=="透過"&&nextUser._id){ //稽核透過,且還有下一稽核人 }else{ //稽核駁回或無下一稽核人 }
8、需要下一稽核人稽核時,更新申請單的 狀態 及 當前稽核人 欄位
//更新申請單的 狀態 及 當前稽核人 await $plugin.data.updateData(applyEntity, apply._id, { "5feaf06febabb14ea012579b": nextStatusMap[status],//狀態 "5feaf0829664af4ea1062b4e": nextUser._id,//當前稽核人 });
9、不存在下一稽核人或本次稽核駁回,更新申請單的 狀態 及 當前稽核人 欄位
//更新申請單的 狀態 及 當前稽核人 await $plugin.data.updateData(applyEntity, apply._id, { "5feaf06febabb14ea012579b": approvalStatus,//狀態 "5feaf0829664af4ea1062b4e": "",//清空當前稽核人 });
10、至此,功能已實現完畢,此時可儲存併發布功能。
程式設計完整程式碼:
async function runProcess($model = model, $plugin = plugin, $papplyams) { let apply = await $params.apply;//申請單 let createUser = await $params.createUser;//申請人 let approval = await $params.approval;//稽核記錄 //申請單當前狀態(本次稽核前) let status = apply["5feaf06febabb14ea012579b"]; //下一審批人查詢id let nextUserIdByStatusMap = { "1級審批": "5feaf1f908f77e4ea7fb6e04",//申請人的二級審批 "2級審批": "5feaf20608f77e4ea7fb6e05",//申請人的三級審批 "3級審批": "5feaf2309cff054eaf91ac69",//申請人的四級審批 "4級審批": " "//當前狀態已經是4級審批則無下一級審批 } //下一狀態 let nextStatusMap = { "1級審批": "2級審批", "2級審批": "3級審批", "3級審批": "4級審批" } //獲取下一稽核人 let userEntity = "5ee84e626646265863211238"; let nextUserId = createUser[nextUserIdByStatusMap[status]]; let nextUser = await $plugin.data.getData(userEntity, nextUserId); //當前稽核狀態 let approvalStatus = approval["5feaf1219cff054eaf91ac5c"]; //申請單entity let applyEntity = "5feaefdaebabb14ea0125792"; if (approvalStatus == "透過" && nextUser._id) { //稽核透過,且還有下一稽核人 //更新申請單的 狀態 及 當前稽核人 await $plugin.data.updateData(applyEntity, apply._id, { "5feaf06febabb14ea012579b": nextStatusMap[status],//狀態 "5feaf0829664af4ea1062b4e": nextUser._id,//當前稽核人 }); } else { //稽核駁回或無下一稽核人 //更新申請單的 狀態 及 當前稽核人 await $plugin.data.updateData(applyEntity, apply._id, { "5feaf06febabb14ea012579b": approvalStatus,//狀態 "5feaf0829664af4ea1062b4e": "",//清空當前稽核人 }); } }
最終效果:
為方便測試,這裡設定4級稽核人都是我自己。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69981626/viewspace-2746955/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Workflow Core + asp.net core 5.0 實現簡單審批工作流ASP.NET
- 最簡單的C程式設計--順序程式設計C程式程式設計
- SAP MM 採購申請審批的一個簡單實現方式
- 簡化工作流之程式碼審查回覆訊息生成(Python實現)Python
- 線性表的順序儲存C++程式碼實現C++
- 順序表的實現
- 簡單實現批處理
- 佇列 優先順序佇列 python 程式碼實現佇列Python
- 瀑布流簡單實現
- 實現簡單的`Blazor`低程式碼Blazor
- 順序棧的實現方式
- Java實現順序表Java
- 具體實現程式碼@資料結構探險——順序表資料結構
- 【資料結構】堆疊(順序棧、鏈棧)的JAVA程式碼實現資料結構Java
- DS順序表--類實現
- 線性表的使用——順序實現
- 一個簡單的區塊鏈程式碼實現區塊鏈
- html實現簡單ListViews效果的例項程式碼HTMLView
- 簡單的python程式碼實現語音朗讀Python
- 如何使用Rust的gaffer實現優先順序的微批處理排程器 - njkRust
- 【資料結構】佇列(順序佇列、鏈佇列)的JAVA程式碼實現資料結構佇列Java
- 順序賦值的方式實現流水燈賦值
- 使用簡單的Java程式碼實現酒店管理系統Java
- Go包中程式碼執行順序Go
- 採購訂單的審批、撤回審批及拒絕 ME29N
- 順序表實現二分排序排序
- 功能測試之審批流測試
- JS簡單實現防抖和節流JS
- 聊天室原始碼開發中防抖節流的簡單實現原始碼
- 資料結構實驗一:順序表的建立與操作實現、順序表實現約瑟夫環問題資料結構
- 原始碼解析C#中PriorityQueue(優先順序佇列)的實現原始碼C#佇列
- 讀Flink原始碼談設計:流批一體的實現與現狀原始碼
- 使用 Upsource 實現程式碼審查 - jetbrains 系列AI
- python的順序程式設計Python程式設計
- 簡單實現幾種常見的前端效果,附程式碼!前端
- 線性表的順序儲存C++程式碼C++
- Roslyn 簡單實現程式碼智慧提示補全功能ROS
- 簡單工廠模式(simple factory)及程式碼實現模式