資料敏感欄位的修改往往需要記錄操作日誌,例如客戶表中的姓名、身份證等資訊,需要系統記錄下修改記錄,方便以後溯源。
準備工作:1、在白碼建立一個數據表,根據各自需求新增若干個欄位,並準備若干條資料以便測試。
2、建立一個日誌表。新增欄位:時間、資料、欄位、操作前、操作後、操作人(關聯-使用者)。
實現步驟:1、新建一個“修改資料表”的功能。
3、新增程式設計步驟。點開步驟的“設定>程式設計”進入程式碼編輯介面。
4、新增修改前資料、修改後資料、當前使用者的引數,並在程式碼中引用。
5、獲取當前時間。
//當前時間 let date = new Date(); let YY = date.getFullYear() + '-'; let MM = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-'; let DD = (date.getDate() + 1 <= 10 ? '0' + date.getDate() : date.getDate()) + ' '; let hh = (date.getHours() + 1 <= 10 ? '0' + date.getHours() : date.getHours()) + ':'; let mm = date.getMinutes() + 1 <= 10 ? '0' + date.getMinutes() : date.getMinutes(); let time=YY+MM+DD+hh+mm;
6、新增資料表中需要記錄修改操作的欄位id資料。
//資料表字段id let fields = [ "5ff44e3fdd9ec8350b2d24df",//欄位1, "5ff44e45cf250d350cc124d2",//欄位2, "5ff44e51cf250d350cc124d4",//欄位4, ];
欄位id獲取方式為field_資料表>欄位名:
7、新增可根據欄位id獲取欄位名的map
//資料表字段名 let fieldNameMap = { "5ff44e3fdd9ec8350b2d24df": "欄位1", "5ff44e45cf250d350cc124d2": "欄位2", "5ff44e51cf250d350cc124d4": "欄位4", };
8、是否需要記錄欄位修改的判斷邏輯
fields.forEach(field => { //對每個欄位進行判斷 if (before[field] != after[field]) { //修改前後不相等即有修改,需進行日誌記錄 } });
9、建立日誌記錄
{ "5ff44e6ecf250d350cc124d7": time,//時間 "5ff44e80cf250d350cc124d8": after["5ff44e5ccf250d350cc124d5"],//資料ID "5ff44ea0cf250d350cc124d9": fieldNameMap[field],//欄位 "5ff44ea5cf250d350cc124da": before[field],//操作前 "5ff44eaccf250d350cc124db": after[field],//操作後 "5ff44eb5cf250d350cc124dc": user._id,//操作人}
10、至此日誌功能已全部實現。
完整程式碼:
async function runProcess($model = model, $plugin = plugin, $params) { let before = await $params.before;//修改前的資料 let after = await $params.after;//修改後的資料 let user = await $params.user;//當前使用者 //當前時間 let date = new Date(); let YY = date.getFullYear() + '-'; let MM = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-'; let DD = (date.getDate() + 1 <= 10 ? '0' + date.getDate() : date.getDate()) + ' '; let hh = (date.getHours() + 1 <= 10 ? '0' + date.getHours() : date.getHours()) + ':'; let mm = date.getMinutes() + 1 <= 10 ? '0' + date.getMinutes() : date.getMinutes(); let time = YY + MM + DD + hh + mm; //資料表字段id let fields = [ "5ff44e3fdd9ec8350b2d24df",//欄位1, "5ff44e45cf250d350cc124d2",//欄位2, "5ff44e51cf250d350cc124d4",//欄位4, ]; //資料表字段名 let fieldNameMap = { "5ff44e3fdd9ec8350b2d24df": "欄位1", "5ff44e45cf250d350cc124d2": "欄位2", "5ff44e51cf250d350cc124d4": "欄位4", }; fields.forEach(field => { //對每個欄位進行判斷 if (before[field] != after[field]) { //修改前後不相等即有修改,需進行日誌記錄 $plugin.data.saveData("5ff44e6acf250d350cc124d6", { "5ff44e6ecf250d350cc124d7": time,//時間 "5ff44e80cf250d350cc124d8": after["5ff44e5ccf250d350cc124d5"],//資料ID "5ff44ea0cf250d350cc124d9": fieldNameMap[field],//欄位 "5ff44ea5cf250d350cc124da": before[field],//操作前 "5ff44eaccf250d350cc124db": after[field],//操作後 "5ff44eb5cf250d350cc124dc": user._id,//操作人 }); } });}
效果:
最新評論