业务单据窗体开发步骤|开发教程
作者:csframework|C/S框架网  发布日期:2022/01/04 18:23:15

业务单据窗体开发步骤|开发教程

业务单据窗体开发步骤|开发教程

业务单据窗体开发比较反正,建议使用代码生成器工具生成窗体原型,然后二次修改。

业务单据窗体开发步骤|开发教程

以【销售订单】窗体举例说明,窗体名称:frmSO,以下是业务单据窗体开发步骤。

1.1.1 新建业务窗体

业务单据窗体开发步骤|开发教程

在【销售模块】新建【frmSO】窗体。

业务单据窗体开发步骤|开发教程

在【销售模块】点右键,【添加】à【新建项】à打开【新建项对话框】。

业务单据窗体开发步骤|开发教程

业务单据窗体开发步骤|开发教程

【添加新项】对话框

业务单据窗体开发步骤|开发教程

在【名称】输入框输入【frmSO】,点【添加】按钮弹出【继承选择器】窗体。

业务单据窗体开发步骤|开发教程

业务单据窗体开发步骤|开发教程

如找不到frmBaseBusinessForm基类窗体,请点击【浏览】按钮,在debug目录内选择CSFrameworkV5.Library.dll文件,点【确定】加载类库。

业务单据窗体开发步骤|开发教程

选择【frmBaseBusinessForm】组件名称,点【确定】按钮。

1.1.2 界面布局设计

业务单据窗体开发步骤|开发教程

业务单据窗体开发步骤|开发教程

业务单据窗体开发步骤|开发教程

【数据查询页】:用于展示查询结果的数据,表格只读,不可修改。

业务单据窗体开发步骤|开发教程

【数据编辑页】:用于展示详细资料,用户在【数据编辑页】可以修改数据。

业务单据窗体开发步骤|开发教程

1.1.3 数据查询页设计

业务单据窗体开发步骤|开发教程

设计查询条件;

业务单据窗体开发步骤|开发教程

从工具箱拖放PanelControl

业务单据窗体开发步骤|开发教程

组件,Dock设为Top,在PanelControl内拖放一组查询条件输入框及查询按钮;

业务单据窗体开发步骤|开发教程

1.1.4 设计主表表格

业务单据窗体开发步骤|开发教程

从工具箱拖放PanelControl

业务单据窗体开发步骤|开发教程

组件,Dock设为Client;

业务单据窗体开发步骤|开发教程

在PanelControl内拖放一个GridControl组件,然后改名,如下图:

业务单据窗体开发步骤|开发教程

业务单据窗体开发步骤|开发教程

业务单据窗体开发步骤|开发教程

GridControl可以从其它窗体复制过来,节省开发时间。

业务单据窗体开发步骤|开发教程

在GridView(gvSummary)内定义表格的列。

业务单据窗体开发步骤|开发教程

业务单据窗体开发步骤|开发教程

业务单据窗体开发步骤|开发教程

表格的列设计页面

业务单据窗体开发步骤|开发教程

新增一个列

业务单据窗体开发步骤|开发教程

列的属性设置。主要修改(Name),Caption,FieldName三个属性。

属性名称

说明

(Name)

列名称(列名)。建议用col+字段名命名,如:colCustomerCode

Caption

列的标题。如:客户编号

FieldName

列对应的字段名,用于绑定数据。如字段名:CustomerCode

业务单据窗体开发步骤|开发教程

关闭设计器,表格内定义了以下列:

业务单据窗体开发步骤|开发教程

1.1.5 数据编辑页面设计(主/从表输入区域)

一般情况下业务单据只有一个明细表,设计效果如下:

业务单据窗体开发步骤|开发教程

有的业务单据比较复杂,【收回委托加工单】有3个明细表,其中两个明细表用TabPage整合到一起,参考设计:

业务单据窗体开发步骤|开发教程

1.1.6 主表输入组件设计

输入框(文本框)必须以txt+字段名命名,如:SONO 销售订单编号的文本框命名为txtSONO, CheckBox用缩写chk,如:chkFlagAPP审核。

业务单据窗体开发步骤|开发教程

1.1.7 使用代码生成器工具生成ORM、BLL、DAL代码

代码生成器可生成Model、DAL和BLL层的代码,业务单据窗体开放比较复杂,除框架实现的功能以外还需要扩展少量方法,如:【销售单据】扩展的方法有CheckNoExists,GetSummaryByParam,GetReportData等方法。

跟据业务需求进行二次开发,或者修改代码生成器生成模板代码,增强功能,提高效率。

视频下载:http://www.csframework.com/cs-code-generator.htm

业务单据窗体开发步骤|开发教程

1.1.8 BLL继承关系图

业务单据窗体开发步骤|开发教程

业务单据窗体开发步骤|开发教程

bllBase是所有业务层的基类,bllBaseBusiness是【业务单据】的业务逻辑层基类,所有【业务单据】的业务逻辑层从bllBaseBusiness派生,如bllPO,bllSO。

1.1.9 bllBaseBusiness类

bllBaseBusiness类是业务单据的业务逻辑层基类,实现了业务单据所需的公共方法。该类中定义的虚方法便于派生类重写。

业务单据窗体开发步骤|开发教程

bllBaseBusiness类说明:

ID

名称

类型

说明

1

AllowWriteLog

业务单据窗体开发步骤|开发教程

标记允许写入修改日志。

2

ApprovalBusiness

业务单据窗体开发步骤|开发教程

审核功能的方法。

3

BusinessTables

业务单据窗体开发步骤|开发教程

对应当前业务单据的数据. DataTableCollection类型,第1个表(Index为0)为主表,其它为明细表。

4

ClearAppInfo

清空审核功能相关字段的数据。

5

CreateSaveData

创建用于保存的临时数据。

6

CurrentBusiness

业务单据窗体开发步骤|开发教程

当前业务单据的数据。

7

DataBinder

业务单据窗体开发步骤|开发教程

对应当前单据的主表数据(DataTable),

该表只有一条记录,用于绑定[数据修改页面]输入组件的数据源。

8

DataBindRow

业务单据窗体开发步骤|开发教程

DataRow类型,对应DataBinder的第一条记录。

9

Delete

删除单据。

10

DoCreateTempData

创建用于保存的临时数据。该方法由CreateSaveData方法调用。

11

GetAttachedFiles

获取单据附件数据。

12

GetDataByKey

下载指定单号的业务数据。

13

IsApproved

检查业务单据是否审核。

14

IsOwnerChange

比较当前登录用户与制单人是否一致。

15

KeyFieldName

业务单据窗体开发步骤|开发教程

业务单据的主键字段名。

16

SummaryTableName

业务单据窗体开发步骤|开发教程

业务单据的主表名称。

17

NewBusiness

新增业务数据。

18

NotifyUser

当单据被修改发送手机短信或Email给制单人。

19

Save

保存业务数据。

20

SaveAttachedFile

保存附件。

21

Update

保存数据,虚方法,具体类必须重写。

22

UpdateCommonFieldsValue

更新业务单据明细表的公共字段数据。

23

WriteLog

保存修改日志。

24

CreateAttachFileBridge

创建业务单据附件管理的数据层桥接实例。

1.1.10bllSO类

ID

名称

类型

说明

1

ApprovalBusiness

重载的方法,用于审核单据。

2

CheckNoExists

检查单据号码是否存在。

3

CreateSaveData

重载的方法,创建用于保存的临时数据。

4

Delete

重载的方法,删除单据。

5

FuzzySearch

产品资料模糊查询。实现IfuzzySearchSupportable接口,

在frmFuzzySearch窗体中使用。

6

FuzzySearchName

业务单据窗体开发步骤|开发教程

模糊查询功能的名称,如:产品资料查询。在frmFuzzySearch窗体的标题显示。

7

QueryReportData

获取报表数据。

8

GetDataByKey

重载的方法,下载指定单号的业务数据。

9

GetSummaryByParam

查询销售订单的主表数据,查询结果在主表格中显示。

10

NewBusiness

重载的方法,新增业务数据。

11

Update

重载的方法,保存数据。

类成员截图:

业务单据窗体开发步骤|开发教程

1.1.11 DAL继承关系图

业务单据窗体开发步骤|开发教程

业务单据窗体开发步骤|开发教程

上图所示,dalBase是数据访问层的基类,dalBaseBusiness是【业务单据】数据层的基类,业务单据的DAL从dalBaseBusiness类继承,如dalPO,dalSO。

1.1.12 dalBaseBusiness类

ID

名称

类型

说明

1

_ReplaceString

业务单据窗体开发步骤|开发教程

提交数据前去左右空格、全角转半角,若设置此值会有性能损失!

2

_SummaryKeyName

业务单据窗体开发步骤|开发教程

主表主键字段名。

3

_SummaryTableName

业务单据窗体开发步骤|开发教程

主表表名。

4

_UpdateSummaryKeyMode

业务单据窗体开发步骤|开发教程

业务单据号码更新类型(自动生成流水号或GUID)。

5

ApprovalBusiness

单据审核/批准功能。。

6

CheckNoExists

检查业务数据是否存在。

7

CreateSqlGenerator

虚方法,根据表名获取该表的ORM及对应的SQL命令生成器。

8

GetNumber

获取单据流水号码。

9

Update

保存数据,对应BLL.Save方法

10

UpdateDetailKey

更新明细表的外键。

11

UpdateSummaryKey

更新主表主键。

业务单据窗体开发步骤|开发教程

类成员截图:

业务单据窗体开发步骤|开发教程

1.1.13 dalSO类

ID

名称

类型

说明

1

CreateSqlGenerator

重载的方法,根据表名获取该表的ORM及对应的SQL命令生成器。

2

Delete

删除单据,开发框架的模板窗体仅删除明细表,将主表数字类型的字段清零,如金额,数量等关键字段,保留主表的记录避免断号。

3

GetDataByKey

获取一张业务单据的数据。

4

GetNumber

获取单据流水号码, 首先在sys_DocSN表设置单据的超始号。

5

QueryReportData

根据查询条件获取报表数据。

业务单据窗体开发步骤|开发教程

类成员截图:

业务单据窗体开发步骤|开发教程

1.1.14 编写窗体的代码

完成界面布局设计,使用【代码生成器】工具生成ORM,BLL,DAL层的代码,针对需求调整代码二次开发。开发框架提供两种数据窗体模板,为了提高开放效率,可以复制frmSO或frmPO窗体中相关代码。

窗体与业务逻辑层的引用关系:

业务单据窗体开发步骤|开发教程

作为标准三层开发框架,用户界面与业务逻辑代码相互分离,业务逻辑相关数据处理的代码建议封装到业务层,这样减少用户界面的代码量,降低界面与业务层代码藕合程度。

1.1.14.1 初始化业务窗体(重写InitializeForm方法)

InitializeForm方法是frmBaseDataForm窗体中定义的虚方法,派生窗体必须在Form.Load事件中调用。

业务单据窗体开发步骤|开发教程

InitializeForm方法主要功能:

1)实例化业务层_BLL变量。

2)调用公共方法设置表格样式。

3)绑定主表表格及明细表表格的事件。

4)绑定数据参照组件(LookupEdit)的数据源。

5)加载一个空的业务对象,用于测试网络环境及初始化数据。

业务单据窗体开发步骤|开发教程

请参考frmSO. InitializeForm方法

1.1.14.2 Form.Load事件调用InitializeForm方法

 private void frmSO_Load(object sender, EventArgs e)
        {
            this.InitializeForm(); //初始化主窗体                      
        }

1.1.14.3 实现查询功能

实现查询功能的目的是显示主表的数据,参考frmPO.cs的btnQuery_Click时间,调用BLL层的Query方法,该方法的参数跟据查询条件定义逐个对应,常用的查询条件有【单据号码】,【日期范围】等。

业务单据窗体开发步骤|开发教程

流程如下:

业务单据窗体开发步骤|开发教程

业务单据窗体开发步骤|开发教程

请参考frmPO. btnQuery_Click事件以及BLL,DAL层的实现思路。

1.1.14.4 绑定主表输入组件数据源(DoBindingSummaryEditor方法)

在【数据编辑】页面,主表的资料用文本框展示,重写DoBindingSummaryEditor方法自动绑定文本框的数据源。

业务单据窗体开发步骤|开发教程

请参考frmPO. DoBindingSummaryEditor方法

1.1.14.5绑定明细表格的数据源(DoBindingDetailGrid方法)

重写DoBindingDetailGrid方法绑定销售订单明细表的数据源。

该方法是frmBaseBusinessForm窗体中定义的虚方法。

业务单据窗体开发步骤|开发教程

请参考frmPO. DoBindingDetailGrid方法

1.1.14.6 增加(DoAdd方法)

【销售订单】不需要实现DoAdd方法,在frmBaseBusinessForm窗体该方法调用业务层的虚方法,在派生类bllSO中重写相关方法就行。

业务单据窗体开发步骤|开发教程

【销售订单】的新增功能处理流程:

1)调用业务层的GetDataByKey方法,下载一个空的业务单据DataSet。

2)调用业务层的NewBusiness方法,新增一条记录并初始化数据,如【单据日期】,

【制单人】等预设值。

3)绑定主表,明细表的数据源。

4)将状态改为UpdateType.Add。

5)显示详细资料页面。

业务单据窗体开发步骤|开发教程

请参考frmBaseBusinessForm. DoBindingDetailGrid方法及bllSO.GetDataByKey, NewBusiness

1.1.14.7 删除(DoDelete方法)

【销售订单】不需要实现DoDelete方法,在frmBaseBusinessForm窗体中该方法调用业务层的Delete虚方法,在派生类bllSO中重写Delete方法就行。

业务单据窗体开发步骤|开发教程

【销售订单】删除功能处理流程:

1)调用BLL的IsApproved方法检查单据是否已经审核,已审核的单据禁止删除。

2)调用BLL的Delete方法删除【销售订单】的数据。

3)如后台数据删除成功,要同步删除表格中缓存的记录。

业务单据窗体开发步骤|开发教程

请参考frmBaseBusinessForm. DoDelete方法及bllSO.IsApproved,Delete

1.1.14.8 修改(DoEdit方法)

【销售订单】不需要实现DoEdit方法,在frmBaseBusinessForm窗体中已经完成该方法的所有功能,调用BLL.GetDataByKey方法获取数据。

业务单据窗体开发步骤|开发教程

【销售订单】的修改功能处理流程:

1)调用BLL的IsOwnerChange方法检查制单人,不能修改他人创建的单据。

2)调用BLL的IsApproved方法检查单据是否已经审核,已审核的单据禁止修改。

3)调用DoViewContent方法显示当前单据的详细资料。

4)将状态改为UpdateType.Modify。

5)显示详细资料页面。

业务单据窗体开发步骤|开发教程

请参考frmBaseBusinessForm. DoEdit方法及bllSO.IsApproved, IsOwnerChange

1.1.14.9 查看(DoViewContent方法)

【销售订单】不需要实现DoViewContent方法,在frmBaseBusinessForm窗体中该方法调用业务层的GetDataByKey虚方法,在派生类bllSO重写GetDataByKey方法就行。

业务单据窗体开发步骤|开发教程

【销售订单】的查看功能处理流程:

1)调用业务层的GetDataByKey方法下载业务单据的数,返回DataSet。

2)绑定主表及明细表的数据源。

3)将状态改为UpdateType.None。

4)显示详细资料页面。

业务单据窗体开发步骤|开发教程

请参考frmBaseBusinessForm. DoViewContent方法

及bllSO. GetDataByKey

1.1.14.10 取消(DoCancel方法)

【销售订单】不需要实现DoCancel方法,在frmBaseBusinessForm窗体中已实现具体功能。

业务单据窗体开发步骤|开发教程

【销售订单】的取消功能处理流程:

1)调用DoViewContent方法重新显示当前单据。

2)将状态改为UpdateType.None。

业务单据窗体开发步骤|开发教程

请参考frmBaseBusinessForm. DoCancel方法

1.1.14.11 打印(DoPrint方法)

打开打印预览窗体。

业务单据窗体开发步骤|开发教程

请参考frmSO. DoPrint方法

1.1.14.12 审核(DoApproval方法)

【销售订单】不需要实现DoApproval方法,在frmBaseBusinessForm窗体中该方法调用业务层的虚方法,在业务层bllSO重写ApprovalBusiness方法就行。

业务单据窗体开发步骤|开发教程

【销售订单】的审核功能处理流程:

a)调用BLL的IsApproved方法检查单据是否已经审核,已审核的单据不能重复审核。

b)调用BLL的ApprovalBusiness方法审核单据。

业务单据窗体开发步骤|开发教程

请参考frmBaseBusinessForm. DoApproval方法及bllSO. ApprovalBusiness

1.1.14.13 保存(DoSave方法)

业务单据窗体开发步骤|开发教程

【销售订单】保存功能流程:

1)更新最后获得焦点输入框的数据及主表的汇总金额。

2)检查主从表的数据合法性。

3)保存本次修改日志记录。

4)数据采集:创建用于保存的临时数据。bllBaseBusiness类的_CurrentBusiness变量存储当前正在处理的业务数据,在保存前要做特殊处理,如设置【最后修改人】、【修改日期】或其他关联数据,为了不影响原始数据,复制一个副本用于保存,若保存失败也不影响当前正在处理的业务数据。

5)调用BLL.Save方法。

6)如保存成功,前台相关处理。

7)将状态改为UpdateType.None。

业务单据窗体开发步骤|开发教程

请参考frmSO. DoSave方法及bllSO. Save

1.1.14.14 主表数据合法性检查(ValidatingSummaryData方法)

业务单据窗体开发步骤|开发教程

请参考frmSO. ValidatingSummaryData方法

1.1.14.15 明细表数据合法性检查(ValidatingDetailData方法)

业务单据窗体开发步骤|开发教程

请参考frmSO. ValidatingDetailData方法

1.1.14.16 显示修改历史记录(DoShowModifyHistory方法)

打开frmModifyLog窗体显示修改历史记录。

业务单据窗体开发步骤|开发教程

请参考frmSO. DoShowModifyHistory方法

1.1.14.17 其它细节处理

ID

名称

类型

说明

1

ButtonAuthorized

frmBaseChild窗体中定义的虚方法。派生类通过重写该方法可以检查按钮的权限并隐藏工具栏的按钮。

2

ButtonStateChanged

frmBaseDataForm窗体中定义的虚方法。当按钮状态发生变化时调用,可以重写此事件禁用某些输入组件。

3

CreateOneDetail

创建一条明细记录,适用于有明细表的业务窗体。此方法由

OnEmbeddedNavigatorButtonClick事件调用。

明细表格的导航按钮新增了三个自定义按钮,如下图:

业务单据窗体开发步骤|开发教程

分别是新增,插入,删除。在InitializeForm方法中调用

DevStyle.SetGridControlLayout(gcDetail, true)方法创建3个按钮,但必须将第2个参数allowEdittrue

CreateOneDetail方法的buttonIndex参数对应按钮的序号,分别为0:Add,1:Insert,2:Delete,在枚举类型DetailButtons中定义。

插入记录功能需要定义Queue字段,带符号的数字类型,用于排序。

4

OnCellValueChanged

明细表格的OnCellValueChanged事件,当用户修改明细表单元格的数据时触发该事件。可以在此事件内计算总金额(金额=单价*数量)

5

OnStockCode_ButtonClick

明细表的货品列支持选择功能,将列设置为ButtonEdit类型。

业务单据窗体开发步骤|开发教程

运行效果图如下:

业务单据窗体开发步骤|开发教程

ButtonEdit的按钮触发OnStockCode_ButtonClick事件。

InitializeForm方法中绑定OnStockCode_ButtonClick事件。

6

OnStockCode_Validating

用户可以选择或输入货品编码,当用户输入货品编码后离开当前单元格时触发OnStockCode_Validating事件。

业务单据窗体开发步骤|开发教程

InitializeForm方法中绑定OnStockCode_Validating事件。

7

SearchStockCallBack

跟据货品编号获取货品详细资料,该方法由

OnStockCode_ButtonClickOnStockCode_Validating事件调用。

8

SetDetailEditorsAccessable

frmBaseDataForm窗体中定义的虚方法,用于控制明细页面上的控件可被编辑,同时禁用或启用明细表三个自定义按钮。

9

UpdateDetailAmount

自动计算明细表的金额合计,在OnCellValueChanged事件中调用。

10

UpdateTotalAmount

自动计算主表的总金额。

主表的总金额=SUM(明细表的金额)

通常在保存前会重新计算主表的总金额。

1.1.15 相关文章及视频参考

业务单据窗体开发步骤|开发教程

视频下载:http://www.csframework.com/cs-code-generator.htm

1.1.16 几个标准模板窗体参考

业务单据窗体开发步骤|开发教程

开发框架内提供了几个标准数据模板窗体:

1)【数据字典】窗体请参考《客户管理》和《产品管理》

2)【业务单据】窗体请参考【采购模块】的《采购订单》及【销售模块】的《销售订单》

C/S结构快速开发框架/软件快速开发平台CSFrameworkV5.1旗舰版原创软件@csframework.com

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



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