系列回顾
WinForm篇前面我用了两篇文章实例演示了一个基于AgileEAS.NET实现一个简单的增加、删除、修改、查询与打印的典型的简单应用案例,这应该是一个典型的MIS系统的应用场景。
在前一篇文章一步一步教你使用AgileEAS.NET基础类库进行应用开发-WinForm应用篇-在UI中应用DataUIMapper组件完成了商品字典编辑界面中的代改造,由原来的显示与写回代码改成DataUIMapper组件的DataObject<==>UI控件的映射方式。
结合前面的两篇文章,示例中的第一个模块“产品字典”可以说是告一段落了,接下来的工作,我们将开始第二个模快“商品入库”的开发。
本文内容
“商品入库”模块将是一个典型的业务处理模块,在产品入库的过程中,我们要求“一张入库单可以包含1-N个入库记录,并且在同一入库单中不得存在两条同品种的商品记录”,在本模块中,我们将会涉及到入库业务的票价打印、事务处理、业务层编码、缓存查询等一些技术专注点。
下面我就以视频的方式展现一下我们要达到的目标(截取案例的运行结果)【第一次弄这玩意,效果比较差,大家理解一下】:
关于表的ID列和入库单据号
在这个简单的应用案例中,一共定义了三个表,产品字典db.PRODUCT,产品库存表dbo.PSTORE,产品入库记录表dbo.PIN,在三个表中都定义了一个与业务无关的列ID,产品表的主键为商品编码[Code],产品入库表的主键为单据号+商品编码[BillCode+Code],库存表为商品编码+价格[Code+Price]。所有表中的ID字段的取值参考DotNET企业架构应用实践-数据库表记录的唯一性设计的设计兼议主键设定原则一文,入库单位号由日期(yyyyMMdd)+6位最大序列号组成,所有最大号当前值记录由一个单独表存放,AgileEAS.NET平台中存储在表eas.IDENTITYVALUES中,在本示例中存储在表dbo.IDENTITYVALUES,取值和更新由过程dbo.GetIdentityValue/dbo.GetIdentityValue完成,在程序中采用以下方式读取最大号:
2 /// 取记录号。
3 /// </summary>
4 /// <returns></returns>
5 public int GetMaxNewIdn()
6 {
7 ParameterCollection pc = new ParameterCollection();
8 pc.Add("ITEMKEY", this.DbTableName);
9 return (int)this.DataAccessor.Query("exec dbo.GetIdentityValue @itemkey=?", pc);
10 }
11
12 /// <summary>
13 /// 取单据号。
14 /// </summary>
15 /// <returns></returns>
16 public string GetMaxBillCode()
17 {
18 ParameterCollection pc = new ParameterCollection();
19 pc.Add("ITEMKEY", "ProductInBillCode");
20 int code = (int)this.DataAccessor.Query("exec dbo.GetIdentityValue @itemkey=?", pc);
21 return DateTime.Now.ToString("yyyyMMdd") + code.ToString("D6");
22 }
注:本案例的Product.UI项目中增加了一个“唯一键值更新sql语句.sql”包含了本案例所需要上述的sql脚步,请自行更新到数据库。
实现商品入库
要实现产品入库,我们需要在Product.UI项目中增加两个新的窗体ProductInForm和SelectDictForm,其中ProductInForm为产品入库的业务运行界面,SelectDictForm为其附加界面,用于完成从产品字典中检索产品信息,我们分别来看一下这两个界面,ProductInForm:
ProductInForm为产品入库模块的主界面,操作员通过在产品编辑输入框输入产品编码的拼音简码,比如:青霉素(QMS)然后按回车键打开SelectDictForm窗体:
SelectDictForm会根据操作员输入产品拼音简码检索数据库并列出与之匹配的所有字典记录供操作员选择,操作选择一条记录按回车键或者空格键或者点击“选择”按钮跳转回ProductInForm,操作中输入产品价格及数量之后回车,系统会把刚才的输入结果暂存在界面下边的ListView控件中,一个单据可以输入多条产品入库记录,也可以选择入库列表记录通过delete键删除入库记录,最后通过“入库”按钮完成一次入库业务。
关于业务处理
对于本示例的商品入库处理,我提出了独立的业务对象处理其输入,在项目Product.BL中定义了ProductInBL业务层对象,代码请自己参考,关于业务分层请参考DotNET企业架构应用实践-实例架构设计中的业务分层-提取独立的业务层一文。
关于代码/下载
本文今天就到这儿,“商品入库”业务模块中的详细代码我就不在这贴了,太多,大家下载了完整代码之后自己看吧,在接下的文章中我将介绍缓存查询的应用。
有关本例所涉及的数据表结构请参考基于AgileEAS.NET平台基础类库进行应用开发-总体说明及数据定义一文,有关数据对象模型定义文件、文档、DDL脚本请下载:http://files.cnblogs.com/eastjade/demo.db.doc.sql.rar,本例完整代码下载:Product.Demo.rar。
最后,声明一句,不欢迎“巴克球”!我不想再说什么,别来凑热闹了。
链接
一步一步教你使用AgileEAS.NET基础类库进行应用开发-系列目录
QQ群:116773358
作者:魏琼东
出处:http://www.cnblogs.com/eastjade
关于作者:有13年的软件从业经历,专注于中小软件企业软件开发过程研究,通过在技术与管理帮助中小软件企业实现技术层面开源节流的目的。熟悉需求分析、企业架构、项目管理。现主要从事基于AgileEAS.NET平台的技术咨询工作,主要服务于医疗卫生、铁路、电信、物流、物联网、制造、零售等行业。如有问题或建议,请多多赐教!
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,可以通过mail.james@qq.com 联系我,也可以加入QQ群:113723486、199463175、116773358、116773358、212867943、147168308、59827496、193486983、15118502和大家共同讨论,非常感谢。
本文转自魏琼东博客园博客,原文链接:http://www.cnblogs.com/eastjade/archive/2010/10/19/1854389.html,如需转载请自行联系原作者