软件开发框架培训实时讲解总结|CSFrameworkV5.1旗舰版|培训大纲
作者:csframework|C/S框架网  发布日期:2022/01/17 20:15:00

软件开发框架培训实时讲解总结|CSFrameworkV5.1旗舰版|培训大纲

软件开发框架培训实时讲解总结-CSFrameworkV5.1旗舰版

客户:宁德时代

目录

扁平按钮,UI界面

Cursor=Hand

ButtonStyle=HotFlat

ImageOptions.Image=DevExpress图标

关于模块的主图标,必须是透明背景32bit,png/ico格式

开发环境配置 – VS开发环境对应的DevExpress版本

VS2015, 安装DevExpress 15.x

VS2017, 安装DevExpress 17.x

VS2019, 安装DevExpress 19.x

DevExpress组件历史版本

https://www.devexpress.com/Support/Versions.xml

开发框架子系统

ClientFoundation开发架构配置

附加2个数据库:

CSFrameworkV5_System(系统库)

CSFrameworkV5_Normal(账套库)

配置系统库的 tb_Dataset 表,核对 DBUser,DBPassword字段的内容,密码使用DemoTester.exe工具加密。

SqlConnector.exe 连接配置系统库

操作手册:https://www.cscode.net/archive/csframework-sqlconnector/1631288677.html

CodeGenerator.exe 代码生成器-连接配置

操作手册:https://www.cscode.net/archive/csframework-sqlconnector/1631288677.html

AutoUpgrader.exe 自动升级程序,配置连接

操作手册:https://www.cscode.net/archive/autoupgrader/1630589770.html

日志管理

操作日志:系统登陆日志,系统操作日志, Log.LogDB(), Log.LogLocal()。

数据日志: 需要配置写日志的列,配置重要列,比如:名称,数值类,用于记录旧值、新值、修改人,时间等信息。

功能入口:系统管理模块【日志配置】

明细表记录的排序算法

明细表要增加一个排序字段,如:Queue,类型:decimal(18,4)

插入记录的算法:(Current-Prior)/2+Current

查询排序:Order By Queue ASC

开发框架加解密算法

开发框架使用Rijdenal对称加密算法, 传统加密DES/AES:DES加密太简单,容易破解。

RSA加密256位,签名算法,特点:需要分发公钥+私钥,算法速度慢。

加解密工具的密码:key(8位)+iv(8位)偏移量。

vs改名工具 CSFramework.Rename

https://www.csframework.com/archive/1/arc-1-20201110-2927.htm

最新版本请联系作者。

集团数据权限控制

横向理论

  1. 支持GroupParent/GroupCode 两级(业务数据加2个字段),分别对应基地部门1和用户所在部门2。
  2. 加基地部门标识【勾选】。
  3. 根据当前用户获取所在部门,再获取部门链编号,如:a,b,c.
  4. 根据当前用户所在的部门,检索数据 GroupCode IN (a,b,c,)

纵向理论

  1. 数据权限配置,支持组织架构以及个人配置。
  2. 展示部门负责人(支持 2个负责人),图标与普通员工区分。
  3. 配置部门时,默认给下面的所有员工配置列。
  4. 勾选的列表示可见。
  5. 表结构从字段名称管理获取

SqlCommandGenerator - SQL命令生成器

生成SQL原理, SqlCommandGenerator,生成3种SQL脚本及DbCommand实例。

实现逻辑:通过.NET反射ORM类的属性,根据属性定义,动态生成三种sql脚本。

ORM模型/ Model 重点部分

主表配置主键

C# 全选
[ORM_TableAttribute("tb_PO", "PONO", true)]
    [ORM_ConcurrentAttribute("TS")] 并发控制
    public sealed class tb_PO
    {
        public static string __TableName = "tb_PO";

        public static string __KeyName = "PONO";

        [ORM_FieldAttribute(DbType.Int32, 4, false, false, false, false, false)]
        public static string ISID = "ISID";

        [ORM_FieldAttribute(DbType.DateTime2, 8, false, false, false, false, false)]
        public static string TS = "TS";
        
        [ORM_FieldAttribute(DbType.String, 20, false, true, true, false, true)]
        public static string PONO = "PONO";

明细表配置主键和外键

C# 全选
///<summary>
    /// ORM模型, 数据表:tb_POs,由ClassGenerator自动生成
    /// </summary>
    [ORM_TableAttribute("tb_POs", "ISID", false)]
    public sealed class tb_POs
    {
        public static string __TableName = "tb_POs";

        public static string __KeyName = "ISID";

        [ORM_FieldAttribute(DbType.Int32, 4, false, false, true, false, false)]
        public static string ISID = "ISID";

        [ORM_FieldAttribute(DbType.String, 20, false, true, false, true, false)]
        public static string PONO = "PONO";

代码生成器,配置明细表重点

明细表必须配置主键+外键。

主从子表,三层表,层级表

参考:库存模块的《生产工艺》。代码生成器仅支持生成1层明细,既:主、从表。

软件开发框架培训实时讲解总结|CSFrameworkV5.1旗舰版|培训大纲

提交多表时(DataSet)怎样数据采集?

什么是数据采集? 就是保存数据前将界面的数据组合到一个DataSet。

保存数据流程:UI数据采集 --> 调用BLL.Update(Dataset) --> DAL.Update(dataset) --> Database

提交数据重点:DAL.CreateSqlGenerator方法要对应ORM模型,根据表名对应,实现自动提交数据。

窗体、类命名规范(按功能名称排序)

比如:PO\SO

开发框架命名规范.pdf下载:

https://www.csframework.com/archive/1/arc-1-20130825-2063.htm

关于流水号码自动生成

  1. ORM模型的主键字段,设置 isDocFieldName =true;
  2. DAL层重写GetNumber方法。

每个DAL层必须重写CreateSqlGenerator方法

单张表的DAL层,比如客户资料、产品资料:

C# 全选
protected override IGenerateSqlCommand CreateSqlGenerator(DataTable table)
        {
            Type ORM = null;

            if (table.TableName == tb_Customer.__TableName) ORM = typeof(tb_Customer);

            if (ORM == null) throw new Exception(table.TableName + "表没有ORM模型!");

            return new GenerateSqlCmdByTableFields(ORM, table, this.GeneratorFactory);
        }

多张表的DAL层,采购订单、生产单:

C# 全选
/// <summary>
        /// DAL层:根据表名获取该表的SQL命令生成器,提交多张表
        /// </summary>
        /// <param name="tableName">表名</param>
        /// <returns></returns>
        protected override IGenerateSqlCommand CreateSqlGenerator(DataTable table)
        {
            Type ORM = null;
            if (table.TableName == DXD_PN.__TableName) ORM = typeof(DXD_PN);//主表ORM对应关系
            if (table.TableName == DXD_PNDtlA.__TableName) ORM = typeof(DXD_PNDtlA); //明细表ORM对应关系
            if (table.TableName == DXD_PNDtlB.__TableName) ORM = typeof(DXD_PNDtlB); //明细表ORM对应关系
            if (table.TableName == DXD_PNDtlSub1.__TableName) ORM = typeof(DXD_PNDtlSub1); //明细表ORM对应关系
            if (ORM == null) throw new Exception(table.TableName + "表没有ORM模型,请生成此表的Model类!");
            return new GenerateSqlCmdByTableFields(ORM, table, this.GeneratorFactory);
        }

CSFramework.DB.dll (数据库底层接口组件)

介绍:IDatabase 里面有4个meta_XXX接口,用于查询数据库元数据的接口。

代码生成器,生成SQL脚本要支持MySQL, 改@参数符号。

代码生成器,生成WCF接口到单独文件。

代码生成器,加选项:界面组件自适应。

开发文档:https://www.cscode.net/archive/csframework.db/1630589248.html

DbDataUpdate组件(已废弃,请使用DbFramework)

C/S框架网官网搜索文档,用于轻量级数据操作界面,Add/Edit/Delete对象实体操作。

参考:https://www.csframework.com/archive/1/arc-1-20210611-3587.htm

通过代码生成器生成标准的实体类模型,可用于DbDataUpdate组件操作。

DbFramework组件

参考文档:https://www.csframework.com/archive/1/arc-1-20210726-3732.htm

软件开发框架培训实时讲解总结|CSFrameworkV5.1旗舰版|培训大纲

frmBaseXXX基类窗体里面重要的方法

  1. InitButtons 初始化按钮。

  2. ButtonStateChanged, 按钮状态改变触发的事件。

  3. If (this.ButtonAuthorized(value):判断当前窗体是否拥有value参数的权限Value参数:权限值,2的n次方,如:1,2,4,8,16,32,…..

  4. IButtonInfo接口,增加Visible属性

框架基类界面

1. frmBase 窗体基类

  1. 仅展示数据的,继承 frmBaseChild, 无增删改

  2. 处理单表数据的,继承 frmBaseDataDictionary

  3. 处理主从表数据的,继承 frmBaseBusiness

  4. SetLanguage: 设置多语言,frmBase.SetLanguage(),框架默认封装三种语言,派生类可以重写 override 此方法,用于自定义设置组件的语言。

2. frmBaseModule 模块主窗体

  1. SetMenuTag(): 给窗体分配最大的权限数值(可分配数值)

  2. SetMenuButtonRelations():绑定菜单与按钮的对应关系, 菜单显示,按钮同样显示。

  3. MdiTools.OpenChildForm: 打开子窗体.

特点:继承frmBaseModule 基类的窗体,作为业务模块的主窗体。

3. frmBaseDataDictionary 单表数据窗体

  • InitButtons:初始化按钮。
  • ButtonStateChanged:按钮状态改变时触发该事件。
  • DoBindingSummaryEditor:自动绑定文本输入框的数据源。

4. frmBaseBusiness 主从表数据窗体

  • InitButtons:初始化按钮。
  • ButtonStateChanged:按钮状态改变时触发该事件。
  • DoBindingSummaryEditor:自动绑定文本输入框的数据源。
  • DoBindingDetailGrid:绑定明细表格的数据源。
  • OnEmbeddedNavigatorButtonClick:明细表格操作按钮的click事件,支持Add,Insert,Delele。
  • CreateOneDetail: 创建一条明细表记录。
  • 明细表格. CellValueChanged事件:修改单元格的值触发的事件。常用计算逻辑,计算金额:Quantity*Price=Amount(Amount列设为只读,计算结果不支持修改)

5. frmBaseDialog 对话框窗体

6. frmMsgEx:自定义UI消息窗体。

C# 全选
frmMsgEx.ShowInformation(“您好!”);
frmMsgEx.ShowWarning(“显示警告消息!”);

软件开发框架培训实时讲解总结|CSFrameworkV5.1旗舰版|培训大纲

文本输入框命名规则

文本框:txt+字段名

勾选框:chk+字段名

文本框赋值:SetEditorBindingValue(txt字段名,true);

文本输入框赋值方式

赋值差异:

C# 全选
txtCode.Text=”1111”; //给没有绑定数据源的文本框赋值
SetEditorBindingValue(txtCode,”1111”,true); //给绑定数据源的文本框赋值

CSFrameworkV5.DataAccess 数据访问层几个重要的方法

  • DAL层Update方法(DataSet ds):
  • DAL层Update方法(DataTable data):
  • DAL层GetNumber方法,生成流水序号(单据号码);

动态加载模块

动态加载模块,怎样区分业务模块?

  • 对dll文件过滤,区分dll文件名,使用通配符如:ERP*.dll,筛选:ERP1.dll,ERP2.dll等文件。
  • Dll类库的程序集要定义AssemblyModuleEntry特性 (开发框架通过.NET反射获取该特性,判断是否业务模块)。
  • Assembly.cs, AssemblyModuleEntry模块入口标识 (用于识别开发框架的模块)

动态加载dll流程

在debug目录查询CSFramework*.dll 查找AssemblyModuleEntry特性,满足这两个条件,自动加载该dll文件。

动态加载模块技术:.NET反射,.NET Reflecation。

参考:frmMain.InitUserInterface方法,LoadModules方法

账套管理与维护

系统库 tb_DataSet 表, IsVisible=Y, 登陆界面可选择账套。

DBUserPassword 对称加密, Rijndael , DES, DemoTester.exe加密。

常量改名注意事项

1.升级程序 Program.cs 文件内的常量改名

2.主程序 Globals.cs,替换:CSFramework,替换为您的项目名称,如:YourERP。

代码生成器 CodeGenerator

生成主从表界面注意事项

配置主表ORM

软件开发框架培训实时讲解总结|CSFrameworkV5.1旗舰版|培训大纲

配置明细ORM

软件开发框架培训实时讲解总结|CSFrameworkV5.1旗舰版|培训大纲

软件开发框架培训实时讲解总结|CSFrameworkV5.1旗舰版|培训大纲

新开发的界面如何给用户分配权限

  • 给菜单定义权限值。
  • 给角色分配权限
  • 给用户分配角色
  • 权限值分类:

单表:AuthorityCategory.MASTER_ACTION ---- 核对菜单打开的界面必须继承frmBaseDatadict界面

主从表:AuthorityCategory.BUSINESS_ACTION_VALUE –>打开的界面必须继承frmBaseBusiness界面

报表:AuthorityCategory.REPORT_ACTION_VALUE

扩展权限:AuthorityCategory.MASTER_ACTION + ButtonAuthority.EX_01

扩展按钮

官网搜索关键词“扩展权限”。

扩展窗体中自定义按钮

http://www.csframework.com/archive/1/arc-1-20210722-3729.htm

扩展通用权限按钮(Toolbar中的按钮)

http://www.csframework.com/archive/5/arc-5-20110510-1465.htm

http://www.csframework.com/archive/1/arc-1-20161023-2266.htm

隐藏按钮: InitButtons方法的最后面加代码

_buttons.GetButtonByName("btnPrint").Visible = false;

WCF开发

WCF有三种承载(宿主,Hosting)方式,IIS, Win服务, SelfHosting自承载

IIS或自承载用于开发调试。

IIS承载(适用http/https协议)

配置web.config三个结点: bingings, services, behaviors

SQL连接字符串加密

Globals.asax文件的代码位置:App_Code\web_app.cs文件, 初始化Rij加密器。

关于协议与WCF结点绑定

HTTP/HTTPS协议:wsHttpBinding, basicHttpBinding

Net.tcp协议:nettcpBinding

WCF开发相关文档

软件开发框架培训实时讲解总结|CSFrameworkV5.1旗舰版|培训大纲

Self Hosting自承载(适用http协议,开发环境调试)

https://www.csframework.com/archive/1/arc-1-20200217-2722.htm

软件开发框架培训实时讲解总结|CSFrameworkV5.1旗舰版|培训大纲

Windows服务承载(适用http/https协议,生产环境)

http://www.csframework.com/archive/1/arc-1-20200212-2703.htm

软件开发框架培训实时讲解总结|CSFrameworkV5.1旗舰版|培训大纲

WCF开发框架 - 采用wsHttpBinding及basicHttpBinding连接https协议的WCF服务

http://www.csframework.com/archive/1/arc-1-20210709-3707.htm

软件开发框架培训实时讲解总结|CSFrameworkV5.1旗舰版|培训大纲

WCF快速开发框架 - IIS承载WCF服务wsHttpBindings配置详解(HTTP协议)

http://www.csframework.com/archive/1/arc-1-20210709-3705.htm

软件开发框架培训实时讲解总结|CSFrameworkV5.1旗舰版|培训大纲

WCF快速开发框架 - IIS承载WCF http协议BasicTcpBinding配置详解

http://www.csframework.com/archive/1/arc-1-20210709-3704.htm

软件开发框架培训实时讲解总结|CSFrameworkV5.1旗舰版|培训大纲

WCF快速开发框架 - IIS承载WCF net.tcp协议NetTcpBinding配置详解

http://www.csframework.com/archive/1/arc-1-20210709-3701.htm

软件开发框架培训实时讲解总结|CSFrameworkV5.1旗舰版|培训大纲

WCF开发框架 - vs发布IIS承载(IIS Hosting)的WCF应用服务详解

http://www.csframework.com/archive/1/arc-1-20210709-3703.htm

软件开发框架培训实时讲解总结|CSFrameworkV5.1旗舰版|培训大纲

WCF开发框架 - BasicHttpBinding绑定的web.config与C#代码配置(支持https协议)

http://www.csframework.com/archive/1/arc-1-20210708-3696.htm

软件开发框架培训实时讲解总结|CSFrameworkV5.1旗舰版|培训大纲

WCF开发框架 - NetTcpBinding配置web.config与C#代码配置

http://www.csframework.com/archive/1/arc-1-20210708-3695.htm

软件开发框架培训实时讲解总结|CSFrameworkV5.1旗舰版|培训大纲

WCF开发框架之WSHttpBinding参数配置(C#代码配置+App.Config两种方案)

http://www.csframework.com/archive/1/arc-1-20210707-3691.htm

软件开发框架培训实时讲解总结|CSFrameworkV5.1旗舰版|培训大纲

WCF开发框架IIS承载WCF - Website站点承载改为ASP.NET网站应用程序承载

http://www.csframework.com/archive/1/arc-1-20210707-3693.htm

软件开发框架培训实时讲解总结|CSFrameworkV5.1旗舰版|培训大纲

WCF开发框架之ICommunicationObject 对象详解

http://www.csframework.com/archive/1/arc-1-20210707-3690.htm

关于数据处理超时解决方案

若是WCF服务器,在Globals.cs

1.DatabaseFactory.CommandTimeOut = 10;//单位:秒,设置DbCommand命令执行超时;

软件开发框架培训实时讲解总结|CSFrameworkV5.1旗舰版|培训大纲

若是直连模式

BridgeFactory.InitializeBridge()

软件开发框架培训实时讲解总结|CSFrameworkV5.1旗舰版|培训大纲

软件开发框架培训实时讲解总结|CSFrameworkV5.1旗舰版|培训大纲

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


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