順序審批流的簡單程式碼實現
透過白碼低程式碼開發平臺簡單實現根據使用者表設定的稽核人進行順序審批的審批流功能。
準備工作:
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- PHP實現簡單順序棧PHP
- Workflow Core + asp.net core 5.0 實現簡單審批工作流ASP.NET
- js程式碼執行順序簡單介紹JS
- 使用自定義任務審批欄位建立 SharePoint 順序工作流
- 順序棧的簡單操作
- SAP MM 採購申請審批的一個簡單實現方式
- Activiti學習筆記二:簡單順序流演示demo筆記
- 最簡單的C程式設計--順序程式設計C程式程式設計
- 簡單實現批處理
- javascript顛倒陣列元素順序簡單程式碼例項JavaScript陣列
- 順序表的實現
- 線性表的順序儲存C++程式碼實現C++
- 簡化工作流之程式碼審查回覆訊息生成(Python實現)Python
- 順序棧的實現方式
- 實現簡單的`Blazor`低程式碼Blazor
- jQuery實現的簡單投票簡單程式碼例項jQuery
- 佇列 優先順序佇列 python 程式碼實現佇列Python
- Java實現順序表Java
- javascript執行順序簡單介紹JavaScript
- javascript實現的簡單抽獎程式碼JavaScript
- PHP實現的簡單日曆程式碼PHP
- jQuery ajax的執行順序簡單介紹jQuery
- 具體實現程式碼@資料結構探險——順序表資料結構
- Silverlight中多個storyboard順序播放(程式碼實現)
- 【資料結構】堆疊(順序棧、鏈棧)的JAVA程式碼實現資料結構Java
- JavaScript簡單抽獎程式的實現及程式碼JavaScript
- DS順序表--類實現
- tensorflowrnn最簡單實現程式碼RNN
- 線性表的使用——順序實現
- 簡單實現分行輸出的javascript程式碼JavaScript
- css選擇器的解析順序簡單介紹CSS
- js實現的讓文字以拼音首字母順序進行排序程式碼JS排序
- jQuery實現的新聞列表上下移動調整順序程式碼例項jQuery
- 功能測試之審批流測試
- 如何使用Rust的gaffer實現優先順序的微批處理排程器 - njkRust
- EasyUI實現的form表單提交簡單程式碼例項UIORM
- 幾句程式碼簡單實現IoC容器
- C語言實現順序表C語言