原创: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

参考文档:
TMS-物流运输管理系统《系统详细设计说明书》docx下载(原创文档)
【原创】WCF开发框架 - 采用wsHttpBinding及basicHttpBinding连接https协议的WCF服务
原创C/S架构开源软件 - C#.NET+Winform+Dev+SQL快速开发框架
CSFramework.COM原创:全球国家名称列表国旗图标库导入程序(C#+VS2015)
原创:SQLJOB作业自动备份数据库并自动清除备份历史记录
【原创产品】自己开发MES系统软件,MES开发架构及MES客户端快速开发框架平台
【原创】进销存软件开发模板基于C/S架构快速开发框架C#+Winform+DevExpress
原创:C#源码 GridMovetor按回车自动跳到下一列或自动新增记录(www.csframework.com)
【原创】WebApi开发框架:Token生成、Token缓存原理、Token验证、令牌机制与原理
【原创】C# Winform Dev自动下拉弹框筛选数据PopupContainerEdit组件
【原创】C# Dev用户自定义组件,自动下拉弹框表格过滤数据组件ucMyLookUpEdit
【原创】C# 深度拷贝对象 使用.NET反射+递归原理实现深度克隆
【原创】简单快速软件开发平台,C/S架构二次开发平台
【原创】C# Winform进销存系统快速开发框架
原创Winform快速开发框架平台Oracle版本(三层架构+C#.NET+Oracle数据库)
C#微信支付完成前端回调通知notify_url完整版源码|CSframework.com原创文章
TMS-物流运输管理系统《系统详细设计说明书》docx下载(原创文档)
【原创】WCF开发框架 - 采用wsHttpBinding及basicHttpBinding连接https协议的WCF服务
原创C/S架构开源软件 - C#.NET+Winform+Dev+SQL快速开发框架
CSFramework.COM原创:全球国家名称列表国旗图标库导入程序(C#+VS2015)
原创:SQLJOB作业自动备份数据库并自动清除备份历史记录
【原创产品】自己开发MES系统软件,MES开发架构及MES客户端快速开发框架平台
【原创】进销存软件开发模板基于C/S架构快速开发框架C#+Winform+DevExpress
原创:C#源码 GridMovetor按回车自动跳到下一列或自动新增记录(www.csframework.com)
【原创】WebApi开发框架:Token生成、Token缓存原理、Token验证、令牌机制与原理
【原创】C# Winform Dev自动下拉弹框筛选数据PopupContainerEdit组件
【原创】C# Dev用户自定义组件,自动下拉弹框表格过滤数据组件ucMyLookUpEdit
【原创】C# 深度拷贝对象 使用.NET反射+递归原理实现深度克隆
【原创】简单快速软件开发平台,C/S架构二次开发平台
【原创】C# Winform进销存系统快速开发框架
原创Winform快速开发框架平台Oracle版本(三层架构+C#.NET+Oracle数据库)
C#微信支付完成前端回调通知notify_url完整版源码|CSframework.com原创文章
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
在线客服
