順序?qū)徟鞯暮唵未a實現(xiàn)(順序表的流程圖)
通過白碼低代碼開發(fā)平臺簡單實現(xiàn)根據(jù)用戶表設(shè)置的審核人進行順序?qū)徟膶徟鞴δ堋?/p>
準備工作:
1、在用戶表中添加若干個審批人字段,關(guān)聯(lián)用戶表。(我這里只設(shè)置4級審批)
2、根據(jù)需要創(chuàng)建“申請單”數(shù)據(jù)表記錄申請信息。
必須字段:狀態(tài)(字符)、當前審核人(關(guān)聯(lián)-用戶)、審核歷史(集合-審核單)
3、根據(jù)需要創(chuàng)建“審核單”數(shù)據(jù)表記錄審核人的審核信息。
必須字段:審核狀態(tài)(字符)、申請單(關(guān)聯(lián)-申請單)
實現(xiàn)步驟:
- 實現(xiàn)創(chuàng)建申請單的功能
1、在快速開發(fā)中創(chuàng)建“數(shù)據(jù)集”類型的“申請單”菜單。
2、快速創(chuàng)建“新建”申請單功能
3、單擊新建的功能,進入流程設(shè)計頁,點擊“新建申請單”步驟的設(shè)置。
將“申請人”設(shè)為當前用戶,
將“狀態(tài)”設(shè)為“1級審批”,
將“當前審核人”設(shè)為當前用戶的1級審批,其余根據(jù)需求設(shè)置。
4、將功能保存發(fā)布。
效果:
- 實現(xiàn)當前審批人審批功能
1、步驟1:創(chuàng)建“選擇申請單”的功能,步驟1:選擇“狀態(tài)”不為“通過”且不為“駁回”,“當前審核人”為當前用戶的“申請單”。
2、步驟2:新建一條“審核單”,將“審核狀態(tài)”設(shè)為必填下拉選項(通過、駁回),將“申請單”設(shè)為“選擇申請單”。
- 實現(xiàn)流轉(zhuǎn)到下一審批人功能
1、添加“關(guān)聯(lián)獲取”步驟獲取申請人信息,注意將所有字段隱藏。
2、添加編程步驟,添加“選擇申請單”、“申請人”、“審核信息”三個參數(shù),同時在代碼區(qū)引用。
引用代碼:
let apply = await $params.apply;//申請單 let createUser = await $params.createUser;//創(chuàng)建人 let approval = await $params.approval;//審核記錄
3、添加狀態(tài)變量,引用申請單中的“狀態(tài)”字段。
//申請單當前狀態(tài)(本次審核前) let status = apply["5feaf06febabb14ea012579b"];
字段id獲取方式:
4、添加可以根據(jù)當前status來指定查詢用戶表的審批人的map
//下一審批人查詢id let nextUserIdByStatusMap = { "1級審批": "5feaf1f908f77e4ea7fb6e04",//申請人的二級審批 "2級審批": "5feaf20608f77e4ea7fb6e05",//申請人的三級審批 "3級審批": "5feaf2309cff054eaf91ac69",//申請人的四級審批 "4級審批": " "//當前狀態(tài)已經(jīng)是4級審批則無下一級審批 }
5、添加可以根據(jù)當前status指定下一狀態(tài)的map
//下一狀態(tài) 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);
數(shù)據(jù)表entity獲取方法:
7、下一審核人的判斷邏輯
//當前審核狀態(tài)let approvalStatus=approval["5feaf1219cff054eaf91ac5c"]; //申請單entity let applyEntity="5feaefdaebabb14ea0125792"; if(approvalStatus=="通過"&&nextUser._id){ //審核通過,且還有下一審核人 }else{ //審核駁回或無下一審核人 }
8、需要下一審核人審核時,更新申請單的 狀態(tài) 及 當前審核人 字段
//更新申請單的 狀態(tài) 及 當前審核人 await $plugin.data.updateData(applyEntity, apply._id, { "5feaf06febabb14ea012579b": nextStatusMap[status],//狀態(tài) "5feaf0829664af4ea1062b4e": nextUser._id,//當前審核人 });
9、不存在下一審核人或本次審核駁回,更新申請單的 狀態(tài) 及 當前審核人 字段
//更新申請單的 狀態(tài) 及 當前審核人 await $plugin.data.updateData(applyEntity, apply._id, { "5feaf06febabb14ea012579b": approvalStatus,//狀態(tài) "5feaf0829664af4ea1062b4e": "",//清空當前審核人 });
10、至此,功能已實現(xiàn)完畢,此時可保存并發(fā)布功能。
編程完整代碼:
async function runProcess($model = model, $plugin = plugin, $papplyams) { let apply = await $params.apply;//申請單 let createUser = await $params.createUser;//申請人 let approval = await $params.approval;//審核記錄 //申請單當前狀態(tài)(本次審核前)let status = apply["5feaf06febabb14ea012579b"]; //下一審批人查詢id let nextUserIdByStatusMap = { "1級審批": "5feaf1f908f77e4ea7fb6e04",//申請人的二級審批 "2級審批": "5feaf20608f77e4ea7fb6e05",//申請人的三級審批 "3級審批": "5feaf2309cff054eaf91ac69",//申請人的四級審批 "4級審批": " "//當前狀態(tài)已經(jīng)是4級審批則無下一級審批} //下一狀態(tài) let nextStatusMap = { "1級審批": "2級審批", "2級審批": "3級審批", "3級審批": "4級審批"} //獲取下一審核人 let userEntity = "5ee84e626646265863211238"; let nextUserId = createUser[nextUserIdByStatusMap[status]];let nextUser = await $plugin.data.getData(userEntity, nextUserId); //當前審核狀態(tài) let approvalStatus = approval["5feaf1219cff054eaf91ac5c"]; //申請單entity let applyEntity = "5feaefdaebabb14ea0125792"; if (approvalStatus == "通過" && nextUser._id) { //審核通過,且還有下一審核人 //更新申請單的 狀態(tài) 及 當前審核人 await $plugin.data.updateData(applyEntity, apply._id, { "5feaf06febabb14ea012579b": nextStatusMap[status],//狀態(tài) "5feaf0829664af4ea1062b4e": nextUser._id,//當前審核人 }); } else { //審核駁回或無下一審核人 //更新申請單的 狀態(tài) 及 當前審核人 await $plugin.data.updateData(applyEntity, apply._id, { "5feaf06febabb14ea012579b": approvalStatus,//狀態(tài) "5feaf0829664af4ea1062b4e": "",//清空當前審核人 }); }}
最終效果:
為方便測試,這里設(shè)置4級審核人都是我自己。