原创:C/S架构快速开发框架通用可配置的数据修改日志解决方案
作者:作者不详  发布日期:2020/05/22 19:09:25
  原创:C/S架构快速开发框架通用可配置的数据修改日志解决方案

原创:C/S架构快速开发框架通用可配置的数据修改日志解决方案


数据日志介绍


我们在设计基于数据管理软件系统时,需要记录用户操作数据的历史,记录与跟踪数据变化、追溯数据修改历史,详细记录每次操作更新的内容,具体到字段,以及修改前与修改后的内容。


数据修改日志有多种实现方案,有通过程序实现的,比如在业务层或数据层搭建自动生成日志的代码,也有通过数据库实现的(使用触发器记录数据更新日志)。本文详细介绍第二种方案,C/S系统开发框架底层已经实现数据日志的生成与保存,用户不需要修改代码。


本方案的核心是通过一个日志配置表(配置数据日志字段),配置哪些表需要记录日志、修改哪些列的时候记录日志,然后程序根据配置信息,在用户保存数据时自动生成数据日志。此方案用户不需要编写任何代码,只需要配置跟踪修改的字段。


数据日志关键属性


操作用户、操作时间、表名、字段名、旧的数据、新的数据以及当前记录的主键值。




本文以开发框架提供的案例《采购订单》进行介绍。


贴图图片-data_log_数据日志00


日志自动配置界面


配置《采购订单》主表:CSFrameworkV5_Normal.dbo.tb_PO表。

选择数据库、资料表,勾选需要生成日志的字段,配置完成,点【保存数据】按钮,如下图:


贴图图片-data_log_数据日志


配置《采购订单》明细表:CSFrameworkV5_Normal.dbo.tb_POs表。


贴图图片-data_log_数据日志02



打开《采购订单》,修改内容,保存数据后,点【查看日志】按钮,如下图:


贴图图片-data_log_数据日志03



自动跳转到《数据修改日志》查询界面:


贴图图片-data_log_数据日志04



贴图图片-data_log_数据日志05





具体实现:


在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





BLL层有个标记是否需要生成数据日志:


C# Code:

/// <summary>
/// 标记是否保存数据操作日志
/// </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




作者在编写本文时发现以下2处Bug:


1. 打开LogEditHistory.cs文件,DoCompareTable方法有以下2处修改

1.1) logID变量放置到foreach循环内
1.2) sys_Log的TableName字段的值必须是当前表的表名。


贴图图片-data_log_数据日志06



2, 修改sp_sys_SearchLog存储过程,改LEFT JOIN


贴图图片-data_log_数据日志07



数据日志配置表(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



sys_Log:数据日志主表。
sys_LogDtl:数据日志明细表。

主、丛表关联字段:GUID32


C/S框架网|原创精神.创造价值.打造精品

扫一扫加微信
C/S框架网作者微信 C/S框架网|原创作品.质量保障.竭诚为您服务


上一篇 下一篇