目标:
数据敏感字段的修改往往需要记录操作日志,例如客户表中的姓名、身份证等信息,需要系统记录下修改记录,方便以后溯源。
准备工作:
1、创建一个数据表,根据各自需求添加若干个字段,并准备若干条数据以便测试。
2、创建一个日志表。添加字段:时间、数据、字段、操作前、操作后、操作人(关联-用户)。
实现步骤:
1、新建一个“修改数据表”的功能。
2、点击功能进入编辑界面,在修改功能的基础上添加一个获取当前用户步骤:点开步骤设置,将id设为查询$$USER。
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,//操作人
});
}
});
}