阅读本文请先阅读以下两篇文章html
Netsharp基于.NET平台,支持的产品形态有三种:前端
Netsharp是三种终端的全集,本文介绍的内容多以北极熊做为例子,由于北极熊功能最多、最强、最稳定。sql
三种形态都是前端,她们公用同一套后端,后端指的是业务服务器以后包括的功能。数据库
Netsharp有五种部署类型,分别对应五种部署的场景:后端
类型设计模式 |
名称缓存 |
说明安全 |
Desktop服务器 |
桌面客户端架构 |
仅仅包括界面层、实体、接口以及先后端公用的程序集 经过互联网与服务器端交互 |
Server |
业务服务器端 |
做为业务服务器,对外经过互联网公布服务接口 处理复杂的业务逻辑功能 能够作集群(暂不支持) |
Desktop_Server |
传统的CS结构 |
桌面客户端和业务服务器在同一个进程内,主要方便开发调试;单人操做的系统,或者并发要求不高的,可使用此种模式。 |
WebFront |
WEB前端 |
Web前端服务器也是服务器,可是只负责处理界面的渲染等逻辑,不处理业务逻辑,业务逻辑经过调用业务服务器的接口来完成 Web前端服务器与业务服务器多在同一个局域网 Web前端服务器与业务服务器分开通常出于安全和性能的考虑 Web前端服务器与业务服务器分开更易于Web前端服务器作集群 WebFront模式须要管理多个Session,Desktop模式只须要管理一个Session |
WebFront_Server |
WEB前端+业务服务器 |
Web前端服务器与业务服务器在同一进程内 |
Netsharp的部署类型,能够经过bin/Netsharp.Light.exe进行设置,下图是部署类型的设置方式:
本章节介绍Netsharp的六个核心概念,他是Netsharp基础,这六个概念都有对应的工具支持,从工具角度上对平台的资源进行有效、清晰的管理。
这六个概念并非Netsharp的所有内容,本节也不是介绍Netshrap的技术架构,而是介绍Netsharp平台是如何管理开发人员的成果的。
插件框架是愈来愈流行的一种开发方式。插件作的比较好的常见于IDE,如Eclipse(基于OSGI标准)、Netbean、SharpDevelop。国内一款软件(OSGI.NET)实现了.NET平台的OSGI标准,算是作得比较规范的。除此以外笔者没有见过国内其余的比较正规的插件体系,大部分声称系统支持的所谓插件都是伪插件,从技术角度来讲不过是工厂模式加根据配置反射建立对象而已。笔者认为插件系统有三个必需要素:
Netsharp的插件设计参考了SharpDevelop,SharpDevelop是一个IDE工具,有些地方并不适应于企业软件,Netsharp在SharpDevelop的基础上进行了以下的改造和扩展:
Netsharp提供了可视化工具对插件管理,管理工具支持两种视角,插件视角和路径视角:
在企业软件开发中,实体模型主要指的是实体的模型,模型通常经过UML图的方式表现,比较直观的表达问题域的静态结构关系,这种图是分析设计所关心的。而对于平台来讲,关心的是作一个UML静态类图工具出来,更关心的是实体模型自己自描述的元数据信息,本文称之为实体元数据。
平台有了实体元数据,业务开发的序幕就此拉开,这个过程能够时髦的称之为“领域驱动”,不过跟常说的“领域驱动”稍有不一样。基于实体元数据配合平台工具能够作的事情有:
关于Netsharp的实体设计,请参见管理软件实体设计。
资源是Netsharp创造的概念,资源包括两个方面,资源树和资源类型,其中资源树也可称之为资源节点。
如何理解资源咱们从考察以下两个场景开始:
要素 |
商贸企业 |
软件开发公司 |
角色 |
公司员工 |
软件开发人员 |
工具 |
供应链管理系统(SCM) |
Netsharp |
数据类型 |
销售订单、发货单、发票、出库单等等 |
列表、表单、查询、报表 |
数据举例 |
3月1号销售给客户A总金额100W 3月1号给客户A发货 3月2号销售给客户B总金额120W |
3月1号开发销售订单列表,编辑列表元数据 3月1号开发销售订单表单,编辑表单元数据 3月2号开发销售发票列表,编辑列表元数据 |
结论 |
SCM是工具,用来管理订单、发货单等数据 |
Netsharp是工具,用来管理列表、表单、报表的元数据。 |
上述两个场景放在一块儿考察,他们的不一样之处在因而不一样的行业,干的不一样的事情。相同的地方都是使用一个工具来管理本身工做中使用的数据。开发人员的数据就是工做区、列表、表单、报表等数据,Netsharp中把开发维护的这些数据叫资源。这些数据是有不一样的类型,SCM的每种类型(销售销订单、发货单、销售发票等)的数据叫单据;Netsharp中的每种类型(做区、列表、表单、报表等)叫资源类型。
资源和插件是相互补充的,插件和资源都是平台的工具,区别在于,插件强调插件物理可插拔、路径可扩展、插件项支持多种类型,可是其插件项的类型只能是携带信息比较少的类型,好比菜单。对于一些复杂的类型,好比工做区或者列表元数据,则须要强类型的结构来表达,这种状况插件表达则不太合适,资源就是解决这种问题的,并且资源还有本身的视角。Netsharp的平台工具中,大部分菜单都是使用资源进行管理的,能够说资源的概念比插件的概念要大。
Netsharp中有30种以上的资源类型,这些资源类型按照树状结构进行分类,资源的分类叫资源树,树上的每一个节点叫资源节点。Netsharp中全部的资源类型的分类是统一的,即全部的资源分类都使用一个资源树。资源节点在Netsharp中对应的实体是Netsharp.Core.ResourceNode。下图是Netsharp的平台管理工具的面板,他能够经过工做区的主菜单”视图/平台工具”打开,这些工具中大部分是以资源的方式来进行管理的。
以Netsharp部件工做区(PartWorkspace)为例,部件工做区是一种资源,他按照资源树的方式进行管理,请参见下图部件工做区的工具。
下图是Netsharp的枚举管理工具,枚举是Netsharp的一种资源,他也按照资源树的方式进行管理,请参见下图:
下图是Netsharp资源节点的管理界面,全部的资源节点组成了一棵资源树。
对于管理软件来讲,通常会进行以下分类
级次 |
一级 |
二级 |
三级 |
四级 |
五级 |
本文命名 |
产品线 |
子系统 |
模块 |
领域对象 |
实体 |
ERP产品线 |
建筑施工企业软件产品 |
子系统一 |
- |
- |
- |
子系统二 |
- |
- |
- |
||
子系统三 |
- |
- |
- |
||
... |
- |
- |
- |
||
ERP产品 |
供应链 |
采购 |
采购订单 |
采购订单头 |
|
|
采购订单行 |
||||
|
结算明细 |
||||
进货单 |
- |
||||
采购发票 |
- |
||||
... |
- |
||||
销售 |
- |
- |
|||
库存 |
- |
- |
|||
财务 |
现金 |
- |
- |
||
往来 |
- |
- |
|||
出纳 |
- |
- |
|||
生产 |
- |
- |
- |
||
分销零售 |
- |
- |
- |
||
.... |
- |
- |
- |
上图为稍微复杂一些的系统分级结构,简单的系统可能只有第3、4、五级。第五级别的实体为研发人员视图。客户和销售人员不会有此概念,或者概念比较模糊,即他们不会把实体做为独立的概念环境进行思惟。在命名上会有歧义的是第三级和第四级,即模块和领域对象。“领域对象”是本文的一种叫法,目前尚未找到更好的进行第三级和第四级进行区分的命名。使用“领域对象”的初衷是领域指的是软件给客户(某一种岗位在某一个业务场景)提供完整业务的一种最小的场景,如录入一张新的采购订单,在这个场景中,用户打开采购订单界面,能够作不少与采购订单编辑相关的事情。(这个名称感受也不是很好,由于用户很难理解)模块能够简单的理解为是一个部门级别的应用,或者为一个须要多个岗位来完成的场景,好比采购管理。
在Netsharp的资源节点对应的实体是Netsharp.Core.ResourceNode,ResourceNode有个属性ResourceType,ResourceType是一个枚举,有三个可选值:分类、插件、单据。ResourceType是资源节点的必输字段。下面详细介绍这三种资源节点类型。
1.插件
和第三级模块对应,当资源节点类型为插件是,必须在资源节点上设置对应的插件。由于平台的资源是经过资源树管理的,当插件进行导出操做时候,平台会根据插件对应的资源节点把下属的全部资源进行导出,插件的安装、卸载也是这种逻辑。
2.单据
和第四级(领域对象)对应,当资源节点是一个领域对象时,如销售订单、采购入库单等,资源节点类型选择单据。当资源节点为单据时,必须设置资源节点的EntityId。EntityId是Netsharp中经常使用的概念,他表示一个领域对象,技术上对应领域对象(或者叫实体)的Type.FullName,也能够理解为实体模型的类全名,参见下图:
领域对象是实体的特例,当一个资源节点和一个实体对应时,类型均可以选择单据。
3.分类
当资源节点类型不为插件和单据时,均可以选择分类。
Netsharp工做台就是最终用户看到的产品的主界面,工做台有时也称之为门户。用户能够自定义工做台的布局,下图显示了默认工做台的布局结构:
下面是这六个部分的概要描述
顺序 |
名称 |
说明 |
插件路径 |
扩展说明 |
1 |
LOGO |
产品图标 |
无 |
自动读取应用程序配置的产品名称 |
2 |
用户信息区 |
|
Workbench/StatusBar/RightMenu |
|
3 |
MainMenu |
主菜单 |
Workbench/MainMenu |
Netsharp的原则是主菜单只现实系统级别的菜单(如系统选项、经常使用工具、视图、帮助等),不显示业务相关的菜单 |
4 |
Pad |
面板 |
Workbench/Pad |
目前平台提供了四个面板,导航栏、平台工具、业务模型、做业管理;在这个路径下能够建立自定义的导航面板, |
5 |
Workspace |
工做区 |
无 |
工做区通常会经过面板和主菜单的出发打开,不在赘述。Netsharp支持扩展自定义的工做区。 |
6 |
StatusBar |
状态栏 |
无 |
|
除了上面六个部分,还有不明显体如今界面元素上的工做台初始化相关工做项,他们分别:
顺序 |
名称 |
说明 |
插件路径 |
扩展说明 |
1 |
Autorun |
工做台初始化 |
Workbench/AutoRun/Client |
工做台启动后,会读取此路径,自动执行此路径配置的逻辑 |
2 |
Icon |
图标 |
Netsharp/Icons |
自定义的图标在这里初始化 |
3 |
Homepage |
起始页 |
Workbench/Homepage/ZonePart |
Netsharp目前的起始页是有多个Zone组成的,这里能够设置起始页的Zone |
4 |
VersionCache |
版本缓存 |
无 |
为了提升性能,把Netsharp的元数据缓存在本地,当元数据改变时自动更新缓存的机制 |
5 |
|
|
|
|
6 |
|
|
|
|
上文已经介绍了工做区(Workspace)的的概念,本节介绍一种特殊的工做区叫部件工做区(PartWorkspace),不管您是Netsharp的最终用户,仍是开发人员,您时刻都会跟PartWorkspace有关。
本人认为软件的界面是一种树状的逻辑结构,在设计模式中对应着组合模式(Composite),以Netsharp的工做台为例,工做台是顶级节点,工做台由工做台页头、Pad容器、工做区容器、主菜单、状态栏等子组件组成,这几个子级别又分别有本身的子级组件,如此类推就造成了一棵树。树的末级节点通常是Textbox、ComboBox等控件。因此通常基于元数据的界面描述都使用XML格式的语法,由于XML是树状结构的,好比HTML和XAMAL。
通常来讲,开发人员封装的界面组件,分红两个种,一种是技术性质的控件,好比Outlookbar,日历等;另外一种是业务性质的控件,好比订单表单,和单据控件,不一样的研发团队积累不同,封装的角度也不一样,若是封装单据做为控件的话,是平台化的思路,抽象层次要高一些。Netsharp是平台因此会对单据进行封装,可是Netsharp封装的力度比单据要细一个级别,本文称之为部件。一个工做区是由多个部件组成的,部件之间通常有父子关系。对于订单的表单来讲,其工做区通常由两个部件组成:实体的表单部件(父)和实体明细列表部件(子)。对于订单列表来讲,界面能够有三个部件:订单列表(父)、订单表单(子)、订单子表(子或者孙,父亲为列表或者表单),子表部件和表单部件能够被重用,作出更多灵活的界面。部件对于作界面设计和二次开发都提供了比较好的角度,能够说是技术和业务上最理想的封装粒度。
Netsharp提供了20种部件,用户能够继承扩展这些部件,也能够实现本身独立的部件,Netsharp部件参考下图:
序号 |
编码 |
名称 |
默认控制器 |
默认工具栏 |
说明 |
1 |
EntityList |
列表.主列表 |
Netsharp.Commerce.EntityListPart |
Netsharp/Commerce/EntityList/Toolbar |
|
2 |
Datagrid |
列表.只读 |
Netsharp.Commerce.DatagridPart |
Netsharp/Commerce/Datagrid/Toolbar |
|
3 |
EntityDetail |
列表.单据列表 |
Netsharp.Commerce.EntityDetailPart |
Netsharp/Commerce/EntityDetail/Toolbar |
|
4 |
VoucherDetail |
列表.单据明细列表 |
Netsharp.Commerce.VoucherDetailPart |
Netsharp/Commerce/Voucher/DetailMenu |
|
5 |
Detail |
列表.细列表 |
Netsharp.Commerce.DetailPart |
Netsharp/Commerce/Voucher/DetailMenu |
|
6 |
DatagridSolution |
列表方案 |
Netsharp.Commerce.DatagridSoltionPart |
Netsharp/Commerce/QuerySolution/MainMenu |
|
7 |
ReportList |
列表.报表 |
Netsharp.Commerce.DatagridReportPart |
Netsharp/Commerce/Voucher/DatagridReportMenu |
|
8 |
VoucherForm |
表单.单据 |
Netsharp.Commerce.VoucherFormPart |
Netsharp/Commerce/Form/Navigation/Toolbar |
|
9 |
CustomerForm |
表单.可保存 |
Netsharp.Commerce.FormPart |
Netsharp/Commerce/Form/Edit/Toolbar |
|
10 |
FormPart |
表单.属性 |
Netsharp.Commerce.FormPart |
Netsharp/Commerce/Form/Property/Toolbar |
|
11 |
ReferencePart |
表单.引用表单 |
Netsharp.Commerce.ReferencePart |
Netsharp/Commerce/Voucher/ReferenceMenu |
|
12 |
ReportStatistics |
报表.统计表 |
Netsharp.Grus.SummaryReportPart |
Netsharp/Commerce/Datagrid/Toolbar |
|
13 |
ReportRdlc |
报表.交叉表 |
Netsharp.Grus.RdlcReportPart |
Netsharp/Grus/RdlcReport/Toolbar |
|
14 |
ReportGrus |
报表.GRUS |
Netsharp.Grus.GrusPart |
|
|
15 |
ReportQueryFilter |
报表查询条件 |
Netsharp.Commerce.RdlcQueryFilterPart |
Netsharp/Commerce/QueryFilter/MainMenu |
|
16 |
ReportSolution |
报表方案 |
Netsharp.Grus.ReportSolutionPart |
Netsharp/Grus/ReportSolution/Toolbar |
|
17 |
TreePart |
分类树 |
Netsharp.Commerce.TreePart |
Netsharp/Commerce/CategoryTreePart/Toolbar |
|
18 |
QuerySolution |
查询方案 |
Netsharp.Commerce.QuerySolutionPart |
Netsharp/Commerce/Solution/MainMenu |
|
19 |
QueryFilter |
查询条件 |
Netsharp.Commerce.QueryFilterPart |
Netsharp/Commerce/QueryFilter/MainMenu |
|
20 |
Customer |
自定义 |
|
|
|
Netsharp有六驾马车的概念,这六驾马车都基于插件使用,能够拥有很是强大的功能。六驾马车是从技术角度对开发六种场景抽象,他们分别是:
编号 |
英文名 |
中文名 |
说明 |
场景 |
开发相关 |
1 |
Command |
命令 |
界面操做的一个触发,经常使用的有Button、MenuItem、Toolbar的事件 |
系统点击“退出”按钮,执行Netsharp.Platform.ApplicationExitCommand |
界面层使用,通常和菜单、树节点、工具栏项上配置 |
2 |
Trigger |
字段触发器 |
某一个字段被修改以后,引发其余字段的计算 |
修改单价和数量时,自动计算金额 |
重写实体的OnPropertyChanged方法 实现IPropertyTrigger接口 界面层Controller中的On**Changed方法 |
3 |
Validation |
字段验证 |
数据合法性验证 |
保存时的邮件验证 |
实体属性Set调用时捕获的异常信息实现接口IPropertyValidation |
4 |
Condition |
字段条件 |
某个字段在某种场景下不能够编辑或者隐藏 |
审核后数量不能修改 |
重写实体的Condition方法 实现接口IPropertyCondition 界面层Controller的**Condition方法 |
5 |
OperationCondition |
操做条件 |
操做按钮在某个场景下不可用或者隐藏 |
审核后不能删除 |
实现接口IOperationCondition 在插件中配置 |
6 |
Action |
(无) |
一个实体的操做分红多个步骤执行,每一个步骤叫一个Action。 界面客户端和服务端均可以使用Action |
客户端和服务端均可以使用,参见下文 |
实现接口IAction 在插件中配置 服务端的路径为服务类型全名+方法名 客户端的路径为控制器类型全名+方法名 |
本文是体系结构的介绍,关于每驾马车在第三个系列Netsharp开发中都会有详细的介绍,这里只说明一下Action在界面端和服务端的两个种:
1、客户端Action场景:
例如,在Netsharp平台的普通的一张表单界面上,用户执行保存按钮时,执行的是Controller的Save方法,按照顺序执行的逻辑以下:
顺序 |
功能 |
Action |
说明 |
1 |
调用前置方法OnSaving |
OwnerMethodAction |
|
2 |
调用前置事件Saving |
OwnerEventAction |
|
3 |
性能跟踪开始 |
StopwatchStartAction |
|
4 |
显示Loadingbar |
LoadingbarStartAction |
|
5 |
界面端录入合法性校验 |
FormpartSaveAssertAction |
|
6 |
调用保存服务 |
FormpartSaveAction |
|
7 |
调用保存后置事件Saved |
OwnerEventAction |
|
8 |
调用保存后置方法OnSaved |
OwnerMethodAction |
|
9 |
隐藏Loadingbar |
LoadingbarEndAction |
|
10 |
性能跟踪中止 |
StopwatchEndAction |
|
2、服务端Action场景
例如,在订单保存时服务方法中执行的逻辑,按照顺序以下:
顺序 |
功能 |
Action |
说明 |
1 |
信用控制 |
|
|
2 |
可用量控制 |
|
|
3 |
最低售价控制 |
|
|
4 |
订单基本校验 |
|
|
5 |
订单持久化到数据库 |
|
|
6 |
生成收款单 |
|
|
7 |
生成出库单 |
|
|
8 |
生成加工单 |
|
|
9 |
记往来帐 |
|
|
10 |
记可用量账 |
|
|
11 |
更新客户信用 |
|
|
12 |
更新最低售价 |
|
|
分类 |
组件 |
功能特征 |
客户可见 |
工具支持 |
4.0版本已支持 |
元数据管理方式 |
1 |
实体模型 |
可持久化 可序列化 实体支持三驾马车 平台自定义数据类型 平台提供常见的若干父类(可持久化实体、业务实体、分类实体) 支持字段扩展 可视化实体设计 |
否 |
UML建模工具 |
是 |
插件 |
2 |
插件机制 |
参考SharpDevelop插件机制(改形成适合管理软件的插件模式) 数据库格式 路径支持继承 插件项支持重写 支持插件项与功能权限绑定 |
否 |
插件编辑工具 插件浏览工具 安装卸载工具 |
是 |
插件 |
3 |
持久层 |
多数据库 级联对象增删改查 OQL查询 并发控制 引用检查 基于Ado.net的事务 分布式事务(暂不支持) 支持Sqlserver 部分支持Mysql 可扩展支持Oracle 可扩展支持其余数据库 |
否 |
OQL查询分析器 |
是 |
无 |
4 |
分布式 |
服务调用级别事务 多种访问方式(HTTP\TCP) 高性能的序列化 客户端动态代理 日志跟踪 根据父类的实体默认提供服务实现如:EntityService、BusinessEntityService、VoucherService |
否 |
性能跟踪查看其 |
是 |
无 |
5 |
工做台 |
支持自定义布局 默认布局支持Pad、Workspace、主菜单、状态来自定义配置 支持产品名、公司版权、LOGO、版本等自定义设置 登陆界面支持自定义背景图片 |
是 |
|
是 |
插件和配置文件 |
6 |
单点登陆 |
暂不支持 |
是 |
|
否 |
无 |
7 |
多国语言 |
基于数据库配置 平台提供多语言工具 |
是 |
多语言维护工具 |
是 |
资源树 |
8 |
并发 |
基于Ts的并发控制 根据系统选项肯定是否并发控制 |
否 |
实体元数据上设置 |
是 |
实体模型 |
9 |
互斥 |
两个业务场景不能同时发生 |
否 |
|
否 |
资源树 |
10 |
表单 |
根据实体元数据快速生成表单 支持最终用户的字段设置 支持常见的控件类型 数据的双向绑定 字段显示,必输,可空,公式等设置 默认打印 |
是 |
表单管理工具 |
是 |
资源树 |
11 |
列表 |
根据实体元数据快速生成列表 支持最终用户的字段设置 支持常见的控件类型 数据的双向绑定 支持分页 支持懒加载 可设置字段:显示,必输,可空,排序,汇总等属性 支持默认打印 |
是 |
列表管理工具 |
是 |
资源树 |
12 |
查询 |
根据实体元数据快速生成查询 支持最终用户的字段设置 支持常见的控件类型 多种查询控件 自定义查询方案 |
是 |
查询工具 |
是 |
资源树 |
13 |
打印 |
可视化打印模板设置 支持汇总表 支持交叉表 支持自定义报表 图表(暂时不支持) |
是 |
报表设计器 报表工具 |
是 |
资源树 |
14 |
权限控制 |
功能权限/字段权限 数据权限 权限约束/权限互斥 分级受权 |
是 |
操做管理工具 |
是 |
资源树 |
15 |
编码规则 |
支持流水号 支持编号包含普通文本 3. 支持编号包含当前实体字段 |
是 |
编码规则设置工具 |
是 |
资源树 |
16 |
AOP |
暂不支持 |
否 |
|
否 |
无 |
17 |
性能统计分析 |
自动 |
否 |
性能统计选项开关 性能分析器 |
是 |
无 |
18 |
自动化测试 |
暂不支持 |
否 |
|
否 |
无 |
19 |
脚本引擎 |
支持C#脚本功能 |
否 |
脚本测试工具 |
是 |
无 |
20 |
UI控件套件 |
使用Telerik控件库 自定义若干控件 |
是 |
|
是 |
无 |
21 |
业务选项 |
基于插件的选项配置 默认提供多种数据类型的选项控件 |
是 |
插件工具 |
是 |
插件 |
22 |
向导 |
支持向导框架 |
是 |
|
是 |
无 |
23 |
组织机构 |
支持用户/角色 支持多组织 支持总公司/子公司/部门/分类/项目/职务/岗位 |
是 |
|
是 |
无 |
24 |
界面三驾马车 |
状态控制 触发器 编辑验证 |
是 |
|
是 |
硬编码 插件 界面元数据 |
25 |
工做流 |
|
是 |
|
否 |
资源树 |
26 |
建立账套 |
暂不支持 |
是 |
|
否 |
无 |
27 |
异常管理 |
异常框架 异常跟踪 异常查看 |
否 |
异常列表查看 |
是 |
资源树 |
28 |
枚举 |
表单、列表、查询对应的控件 自动生成枚举代码 |
是 |
枚举管理工具 |
是 |
资源树 |
29 |
参照 |
支持下拉列表 支持弹出参照 支持表单、列表、查询动态建立默认参照 支持添加自定义的过滤条件 支持添加当前行的变量做为条件 支持C#脚本生成条件 |
是 |
参照管理工具 |
是 |
资源树 |
30 |
预警/提醒/通知 |
|
是 |
插件工具配置 |
是 |
资源树 |
31 |
做业 |
基于Quartz.NET 支持可视化的触发器设置 可视化建立做业 支持做业日志跟踪 |
否 |
做业管理工具 |
是 |
资源树 |
32 |
日志组件 |
|
否 |
生成日志文件 |
是 |
无 |
33 |
客户端自动升级 |
客户端发现新版本时自动升级 |
|
|
|
无 |
34 |
数据库脚本升级工具 |
低版本到高版本升级时,自动执行若干脚本 |
|
|
|
|
35 |
缓存 |
内存缓存 缓存服务器 单个对象缓存 SET缓存 |
|
|
|
|
36 |
Session管理 |
超时验证 踢出管理 |
|
|
|
无 |
37 |
业务日志 |
单据增删改查自动记录日志 登陆等操做自动记录日志 日志查看、跟踪 |
|
|
|
无 |
38 |
导出SQL脚本 |
列表、表单支持导出当前数据位SQL脚本 支持导出当前数据及组合数据 支持根据ById导出 支持导出全表 支持任意SELECT语句的脚本导出 |
|
|
|
单据、列表的二次开发菜单 SQL查询分析器 |
Netsharp路标规划分红五个阶段,参见下图,目前基本完成第二个阶段,即平台产品化阶段。
本文特别感谢东莞许胜平的建议和校对工做。