原创:C/S架构快速开发框架通用可配置的数据修改日志解决方案
原创:C/S架构快速开发框架通用可配置的数据修改日志解决方案
扫一扫加微信
数据日志介绍
我们在设计基于数据管理软件系统时,需要记录用户操作数据的历史,记录与跟踪数据变化、追溯数据修改历史,详细记录每次操作更新的内容,具体到字段,以及修改前与修改后的内容。
数据修改日志有多种实现方案,有通过程序实现的,比如在业务层或数据层搭建自动生成日志的代码,也有通过数据库实现的(使用触发器记录数据更新日志)。本文详细介绍第二种方案,C/S系统开发框架底层已经实现数据日志的生成与保存,用户不需要修改代码。
本方案的核心是通过一个日志配置表(配置数据日志字段),配置哪些表需要记录日志、修改哪些列的时候记录日志,然后程序根据配置信息,在用户保存数据时自动生成数据日志。此方案用户不需要编写任何代码,只需要配置跟踪修改的字段。
数据日志关键属性
操作用户、操作时间、表名、字段名、旧的数据、新的数据以及当前记录的主键值。
本文以开发框架提供的案例《采购订单》进行介绍。
日志自动配置界面
配置《采购订单》主表:CSFrameworkV5_Normal.dbo.tb_PO表。
选择数据库、资料表,勾选需要生成日志的字段,配置完成,点【保存数据】按钮,如下图:
配置《采购订单》明细表:CSFrameworkV5_Normal.dbo.tb_POs表。
打开《采购订单》,修改内容,保存数据后,点【查看日志】按钮,如下图:
自动跳转到《数据修改日志》查询界面:
具体实现:
在BLL层的Update方法,调用LogEditHistory.WriteLog方法生成数据日志、保存数据日志。
C# Code:
/// <summary>
///保存数据
/// </summary>
public override SaveResult Update(DataSet saveData)
{
SaveResult result = _Bridge.Update(saveData); //交给数据层处理
//保存数据成功,生成数据修改日志
if (result.Success && _WriteDataLog)
LogEditHistory.WriteLog(saveData, tb_PO.__TableName, _KeyFieldName);
return result;
}
//来源:C/S框架网 | www.csframework.com | QQ:23404761
///保存数据
/// </summary>
public override SaveResult Update(DataSet saveData)
{
SaveResult result = _Bridge.Update(saveData); //交给数据层处理
//保存数据成功,生成数据修改日志
if (result.Success && _WriteDataLog)
LogEditHistory.WriteLog(saveData, tb_PO.__TableName, _KeyFieldName);
return result;
}
//来源:C/S框架网 | www.csframework.com | QQ:23404761
BLL层有个标记是否需要生成数据日志:
C# Code:
/// <summary>
/// 标记是否保存数据操作日志
/// </summary>
protected bool _WriteDataLog = false;
/// 标记是否保存数据操作日志
/// </summary>
protected bool _WriteDataLog = false;
《采购订单》的BLL层构造器中将 _WriteDataLog = True,表示需要生成数据日志:
C# Code:
/// <summary>
/// 采购订单构造器
/// </summary>
public bllPO()
{
_KeyFieldName = tb_PO.__KeyName; //主键字段
_SummaryTableName = tb_PO.__TableName;//表名
_Bridge = this.CreateBridge();//实例化桥接功能
_WriteDataLog = true;//保存修改日志
}
//来源:C/S框架网 | www.csframework.com | QQ:23404761
/// 采购订单构造器
/// </summary>
public bllPO()
{
_KeyFieldName = tb_PO.__KeyName; //主键字段
_SummaryTableName = tb_PO.__TableName;//表名
_Bridge = this.CreateBridge();//实例化桥接功能
_WriteDataLog = true;//保存修改日志
}
//来源:C/S框架网 | www.csframework.com | QQ:23404761
作者在编写本文时发现以下2处Bug:
1. 打开LogEditHistory.cs文件,DoCompareTable方法有以下2处修改
1.1) logID变量放置到foreach循环内
1.2) sys_Log的TableName字段的值必须是当前表的表名。
2, 修改sp_sys_SearchLog存储过程,改LEFT JOIN
数据日志配置表(CSFrameworkV5_Normal数据库)
SQL Code:
SELECT TOP 10 * FROM dbo.sys_Log ORDER BY isid DESC
SELECT TOP 10 * FROM dbo.sys_LogDtl ORDER BY isid DESC
//来源:C/S框架网 | www.csframework.com | QQ:23404761
SELECT TOP 10 * FROM dbo.sys_LogDtl ORDER BY isid DESC
//来源:C/S框架网 | www.csframework.com | QQ:23404761
sys_Log:数据日志主表。
sys_LogDtl:数据日志明细表。
主、丛表关联字段:GUID32
扫一扫加微信
版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
NewDoc C/S框架网