CS开发框架 - 业务单据自动生成功能设计(原)
![]() ![]() 摘要: 企业数据库管理应用系统中很多业务功能是按流程运作的,彼此相通,相辅相成,有些业务单据的数据结构基本一致,基于这些共同点,理论上在实际应用中是可以使业务数据自动生成。
销售模块流程如下:
UML图: 接口设计 C# Code: /// <summary> /// 生成单据的选择项目. /// </summary> public interface IGenerateItem { /// <summary> ///项目标题 /// </summary> string ItemCaption { get; } /// <summary> ///目标窗体名称 /// </summary> string TargetFormName { get; } /// <summary> /// 打开目标窗体对应的菜单名. /// </summary> string TargetFormMenuName { get; } /// <summary> ///目标窗体类型 /// </summary> Type TargetFormType { get; } /// <summary> /// 标志是否生成成功 /// </summary> bool IsSuccess { get; } /// <summary> /// 由其它单生成本单时需要用户输入来源单号 /// </summary> bool IsDocNoRequired { get; } /// <summary> /// 检查来源单据的单号是否存在 /// </summary> /// <param name="DocNo">单据号码</param> /// <returns></returns> bool IsDocNoExists(string DocNo); /// <summary> /// 自动生成数据 /// </summary> /// <param name="targetBLL">目标单据的业务逻辑层</param> /// <returns></returns> bool Generate(IBusinessManage targetBLL); /// <summary> /// 设置来源单据的单号 /// </summary> /// <param name="DocNo">业务单据号码</param> void SetDocNo(string DocNo); } //来源:C/S框架网(www.csframework.com) QQ:1980854898 ![]() C# Code: /// <summary> /// 支持数据操作功能(增删改查)的窗体 /// </summary> public interface IDataOperatable { /// <summary> /// 是否修改了数据(未保存) /// </summary> bool DataChanged { get; } /// <summary> /// 新增 /// </summary> void DoAdd(); } ![]() C# Code: /// <summary> /// 支持业务单据操作的窗体 /// </summary> public interface IBusinessSupportableForm { /// <summary> /// 业务操作逻辑层 /// </summary> IBusinessManage BLL_BusinessManage { get; } } ![]() C# Code: /// <summary> /// 业务单据的底层接口 /// </summary> public interface IBusinessManage { /// <summary> /// 当前业务单据的数据. 第一张数据表为主表,其它为明细表。 /// </summary> DataTableCollection BusinessTables { get; } } ![]() C# Code: /// <summary> /// 生成单据项目定义基类 /// </summary> public class IGenerateItemBase : IGenerateItem { protected bool _IsDocNoRequired; protected string _DocNo; protected bool _IsSuccess = false; protected string _TargetFormName; protected Type _TargetFormType = null; protected string _ItemCaption; protected string _TargetFormMenuName; public IGenerateItemBase() { } public IGenerateItemBase(string DocNo, bool IsDocNoRequired, Type targetFormType, string targetFormName) { _DocNo = DocNo; _IsDocNoRequired = IsDocNoRequired; _TargetFormType = targetFormType; _TargetFormName = targetFormName; } public string TargetFormMenuName { get { return _TargetFormMenuName; } } public string ItemCaption { get { return _ItemCaption; } } public bool IsSuccess { get { return _IsSuccess; } } public Type TargetFormType { get { return _TargetFormType; } } public string TargetFormName { get { return _TargetFormName; } } public bool IsDocNoRequired { get { return _IsDocNoRequired; } } public void SetDocNo(string DocNo) { _DocNo = DocNo; } public virtual bool Generate(IBusinessManage targetBLL) { return false; } public virtual bool IsDocNoExists(string DocNo) { return false; } } //来源:C/S框架网(www.csframework.com) QQ:1980854898 frmBaseBusiness 业务单据基类窗体 实现IDataOperatable, IBusinessSupportableForm接口及定义业务逻辑接口IBusinessManage, 如下图: ![]() C# Code: /// <summary> /// 业务单据基类窗体 /// </summary> public partial class frmBaseBusiness : Form, IDataOperatable, IBusinessSupportableForm { /// <summary> /// 业务单据的底层接口 /// </summary> protected IBusinessManage _BLL_BusinessManage = null; public frmBaseBusiness() { InitializeComponent(); } private void btnGenerateBusiness_Click(object sender, EventArgs e) { this.DoGenerateBusiness();// 打开单据自动生成向导 } /// <summary> /// 打开单据自动生成向导 /// </summary> public virtual void DoGenerateBusiness() { // } #region IDataOperatable Members public bool DataChanged { get { return false; } } public virtual void DoAdd() { Msg.ShowInformation("新增状态。。。。"); } #endregion #region IBusinessSupportableForm Members public IBusinessManage BLL_BusinessManage { get { return _BLL_BusinessManage; } } #endregion } //来源:C/S框架网(www.csframework.com) QQ:1980854898 生成单据向导窗体仅依赖IGenerateItem接口,LoadItems方法动态加载多个项目定义(IGenerateItem),项目定义由具体的业务窗体指定。 ![]() ![]() ![]() ![]() 下面的代码是销售报价窗体(QO)生成项目定义: C# Code: public override void DoGenerateBusiness() { //由当前单据生成其它单据 string docNO = "QO-2010XX-001"; //便于演示,指定一个单号 //可以由QO生成两种单据 List<IGenerateItem> items = new List<IGenerateItem>(); items.Add(new QO2DO(docNO, docNO == string.Empty, typeof(frmDO), "发货单(Delivery Order)")); items.Add(new QO2SI(docNO, docNO == string.Empty, typeof(frmSI), "销售FA票(Sales Invoice)")); frmGenerateWizard.ExecuteWizard("来源单据:" this.Text, items); //调用生成单据向导 } 销售报价窗体(QO)打开自动向导 ![]() 选择由销售报价单(QO)->生成发货单(DO),生成数据成功并自动打开DO窗体。 ![]() ![]() 扫一扫加作者微信 ![]() ![]() Source Code for VIP:
参考文档:
基于C#.NET C/S快速开发框架 - 代码自动生成功能 CS开发框架Toolbar与数据字典,业务单据的关系 CS开发框架禁用主窗体Toolbar的按钮 CS开发框架高级版 标准版 精简版是共用框架核心部分 CS开发框架的客户端可以自动生成吗? CS开发框架自动缩放字体功能 CS开发框架3.0 ADO-Direct与WebService配置 CS开发框架核心模型 - 共享主窗体的工具栏(Toolbar) CS开发框架 新增加两个报表模块(报表模板) 你的开发框架能自动生成WebService层的接口吗? 开发框架新增单据自动生成功能 CS开发框架旗舰版主从从表(多级明细表)实例,自动生成主从表代码 开发技巧-Winform窗体自动生成下一个业务流程的单据|C/S框架网 CS开发框架修改主窗体XtraTabbedMdiManager组件的子窗体标签的字体大小 CS开发框架获取生成流水号码(单据号码)介绍
其它资料:
什么是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内容管理系统 | |