原创|其它|编辑:郝浩|2009-08-18 10:39:56.000|阅读 429 次
概述:我们在进行业务逻辑判断时,可能会弹出一些提示信息供用户选择,控件级别就是控制用户的选择,比如:这个业务规则我们只是提示一下用户,并不需要做什么强制性的操作。有的操作是允许用户选择、有的操作是强制提示并中断程序。
# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>
我们在进行业务逻辑判断时,可能会弹出一些提示信息供用户选择,控件级别就是控制用户的选择,比如:这个业务规则我们只是提示一下用户,并不需要做什么强制性的操作。有的操作是允许用户选择、有的操作是强制提示并中断程序。
删除操作,就是把数据删除,彻底的从数据库表中删除,以后想再次查询估计都很困难,因此要慎重,做好一切准备工作。在这里,我把删除分成两个部分描述。
第一部分讲解是否允许删除操作,包括对操作员权限的判断等,与修改操作的判断逻辑基本一致,各位看流程图就OK了。
第二部分讲解第一部分允许删除操作后,继续要处理的一系列步骤。删除操作支持批量删除,因此需要考虑的事情要做些。之所以分成两部分,是因为流程有些长,分开讲比较直观。
首先,系统初始检测,有些数据是系统一开始自带的,本身做为框架的一部分使用。这部分数据不允许删除!
其次,数据启用检测,一般的基础编码都有一个IsUsed(是否使用)字段,若数据被使用,则需要进行额外判断。
其次,数据引用检测,就是我们要删除的数据可能被其他某些模块所引用,一般常见于基础编码,我是在后台专门设计一张表,存储这些关系,而不是通过数据库的外键关联功能,这样我自己就可以管理。
其次,单据状态检测,一般的业务单据都有一个BillStatus(单据状态)字段,某些状态(如已完成)的单据,是不允许删除的。
其次,数据阻止删除检测,同数据阻止修改操作功能一致,略
经过以上一系列的检测,我们要判断一下最后真正允许删除的数据个数。提示给用户,有多少条允许删除,多少条不允许?每条原因是什么?此时,要提示下是否真的删除?毕竟这是一个不可逆操作。
数据删除的时候,采用的方法是sql语法提交的方式,我在后台专门建立一张表,用于存储每个模块对应后台的表和主键字段信息,用做删除sql语法拼接使用。这样,我只需要在前台获取主键字段值就可以了。
第一部分流程图
图-6
第二部分流程图
图-7
图-8
数据阻止删除操作
与数据阻止修改操作表结构一致,略。
栏目关联引用
字段名称 |
描述 |
流水号 |
主键字段,流水号 |
模块ID |
模块ID |
栏目名称 |
栏目字段名称 |
栏目类型 |
栏目字段的类型,如string或int等,映射为net数据类型比较好 |
引用模块ID |
就是哪个模块引用了此数据 |
引用DB表名称 |
需要根据这两个字段进行判断 |
引用DB字段名称 |
|
提示信息 |
若被引用,所提示的信息 |
控制级别 |
包括警告、提示、阻止等 |
备注 |
就是备注 |
模块删除语法
字段名称 |
描述 |
流水号 |
主键字段,流水号 |
模块ID |
模块ID |
DB表名称 |
模块数据窗口对应的表名称 |
DB字段名称 |
模块数据窗口中,相当于主键字段,就是能够识别唯一性的字段名称 |
DB字段类型 |
模块数据窗口中,相当于主键字段,就是能够识别唯一性的字段类型 |
字段值 |
模块数据窗口中,相当于主键字段,就是能够识别唯一性的字段值,相当于参数名称,使用时直接替换成真正的字段值 |
是否使用 |
确定是否使用,与权限无关 |
备注 |
就是备注 |
数据保存,终于说到重点了。管理类软件的重中之重的事情啊。所以要冷静、冷静再冷静!考虑、考虑再考虑。最终,可以肯定地说,我们还是没有想到用户想到的。在这里,我向我们的客户表示由衷的佩服!
好了,废话不多说。保存的逻辑我分成六个部分处理。
第一部分,处理数据的提交与准备。就是从UI层获取用户输入的数据
第二部分,处理数据的检测,包括对数据进行完整性,正确性、准确性的检测等
第三部分,处理功能业务逻辑的检测
第四部分,处理数据的同步,因为我们增加某个业务单据后,会有一些附加操作,比如同步生成XX单等。
第五部分,处理纯行业业务逻辑。
第六部分,处理数据的真正保存。
下面分别讲述,
第一部分,是从UI层获取数据,传递到业务层,UI层就是展示和录入数据的地方,其他什么事情都不要做。我们如何传递呢?我使用的方法是使用dataset或datatable,好处就不必说了。
第二部分,是数据的检测,这个相当重要。有如下几个步骤
l 数据完整性检测,检测栏目字段数据是否输入完备,哪些必输字段是否已输入数据等。与栏目字段必输设置相关联。
l 数据正确性检测,检测数据的字段值与其字段类型是否一致,例整型的字段只允许录入数字(可能大家会认为在界面层录入数据时检测,也可以,我在这里处理,是再次检测)。
l 数据准确性检测,这个是我自已在后台表中建立一张表,存放这些规则的。例:日期字段,要求不允许输入超过某一日期的值,如today。这条规则就可以通过此条设置,只是简单的设置。较为复杂还是要自己写逻辑
l 数据重复性检测,这里不光包括主键字段的唯一,还包括其他字段的检测,比如名称也要唯一。这个在后台也有张表存放这些规则。
第三部分,是属于功能业务逻辑了,我们要预留一个接口。
第四部分,就数据的同步,我设置了三个地方可以同步数据。
l 同一窗体内的主表和明细表或tab页表,数据需要同步。有后台表存储规则
l 不同窗体间采用sql的update语法进行数据同步。有后台表存储规则
l 不同窗体间采用存储过程或其他数据库对象进行数据同步。有后台表存储规则
第五部分,其实和第四部分有些类似,这里要处理的事情是第四部分不能处理的,主要是纯行业的业务逻辑
第六部分,就是数据真正的保存了,我采用的方法是sql的insert语法保存,即使是多个datatable,也解析成sql语句提交。事务不必说,肯定要用的。
栏目值准确性检测
字段名称 |
描述 |
流水号 |
主键字段,流水号 |
模块ID |
模块ID |
DW类型 |
栏目字段名称 |
栏目名称 |
栏目名称 |
关系 |
栏目值与栏目名称的关系 |
检测值上限 |
栏目值,上限。若只有一个值,则使用此字段 |
检测值下限 |
栏目值,下限 |
自定义函数 |
是否自定义函数 |
函数名称 |
函数名称 |
参数名称 |
函数的参数名称 |
备注 |
备注,就是备注 |
栏目重复性检测
字段名称 |
描述 |
流水号 |
主键字段,流水号 |
模块ID |
模块ID |
DW类型 |
栏目字段名称 |
组合字段 |
是否组合字段,有时候可能是多个字段一并组合 |
栏目名称 |
栏目名称 |
栏目类型 |
栏目名称的类型 |
Db表名称 |
重复性检测条件,Db表名称 |
Db字段名称 |
重复性检测条件,Db字段名称 |
Db字段类型 |
重复性检测条件,Db字段类型 |
是否使用 |
是否使用,与权限无关 |
备注 |
备注,就是备注 |
数据同步设置(InWin)
字段名称 |
描述 |
流水号 |
主键字段,流水号 |
模块ID |
模块ID |
DW类型 |
DW类型 |
编辑类型 |
编辑类型 |
栏目名称 |
栏目名称 |
目标DW类型 |
目标DW类型 |
目标栏目名称 |
目标栏目名称 |
目标栏目类型 |
目标栏目类型 |
是否计算字段 |
是否计算字段 |
备注 |
备注,就是备注 |
数据同步设置(DbCol)
字段名称 |
描述 |
流水号 |
主键字段,流水号 |
模块ID |
模块ID |
DW类型 |
DW类型 |
编辑类型 |
编辑类型 |
Db表名称 |
Db表名称 |
Db字段名称 |
Db字段名称 |
Db字段类型 |
Db字段类型 |
Db字段值 |
Db字段值,映射为前台的栏目名称 |
目标Db表名称 |
目标Db表名称 |
目标Db字段名称 |
目标Db字段名称 |
目标Db字段类型 |
目标Db字段类型 |
备注 |
备注,就是备注 |
数据同步设置(DbObj)
字段名称 |
描述 |
流水号 |
主键字段,流水号 |
模块ID |
模块ID |
DW类型 |
DW类型 |
编辑类型 |
编辑类型 |
Db对象名称 |
Db对象的名称 |
Db对象参数名称 |
Db对象的参数名称 |
Db对象参数类型 |
Db对象的参数名称的类型 |
备注 |
备注,就是备注 |
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com
文章转载自:博客园