发明内容
本发明所要解决的技术问题是提供一种回收站的数据处理方法,用以减少系统开销、节约成本的基础上,简单、有效地提高应用系统中回收站功能的可维护性和可扩展性。
本发明的另一个目的是将上述构思应用于具体的应用环境中,提供一种回收站的数据处理装置,从而保证该方法的实现和应用。
为解决上述技术问题,本发明实施例提供了一种回收站的数据处理方法,包括:
生成业务功能模块的配置信息;
接收用户提交的数据删除请求,依据所述配置信息定位待删除数据;
判断所述待删除数据是否存在子级数据,若否,则针对所述待删除数据标记删除标识,并在回收站数据表中记录该数据的索引信息。
优选的,所述的方法,还包括:
构造配置文件,将所述配置信息注册至所述配置文件中。
优选的,所述配置信息包括:业务功能模块的数据表名及主键名、程序集名和类名;所述定位待删除数据的步骤包括:
依据用户提交的数据删除请求提取待删除数据的主键值和类对象;
通过所述程序集名和类名的反射,获得所述类对象所在程序集对应的数据表名及主键名;
依据所述主键名和主键值在所述数据表名对应的数据表中定位待删除数据。
优选的,所述数据的索引信息包括:数据表名、主键名和主键值。
优选的,所述的方法,还包括:
在回收站数据表中针对所述数据的索引信息添加自增字段。
优选的,所述配置信息还包括:业务类更新方法接口,所述的方法还包括:
通过所述业务类更新方法接口调用对应业务类的更新方法,完成业务功能模块的更新。
优选的,所述配置信息还包括:数据详细信息查看地址,所述的方法还包括:
依据用户提交的回收站数据查看请求,通过回收站数据表中记录的索引信息查找相应的目标查看数据;
提取所述目标查看数据的数据详细信息查看地址,显示所述目标查看数据详细信息的页面。
优选的,所述的方法,还包括:
若所述待删除数据存在子级数据,则向用户提示不可删除的信息。
优选的,所述的方法,还包括:
依据用户提交的回收站数据彻底删除的请求,通过回收站数据表中记录的索引信息找到目标删除数据;
判断所述目标删除数据是否存在子级数据,如果否,则在相应的数据表中删除该数据,并在回收站数据表中清除该数据的相关信息;如果是,则获取所述目标删除数据的子级数据,并在最下级数据具有删除标识的条件下,在相应级别数据所对应的数据表中,从最下级数据开始逐级向上删除所述目标删除数据及其子级数据,并在回收站数据表中清除所述目标删除数据及其子级数据的相关信息。
优选的,所述的方法,还包括:
依据用户提交的回收站数据还原的请求,通过回收站数据表中记录的索引信息找到目标还原数据;
判断所述目标还原数据是否存在父级数据,如果否,则在相应的数据表中去除该数据的删除标识,并在回收站数据表中清除该数据的相关信息;如果是,则获取所述目标还原数据的父级数据,并在相应级别数据所对应的数据表中,从最上级数据开始逐级向下去除所述目标还原数据及其父级数据的删除标识,并在回收站数据表中清除所述目标还原数据及其父级数据的相关信息。
本发明实施例还公开了一种回收站的数据处理装置,包括:
生成单元,用于生成业务功能模块的配置信息;
定位单元,用于接收用户提交的数据删除请求,依据所述配置信息定位待删除数据;
判断单元,用于判断所述待删除数据是否存在子级数据;
标记单元,用于在所述待删除数据没有子级数据时,针对所述待删除数据标记删除标识;
回收站记录单元,用于在回收站数据表中记录该数据的索引信息。
优选的,所述的装置,还包括:
配置文件构造单元,用于构造配置文件;
注册单元,用于将所述配置信息注册至所述配置文件中。
优选的,所述配置信息包括:业务功能模块的数据表名及主键名、程序集名和类名;所述定位单元包括:
提取子单元,用于依据用户提交的数据删除请求提取待删除数据的主键值和类对象;
反射子单元,用于通过所述程序集名和类名的反射,获得所述类对象所在程序集对应的数据表名及主键名;
查找子单元,用于依据所述主键名和主键值在所述数据表名对应的数据表中定位待删除数据。
优选的,所述的装置,还包括:
字段添加单元,用于在回收站数据表中针对所述数据的索引信息添加自增字段。
优选的,所述配置信息还包括:业务类更新方法接口,所述的装置还包括:
业务更新单元,用于通过所述业务类更新方法接口调用对应业务类的更新方法,完成业务功能模块的更新。
优选的,所述配置信息还包括:数据详细信息查看地址,所述的装置还包括:
索引查找单元,用于依据用户提交的回收站数据查看请求,通过回收站数据表中记录的索引信息查找相应的目标查看数据;
详细信息查看单元,用于提取所述目标查看数据的数据详细信息查看地址,显示所述目标查看数据详细信息的页面。
优选的,所述的装置,还包括:
错误提示单元,用于在所述待删除数据存在子级数据时,向用户提示不可删除的信息。
优选的,所述的装置,还包括:
索引查找单元,用于依据用户提交的回收站数据彻底删除的请求,通过回收站数据表中记录的索引信息找到目标删除数据;
子级判断单元,用于判断所述目标删除数据是否存在子级数据;
级联删除单元,用于在所述目标删除数据存在子级数据时,获取所述目标删除数据的子级数据,并在最下级数据具有删除标识的条件下,在相应级别数据所对应的数据表中,从最下级数据开始逐级向上删除所述目标删除数据及其子级数据,并在回收站数据表中清除所述目标删除数据及其子级数据的相关信息;
一级删除单元,用于在所述目标删除数据没有子级数据时,在相应的数据表中删除该数据,并在回收站数据表中清除该数据的相关信息。
优选的,所述的装置,还包括:
索引查找单元,用于依据用户提交的回收站数据还原的请求,通过回收站数据表中记录的索引信息找到目标还原数据;
父级判断单元,用于判断所述目标还原数据是否存在父级数据;
级联还原单元,用于在所述目标还原数据存在父级数据时,获取所述目标还原数据的父级数据,并在相应级别数据所对应的数据表中,从最上级数据开始逐级向下去除所述目标还原数据及其父级数据的删除标识,并在回收站数据表中清除所述目标还原数据及其父级数据的相关信息;
一级还原单元,用于在所述目标还原数据没有父级数据时,在相应的数据表中去除该数据的删除标识,并在回收站数据表中清除该数据的相关信息。
与现有技术相比,本发明具有以下优点:
当某个业务功能模块需要应用回收站功能时,通过生成业务功能模块的配置信息,利用元数据的反射特性,在运行时读取配置信息,便可动态地调用方法,实现回收站的功能。并且,当回收站功能需要维护的时候,只需修改相关配置信息即可,而不用改动每一项业务的代码。而当业务功能模块扩展时,也只需要注册该业务功能模块的配置信息即可完成扩展,避免了大量而繁琐的代码操作,有效节约了开发成本。本发明还特别适用于数据表中相关数据的级联操作。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
本发明可用于众多通用或专用的计算系统环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器系统、包括以上任何系统或设备的分布式计算环境等等。
本发明可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本发明,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
参考图1,示出了本发明的一种回收站的数据处理方法实施例的流程图,可以包括以下步骤:
步骤101、生成业务功能模块的配置信息;
步骤102、接收用户提交的数据删除请求,依据所述配置信息定位待删除数据;
步骤103、判断所述待删除数据是否存在子级数据,若是,则执行步骤104;若否,则执行步骤105;
步骤104、向用户提示不可删除的信息。
步骤105、针对所述待删除数据标记删除标识,并在回收站数据表中记录该数据的索引信息。
对于包含多个业务功能模块的应用系统而言,本实施例还可以包括步骤:构造配置文件,将所述配置信息注册至所述配置文件中。在这种情况下,当某个业务模块需要应用回收站的功能时,只需要在配置文件中针对该业务功能模块添加一条记录(即配置信息),用于注册该业务功能模块的相关信息即可。
在实际中,可以针对业务功能模块的数据表设置标识数据记录状态是否可用的标识字段,一旦数据被放入回收站中,则将该数据的标识字段设置为“不可用”。优选的,还可以在所述业务功能模块的数据表中标识数据记录的级别信息,例如,将产品类别信息标记为第一级别信息,将产品子类别信息标记为第二级别信息,将产品标识为第三级别信息。在这种情况下,当一个产品类别中还存在产品子类别时,该产品类别不可删除;在该产品子类别中还存在产品时,该产品子类别不可删除。也就是说,在本实施例中,按照数据逻辑关系,当还存在子级数据时,当前级别的数据不可删除,即可向用户提示不可删除的信息。如图2、图3所示的产品分类管理和产品管理表中,存在观赏鱼——彩色——别光锦鲤三级的分类信息,由于在“彩色”的级别下还有“别光锦鲤”,所以不能删除“彩色”这一级别的数据,也不能删除“观赏鱼”[这一级别的数据。只有当“别光锦鲤”这一最下级的数据删除后,才能删除其父级“彩色”的数据;只有在“彩色”和“别光锦鲤”这两个级别的数据删除后,才能删除最上级“观赏鱼”的数据。可以理解的是,在所述待删除数据存在子级数据时,向用户提示不可删除的信息仅仅是本发明一种应用方式的举例,本领域技术人员根据实际需要或经验,针对这种存在子级数据的处理采用任一种方法都是可行的,例如,弹出提示对话框,要求用户确定是否删除该待删除数据及其子级数据,若用户选择是,则直接删除所述待删除数据主目录下的所有数据等。
在实际中,所述配置信息可以包括业务功能模块的数据表名及主键名、程序集名和类名;在这种情况下,所述步骤102中定位待删除数据的方法可以包括以下子步骤:
子步骤A1、依据用户提交的数据删除请求提取待删除数据的主键值和类对象;
子步骤A2、通过所述程序集名和类名的反射,获得所述类对象所在程序集对应的数据表名及主键名;
子步骤A3、依据所述主键名和主键值在所述数据表名对应的数据表中定位待删除数据。
例如,一种业务功能模块所对应的数据表包括:
Goods产品数据表
字段 | 说明 |
ID | 自增字段 |
Goods_Name | 产品名称 |
Goods_TypeID | 产品分类 |
Goods_Price | 产品价格 |
DESC | 产品描述 |
CreateDate | 创建日期 |
ProID | 所属企业ID |
Goods_Type产品类别数据表
字段 | 说明 |
ID | 自增字段 |
TypeName | 类别名 |
ProID | 所属企业ID |
针对以上数据表,一种XML配置文件的示例可以参考如下代码:
<?xml version="1.0"encoding="utf-8"?>
<goods>
<add id="1"
className="ComManage.Software.BLL.Goods"
musterName="ComManage.Software.Component"
conKey="ComManageConString"
tableName="Goods"primaryKey="id"description="产品"
pathUrl="/Goods.aspx"delMerthod="true"updateMethod="true"/>
<add id="2"
className="ComManage.Software.BLL.GoodsType"
musterName="ComManage.Software.Component"
conKey="ComManageConString"
tableName="GoodsType"primaryKey="typeid"description="产品类别"
pathUrl="/GoodsType.aspx"delMerthod="false"
updateMethod="false">
<relation subid="1"
className="ComManage.Software.BLL.GoodsSubType"
musterName="ComManage.Software.Component"
conKey="ComManageConString"tableName="GoodssubType"
foreignkey="typeid"description="产品子类别"></relation>
</add>
</goods>
其中,节点goods为根节点,用于标识内容开始和结束;节点add用于标识每个元素即哪些业务表;ID用于表示唯一标识,以便于程序缓存不重复地查找;className表示应用程序具体类的名称,包括命名空间,通过这个属性可以找到程序类,即可以调用类中的方法;musterName表示指定类所在程序集的名称,即生成的DLL名称。由于反射机制中要求,除类名外,还要包括类所在的程序集名,否则无法通过反射机制调用类方法。ConKey表示指定数据库链接地址,由于某些业务所需的数据可能存放在不同的数据库中,该字段用于标识当前业务数据所在的数据库;tableName表示数据库中的表的名称;primaryKey表示指定数据表的主键名,通过主键名可以直接找到数据项;description表示描述字段;pathUrl表示对应业务功能的页面访问地址,用于在回收站中查看该业务功能的详细内容;delMerthod用于标记删除数据时是否删除关联数据内容,true为不删除关联数据内容,false为删除关联数据内容;updateMethod用于标记恢复数据时是否恢复关联数据内容,true为不恢复关联数据内容,false为恢复关联数据内容;子节点relation表示ADD的子节点,在关联删除或恢复数据时使用;subid用于标识子节点的唯一性,在子节点中不能重复;foreignkey表示指定数据表的主键名,通过主键名可以直接找到数据项。
反射是一种审查元数据并收集关于它的类型信息的能力。元数据(编译以后的最基本数据单元)可以理解为一大堆的表,当编译程序集或者模块时,编译器会创建类定义表、字段定义表和方法定义表等。System.reflection命名空间包含的几个类,允许反射(解析)这些元数据表的代码和反射相关的命名空间。程序集包含模块,而模块包含类型,类型又包含成员。反射提供了封装程序集、模块和类型的对象。利用通过检查收集到的信息动态地调用代码,创建已发现类型的新实例,或者可以轻松地动态重新结构化类型和对象。将类型绑定到现有对象,或从现有对象中获取类型。然后,可以调用类型的方法,或访问其字段和属性。以.NET的开发环境为例,可以使用System.Reflection命名空间。其中,System.Reflection.Assembly和System.Reflection.Module主要用于定位新代码并将其加载到运行时。要检查和操作已加载代码,典型模式主要是System.Type。从获得一个所关注运行时类别的System.Type实例开始(通过Object.GetType)。接着可以使用System.Type的各种方法,在System.Reflection中探索类型的定义并获得其它类的实例。
例如,如果对某特定方法感兴趣,并希望获得此方法的一个System.Reflection.MethodInfo实例(可以通过Type.GetMethod)。同样,如果对某字段感兴趣,并希望获得此字段的一个System.Reflection.FieldInfo实例(可以通过Type.GetField)。一旦获得所有必要的反射实例对象,即可根据需要遵循检查或操作的步骤继续。检查时,在反射类中使用各种描述性属性,获得需要的信息。操作时,可以动态地调用并执行方法,通过调用构造函数创建新对象,等等。反射类型的成员就是反射层次模型中最下面的一层数据。通过type对象的GetMembers方法就可以取得一个类型的成员。如果使用的是不带参数的GetMembers,它只返回该类型的公共定义的静态变量和实例成员,也可以通过使用带参数的GetMembers通过参数设置来返回指定的类型成员。
以下以一个通过反射动态生成程序集的具体实例来进一步说明这种反射机制:
//下面的程序将动态生成一个名为Math.dll的程序集,并动态加载其中的IntOp类,调用其Add方法。
using System;
using System.Reflection;
using System.Reflection.Emit;
public class Test
{
public static Assembly CreateAssembly()
{
//定义程序集对象名
AssemblyName assemblyName=new AssemblyName();
assemblyName.Name="Math";
//创建程序集
AssemblyBuilder createdAssembly=
AppDomain.CurrentDomain.DefineDynamicAssembly(assemblyName,
AssemblyBuilderAccess.RunAndSave);
//定义程序集模块
ModuleBuilder assemblyModule=
createdAssembly.DefineDynamicModule("MathMoudle","Math.dll");
//定义类型
TypeBuilder mathType=assemblyModule.DefineType("IntOp",
TypeAttributes.Public|TypeAttributes.Class);
//创建方法
System.Type[]paramTypes=new Type[]{typeof(int),typeof(int)};
MethodBuilderaddMethod=mathType.DefineMethod("Add",
MethodAttributes.Public,typeof(int),paramTypes);
//创建方法的参数
ParameterBuilderparam1=addMethod.DefineParameter(1,
ParameterAttributes.In,"num1");
ParameterBuilderparam2=addMethod.DefineParameter(2,
ParameterAttributes.In,"num2");
//生成方法的中间语言代码
ILGenerator ilGenerator=addMethod.GetILGenerator();
ilGenerator.Emit(OpCodes.Ldarg_1);
ilGenerator.Emit(OpCodes.Ldarg_2);
ilGenerator.Emit(OpCodes.Add);
ilGenerator.Emit(OpCodes.Ret);
//创建类型
mathType.CreateType();
//创建程序集
createdAssembly.Save("Math.dll");
return createdAssembly;
}
///<summary>
///动态调用程序集中的类的方法
///</summary>
///<param name="assembly">应用程序构造块</param>
///<param name="className">类名</param>
///<param name="methodName">方法名</param>
///<param name="args">参数组</param>
///<returns></returns>
static object CallAssembly(Assembly assembly,string className,
string methodName,object[]args)
{
//获取动态加载的类型
Type t=assembly.GetType(className);
//构造类型实例
object obj=Activator.CreateInstance(t);
//获取要调用的方法
MethodInfo mi=t.GetMethod(methodName);
//调用方法,返回结果
return mi.Invoke(obj,args);
}
static void Main()
{
//动态创建程序集
Assembly a=CreateAssembly();
//动态调用程序集中类型的方法
object[]args=new object[]{2,3};
int i=(int)CallAssembly(a,"IntOp","Add",args);
Console.WriteLine(i);
}
}
利用这种反射机制,通过设置在实体属性上的Attribute来进行验证。然后通过XML文件的属性获取重写的方法接口,找到该方法。这种方式减少了代码量,改动比较方便、灵活。在功能扩展性方面,通过获得类,即可调用类中的重载方法,即使有非常特殊的应用也可以采用这种结构,也就是说,只需要在特殊修改的地方重载实现调用方法,自己写方法来实现即可。
需要说明的是,上述定位待删除数据的方法仅仅用于举例,本领域技术人员根据实际情况采用任一种方法都是可行的,例如:
(1)通过类的继承关系。让该类型从一个编译时可知的基础类型派生出来,在运行时生成该类型的一个实例,将对其的引用放到其基础类型的一个变量中,然后调用该基础类型的虚方法。
(2)通过接口实现。在运行时,构建该类型的一个实例,将对其的引用放到其接口类型的一个变量中,然后调用该接口定义的虚方法。
(3)通过委托实现。让该类型实现一个方法,其名称和原型都与一个在编译时就已知的委托相符。在运行时先构造该类型的实例,然后在用该方法的对象及名称构造出该委托的实例,接着通过委托调用想要的方法。
优选的,在回收站中记录的数据索引信息可以包括数据表名、主键名和主键值。为了标识该信息在回收站中的唯一性,还可以在回收站数据表中针对所述数据的索引信息添加自增字段。本发明对所述添加自增字段的方法不作限制。
为根据业务功能模块中数据删除的操作执行相应业务功能的更新,优选的,所述配置信息还可以包括业务类更新方法接口,在这种情况下,本实施例还可以包括以下步骤:
通过所述业务类更新方法接口调用对应业务类的更新方法,完成业务功能模块的更新。
以下对应前述XML文件代码示例,举一个具体例子来说明本发明的回收站中数据添加操作的过程。
步骤S1、用户在某个业务功能模块中执行删除数据的操作,即发出数据删除的请求;
步骤S2、依据用户提交的数据删除请求提取该条待删除数据当前的主键值和类对象;
步骤S3、通过xml文件中记录的“pathUrl(数据库链接地址)”属性,连接当前业务功能模块的数据库;
步骤S4、利用反射机制,通过“musterName(程序集名)”属性、及“className(类名)”属性,找到类对象所在的程序集对应xml文件中的“tableName(数据表名)”及“primaryKey(主键名)”;
步骤S5、根据待删除数据当前的主键值,通过xml配置项“primaryKey(主键名)”,从“tableName(数据表名)”对应的数据表中查找到该条数据;
步骤S6、在“tableName(数据表名)”对应的数据表中,将当前待删数据的标识字段的状态改为“不可用”;
步骤S7、在回收站表中添加一条数据,记录待删数据的数据表名(tableName)、表的主键名(primaryKey)、主键值、创建时间、以及标识该数据在回收站表中唯一性的一个自增字段;
步骤S8、调用xml配置项中数据更新方法的接口,利用反射机制,通过“musterName(程序集名)”属性、及“className(类名)”,得到业务功能模块对应类中的相关方法,执行业务功能模块的更新。
在实际中,用户可能需要查看数据的详细信息,或者,需要预先经过数据详细信息的查看才能决定是否在回收站中进行数据彻底删除或还原操作,针对这种情况下,所述配置信息还可以包括数据详细信息查看地址,本发明实施例还可以包括以下步骤:
依据用户提交的回收站数据查看请求,通过回收站数据表中记录的索引信息查找相应的目标查看数据;
提取所述目标查看数据的数据详细信息查看地址,显示所述目标查看数据详细信息的页面。
如图4和图5所示,用户在图4所示的回收站页面中查看“名称”(主键名)为“别光锦鲤”(主键值)的详细信息时,显示图5所示的别光锦鲤详细信息的页面。
作为另一实施例,本发明还可以包括在回收站中进行数据彻底删除操作的方法,具体地,针对在回收站中进行数据彻底删除的操作,本发明还可以包括以下步骤:
依据用户提交的回收站数据彻底删除的请求,通过回收站数据表中记录的索引信息找到目标删除数据;
判断所述目标删除数据是否存在子级数据,如果否,则在相应的数据表中删除该数据,并在回收站数据表中清除该数据的相关信息;如果是,则获取所述目标删除数据的子级数据,并在最下级数据具有删除标识的条件下,在相应级别数据所对应的数据表中,从最下级数据开始逐级向上删除所述目标删除数据及其子级数据,并在回收站数据表中清除所述目标删除数据及其子级数据的相关信息。
可以看出,本实施例包括在回收站中进行一级删除和级联删除两种不同的操作方式。
在进行一级删除时,前述xml配置文件中“delMethod(是否删除关联数据)”的属性值为“true”,表示不删除关联数据。在这种情况下,通过“musterName(程序集名)”属性、及“className(类名)”,利用反射机制,执行方法类中的一级删除方法即可。具体而言,可以根据回收站数据表中记录的目标删除数据的数据表名、主键名和主键值,找到xml配置文件中对应的配置项“pathUrl(数据库链接地址)”、“tableName(表名)”、“primaryKey(表的主键名)”,利用反射机制直接调用操作类中的删除方法,将目标删除数据从业务功能模块中对应的数据表中删除,并同时在回收站数据表中删除该数据的相关信息。
例如,可以通过如下代码表示所述一级删除的方法:
Deletefrom[业务数据表]where[主键名]=‘[主键值]’
Deletefrom[回收站数据表]where[自增字段名]=‘[自增字段值]’
在进行级联删除时,前述xml配置文件中“delMethod(是否删除关联数据)”的属性值为“false”,表示删除关联数据。在这种情况下,通过“程序集名(musterName)”属性、及“类名(className)”,利用反射机制,执行方法类中的级联删除方法即可。
具体地,所述级联删除的过程可以包括以下步骤:
步骤B1、通过回收站数据表中记录的目标删除数据对应的数据表名、主键名和主键值,找到该条数据在数据库中的记录,以及在xml配置文件中对应节点的“pathUrl(数据库链接地址)”、“tableName(数据表名)”、“primaryKey(表的主键名)”、“musterName(程序集名)”和“className(类名)”;
步骤B2、获取xml配置文件中当前节点的子节点(relation),通过子节点(relation)中记录的“tableName(数据表名)”、“primaryKey(表的主键名)”,利用反射机制,获得musterName的程序集对应className的类中的级联删除方法;
子步骤B3、判断B1步骤中找到的该条数据在数据库中的记录是否为外键,如果为外键,则根据foreignKey(外键名)及记录的外键值,查询该外键所对应的主表中(即当前子节点的上一级节点add中记录的表)是否有数据,如果有,继续执行本步骤,以找到最下级数据;如果没有,则执行下一步;
子步骤B4、如果主表中没有数据,则根据foreignKey(外键名)查询从表(relation节点中的表名),查看当前数据的删除状态字段是否被标识为“不可用”;如果是,则执行步骤b23;如果否,则执行步骤B6;
子步骤B5、如果已被标识为“不可用”,则先删除foreignKey(外键名)所在的业务功能模块的数据表(relation记录的表名)中的该条记录;然后删除primaryKey(主键名)所在的业务表(relation在xml配置文件中对应父节点的表名)中的相应记录。
子步骤B6、如果没有被标识为“不可用”,由于本发明回收站数据表中的数据,在其对应的业务数据表中,数据状态的标识为“不可用”,则系统需要对进程抛出一个错误提示。
以下通过一个具体例子对本发明进行回收站中数据删除的方法进一步说明。
假设回收站的数据表中存在别光锦鲤→彩色→观赏鱼由下及上三个级别的数据,如果用户当前对“别光锦鲤”的数据提交删除请求,由于该数据位于最下级,不存在对应的子级数据,所以不需要进行级联删除,只需要通过一级删除的方法删除相应业务表中的数据以及回收站中的相关信息即可。
如果用户当前对“观赏鱼”的数据提交删除请求,由于“观赏鱼”下还包括“彩色”和“别光锦鲤”的子级数据,所以需要进行级联删除,具体操作为:
1)判断“观赏鱼”下是否还有子级的分类,经查询,找到“彩色”的子级分类;
在实际中,具体分类的级别可以根据业务需要进行相应改变,还可以设置一个字段用来标识该类别的级别信息。
2)继续判断“彩色”下是否还有子级的分类,经查询,没有子级分类;
3)提取“彩色”所在的主表“产品分类表”和从表“产品表”,根据“彩色”在主表中的主键值查询从表,找到最下级数据“别光锦鲤”;
4)判断“别光锦鲤”的数据状态,是否为“不可用”,如果为“不可用”,则将该数据从从表(产品表)中删除,同时在回收站数据表中,找到该数据的相关信息一并删除;
5)在主表(产品分类表)中,删除“彩色”的类别记录,同时在回收站数据表中,找到该数据的相关信息一并删除;
6)在主表(产品分类表)中,删除“观赏鱼”的类别记录,同时在回收站数据表中,找到该数据的相关信息一并删除。
需要说明的是,级联删除要从最低级别的数据开始删除。
作为另一实施例,本发明还可以包括在回收站中进行数据还原操作的方法,具体地,针对在回收站中进行数据还原的操作,本发明还可以包括以下步骤:
依据用户提交的回收站数据还原的请求,通过回收站数据表中记录的索引信息找到目标还原数据;
判断所述目标还原数据是否存在父级数据,如果否,则在相应的数据表中去除该数据的删除标识,并在回收站数据表中清除该数据的相关信息;如果是,则获取所述目标还原数据的父级数据,并在相应级别数据所对应的数据表中,从最上级数据开始逐级向下去除所述目标还原数据及其父级数据的删除标识,并在回收站数据表中清除所述目标还原数据及其父级数据的相关信息。
可以看出,本实施例包括在回收站中进行一级还原和级联还原两种不同的操作方式。
在进行一级还原时,前述xml配置文件中“updateMethod(是否恢复关联数据)”的属性值为“true”,表示不恢复关联数据。在这种情况下,通过“musterName(程序集名)”属性、及“className(类名)”,利用反射机制,执行方法类中的一级还原方法即可。具体而言,可以根据回收站数据表中记录的目标还原数据的数据表名、主键名和主键值,找到xml配置文件中对应的配置项“pathUrl(数据库链接地址)”、“tableName(表名)”、“primaryKey(表的主键名)”,利用反射机制直接调用操作类中的还原方法,将目标还原数据在业务功能模块中对应的数据表中的数据状态更改为“可用”,并同时在回收站数据表中删除该数据的相关信息。
例如,可以通过如下代码表示所述一级还原的方法:
Deletefrom[回收站数据表]where[自增字段名]=‘[自增字段值]’
Update[业务数据表]set‘不可用’=‘可用’where‘[主键名]’=‘[主键值]’
在进行级联还原时,前述xml配置文件中“updateMethod(是否还原关联数据)”的属性值为“false”,表示还原关联数据。在这种情况下,通过“程序集名(musterName)”属性、及“类名(className)”,利用反射机制,执行方法类中的级联还原方法即可。
具体地,所述级联还原的过程可以包括以下步骤:
步骤C1、通过回收站数据表中记录的目标还原数据对应的数据表名、主键名和主键值,找到该条数据在数据库中的记录,以及在xml配置文件中对应的节点的“pathUrl(数据库链接地址)”、“tableName(数据表名)”、“primaryKey(表的主键名)”、“musterName(程序集名)”和“className(类名)”;
步骤C2、判断当前节点是否为子节点(relation);如果不是子节点,则执行步骤C3和C4;如果是子节点,则执行步骤C5;
步骤C3、如果不是子节点,则根据节点中记录的数据表名(add记录的数据表名称)、主键名(primaryKey)、主键值,通过反射机制,找到musterName的程序集对应className的类中的级联还原的方法;
步骤C4、根据主键名(primaryKey)及主键值,查询该条数据记录在数据表(add记录的表名称)中的状态是否为“不可用”,如果为“不可用”,则根据主键名称(primaryKey)及主键值,将数据表(add记录的表名称)中的对应记录的数据状态改为“可用”,同时将该数据记录从回收站数据表中删除;
步骤C5、如果是子节点,记录该节点中的表名(relation节点中的表名称)、外键名(foreignKey)、外键值。在xml配置文件中,查询该节点上一级节点记录的表名(add记录的表名称)、主键名(primaryKey)、主键值。通过反射机制,找到程序集(musterName)对应的类(className),查询当前记录在业务表中,是否存在子级类别的记录;如果不存在子级类别,则执行步骤C6;如果存在子级类别,则执行步骤C7;
步骤C6、如果不存在子级类别,对步骤C5中记录的数据表中的相关数据,执行数据还原操作;
步骤C7、如果存在子级类别,根据主键名(primaryKey)及主键值,查询该主键表(add记录的表名称)中数据的所有子类别,然后对这些子类别进一步判断;
步骤C8、对步骤C5和C7的数据表中的相关数据执行数据还原操作。
以下通过一个具体例子对本发明进行回收站中数据还原的方法进一步说明。
假设回收站的数据表中存在别光锦鲤→彩色→观赏鱼由下及上三个级别的数据,如果用户当前对“观赏鱼”的数据提交还原请求,由于该数据位于最上级,不存在对应的父级数据,所以不需要进行级联还原,只需要通过一级还原的方法去除数据在相应业务表中的删除标识,以及删除回收站中的相关信息即可。
如果用户当前对“别光锦鲤”的数据提交还原请求,由于“别光锦鲤”上还包括“观赏鱼”和“彩色”的父级数据,所以需要进行级联还原,具体操作为:
1)判断“别光锦鲤”所在的数据表“产品表”,是否为从表,如果是,则查询该从表“产品表”,找到“别光锦鲤”的类别;
2)根据“别光锦鲤”的类别,查询“产品表”的主表“产品分类表”;
3)在“产品分类表”中,查询“产品表”中对应主键的数据记录,经查询,可找到“彩色”;
4)判断“彩色”是否为子类别,并获取其上一级类别。经查询,“观赏鱼”为“彩色”的父类别,“观赏鱼”为根类别。
5)在“产品分类表”中,将“观赏鱼”及“彩色”的数据状态更改为“可用”,即去除删除标识;并在回收站数据表中,将“观赏鱼”及“彩色”的相关数据删除;
6)在“产品表”中,将“别光锦鲤”的数据状态更改为“可用”;并在回收站数据表中,将“别光锦鲤”的相关数据删除。
所述还原操作的示意图可以参考图6和图7。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。此外,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
参考图8,示出了本发明一种回收站的数据处理装置实施例的结构框图,可以包括以下单元:
生成单元801,用于生成业务功能模块的配置信息;
定位单元802,用于接收用户提交的数据删除请求,依据所述配置信息定位待删除数据;
判断单元803,用于判断所述待删除数据是否存在子级数据;
标记单元804,用于在所述待删除数据没有子级数据时,针对所述待删除数据标记删除标识;
回收站记录单元805,用于在回收站数据表中记录该数据的索引信息。
优选的,在本实施例中,还可以包括:
错误提示单元806,用于在所述待删除数据存在子级数据时,向用户提示不可删除的信息。
优选的,在本实施例中,还可以包括:
配置文件构造单元,用于构造配置文件;
注册单元,用于将所述配置信息注册至所述配置文件中。
优选的,所述配置信息可以包括:业务功能模块的数据表名及主键名、程序集名和类名;在这种情况下,本实施例所述定位单元可以包括以下子单元:
提取子单元,用于依据用户提交的数据删除请求提取待删除数据的主键值和类对象;
反射子单元,用于通过所述程序集名和类名的反射,获得所述类对象所在程序集对应的数据表名及主键名;
查找子单元,用于依据所述主键名和主键值在所述数据表名对应的数据表中定位待删除数据。
优选的,在本实施例中,还可以包括:
字段添加单元,用于在回收站数据表中针对所述数据的索引信息添加自增字段。
优选的,所述数据的索引信息可以包括数据表名、主键名和主键值。
参考图9,示出了应用图8所示的优选实施例进行回收站数据处理的方法流程图,可以包括以下步骤:
步骤901、配置单元构造配置文件;
步骤902、生成单元生成业务功能模块的配置信息,注册单元将所述配置信息注册至所述配置文件中;
步骤903、定位单元接收用户提交的数据删除请求,依据所述配置信息定位待删除数据;
在实际中,所述配置信息可以包括:业务功能模块的数据表名及主键名、程序集名和类名;在这种情况下,本步骤可以包括以下子步骤:
子步骤D1、提取子单元依据用户提交的数据删除请求提取待删除数据的主键值和类对象;
子步骤D2、反射子单元通过所述程序集名和类名的反射,获得所述类对象所在程序集对应的数据表名及主键名;
子步骤D3、查找子单元依据所述主键名和主键值在所述数据表名对应的数据表中定位待删除数据。
步骤904、判断单元判断所述待删除数据是否存在子级数据,如果是,则执行步骤905;如果否,则执行步骤906;
步骤905、错误提示单元向用户提示不可删除的信息。
步骤906、标记单元针对所述待删除数据标记删除标识;并且,回收站记录单元在回收站数据表中记录该数据的索引信息,字段添加单元在回收站数据表中针对所述数据的索引信息添加自增字段。
作为另一实施例,为根据回收站数据的变化更新业务功能模块,所述配置信息还可以包括业务类更新方法接口,本发明还可以包括以下单元:
业务更新单元,用于通过所述业务类更新方法接口调用对应业务类的更新方法,完成业务功能模块的更新。
可以理解的是,基于图9的回收站数据,还可以包括以下步骤:
步骤907、业务更新单元通过所述业务类更新方法接口调用对应业务类的更新方法,完成业务功能模块的更新。
在实际中,用户往往需要在回收站中查看数据的详细信息,因此,作为另一实施例,所述配置信息还可以包括:数据详细信息查看地址,本发明还可以包括以下单元:
索引查找单元,用于依据用户提交的回收站数据查看请求,通过回收站数据表中记录的索引信息查找相应的目标查看数据;
详细信息查看单元,用于提取所述目标查看数据的数据详细信息查看地址,显示所述目标查看数据详细信息的页面。
可以理解的是,基于图9的回收站数据,还可以包括以下步骤:
步骤908a、索引查找单元依据用户提交的回收站数据查看请求,通过回收站数据表中记录的索引信息查找相应的目标查看数据;
步骤908b、详细信息查看单元提取所述目标查看数据的数据详细信息查看地址,显示所述目标查看数据详细信息的页面。
作为另一实施例,当用户在回收站中执行数据彻底删除操作时,本发明还可以包括以下单元:
索引查找单元,用于依据用户提交的回收站数据彻底删除的请求,通过回收站数据表中记录的索引信息找到目标删除数据;
子级判断单元,用于判断所述目标删除数据是否存在子级数据;
级联删除单元,用于在所述目标删除数据存在子级数据时,获取所述目标删除数据的子级数据,并在最下级数据具有删除标识的条件下,在相应级别数据所对应的数据表中,从最下级数据开始逐级向上删除所述目标删除数据及其子级数据,并在回收站数据表中清除所述目标删除数据及其子级数据的相关信息;
一级删除单元,用于在所述目标删除数据没有子级数据时,在相应的数据表中删除该数据,并在回收站数据表中清除该数据的相关信息。
可以理解的是,基于图9的回收站数据,还可以包括以下步骤:
步骤909a、索引查找单元依据用户提交的回收站数据彻底删除的请求,通过回收站数据表中记录的索引信息找到目标删除数据;
步骤909b、子级判断单元判断所述目标删除数据是否存在子级数据,如果是,则执行步骤909c;如果否,则执行步骤909d;
步骤909c、级联删除单元获取所述目标删除数据的子级数据,并在最下级数据具有删除标识的条件下,在相应级别数据所对应的数据表中,从最下级数据开始逐级向上删除所述目标删除数据及其子级数据,并在回收站数据表中清除所述目标删除数据及其子级数据的相关信息。
步骤909d、一级删除单元在相应的数据表中删除该数据,并在回收站数据表中清除该数据的相关信息。
作为另一实施例,当用户在回收站中执行数据还原操作时,本发明还可以包括以下单元:
索引查找单元,用于依据用户提交的回收站数据还原的请求,通过回收站数据表中记录的索引信息找到目标还原数据;
父级判断单元,用于判断所述目标还原数据是否存在父级数据;
级联还原单元,用于在所述目标还原数据存在父级数据时,获取所述目标还原数据的父级数据,并在相应级别数据所对应的数据表中,从最上级数据开始逐级向下去除所述目标还原数据及其父级数据的删除标识,并在回收站数据表中清除所述目标还原数据及其父级数据的相关信息;
一级还原单元,用于在所述目标还原数据没有父级数据时,在相应的数据表中去除该数据的删除标识,并在回收站数据表中清除该数据的相关信息。
可以理解的是,基于图9的回收站数据,还可以包括以下步骤:
步骤910a、索引查找单元依据用户提交的回收站数据还原的请求,通过回收站数据表中记录的索引信息找到目标还原数据;
步骤910b、父级判断单元判断所述目标还原数据是否存在父级数据;如果是,则执行步骤910c;如果否,则执行步骤910d;
步骤910c、级联还原单元获取所述目标还原数据的父级数据,并在相应级别数据所对应的数据表中,从最上级数据开始逐级向下去除所述目标还原数据及其父级数据的删除标识,并在回收站数据表中清除所述目标还原数据及其父级数据的相关信息;
步骤910d、一级还原单元在相应的数据表中去除该数据的删除标识,并在回收站数据表中清除该数据的相关信息。
在实际中,本发明数据处理装置及各个单元可由本领域技术人员根据实际需要任意设置于客户端或服务器端,本发明对此不需要进行限定。
对于装置实施例而言,由于其基本相应于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上对本发明所提供的一种回收站的数据处理方法及一种回收站的数据处理装置进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。