Netsharp總體設計


閱讀本文請先閱讀如下兩篇文章

  1. 什么是企業軟件
  2. Netsharp什么

Netsharp總體設計

1.1     Netsharp終端形式

Netsharp基於.NET平台,支持的產品形態有三種:

  1. 北極熊(Polarbear,桌面模式,WPF實現)
  2. 熊貓(Panda,BS模式,純HTML)
  3. 先鋒(Pioneer,移動Web模式,基於Panda)

Netsharp是三種終端的全集,本文介紹的內容多以北極熊作為例子,因為北極熊功能最多、最強、最穩定。

三種形態都是前端,她們公用同一套后端,后端指的是業務服務器之后包括的功能。

 

1.2     Netsharp部署類型

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進行設置,下圖是部署類型的設置方式:

 

1.3     Netsharp平台管理

本章節介紹Netsharp的六個核心概念,他是Netsharp基礎,這六個概念都有對應的工具支持,從工具角度上對平台的資源進行有效、清晰的管理。

這六個概念並不是Netsharp的全部內容,本節也不是介紹Netshrap的技術架構,而是介紹Netsharp平台是如何管理開發人員的成果的。 

1.3.1  插件

    插件框架是越來越流行的一種開發方式。插件做的比較好的常見於IDE,如Eclipse(基於OSGI標准)、Netbean、SharpDevelop。國內一款軟件(OSGI.NET)實現了.NET平台的OSGI標准,算是做得比較規范的。除此之外筆者沒有見過國內其他的比較正規的插件體系,大部分聲稱系統支持的所謂插件都是偽插件,從技術角度來說不過是工廠模式加根據配置反射創建對象而已。筆者認為插件系統有三個必須要素:

  1. 插件,一個插件有多個路徑;插件從物理上可脫離產品獨立存在
  2. 擴展點(Netsharp叫路徑),擴展點可以橫穿多個插件
  3. 插件項支持多種類型,如菜單、類型、圖標等。插件項類型本身也有擴展點。

 

Netsharp的插件設計參考了SharpDevelop,SharpDevelop是一個IDE工具,有些地方並不適應於企業軟件,Netsharp在SharpDevelop的基礎上進行了如下的改造和擴展:

  1. 支持數據庫配置,而非xml配置
  2. 路徑支持繼承和重寫
  3. 插件項支持權限控制
  4. 提供可視化界面編輯插件項

Netsharp提供了可視化工具對插件管理,管理工具支持兩種視角,插件視角和路徑視角:

1.3.2  實體模型

在企業軟件開發中,實體模型主要指的是實體的模型,模型一般通過UML圖的方式表現,比較直觀的表達問題域的靜態結構關系,這種圖是分析設計所關心的。而對於平台來說,關心的是做一個UML靜態類圖工具出來,更關心的是實體模型本身自描述的元數據信息,本文稱之為實體元數據。

平台有了實體元數據,業務開發的序幕就此拉開,這個過程可以時髦的稱之為“領域驅動”,不過跟常說的“領域驅動”稍有不同。基於實體元數據配合平台工具可以做的事情有:

  1. 生成數據庫對象,包括表結構、索引、主鍵、約束、外鍵等
  2. 實體類代碼
  3. 持久層的ORM映射元數據
  4. 自動生成接口、服務、業務類、界面控制器的類
  5. 自動生成報表、表單、列表、查詢的界面元數據
  6. 可以做字段權限控制、數據權限控制
  7. 可以做單據編碼規則
  8. 其他

 

    關於Netsharp的實體設計,請參見管理軟件實體設計

1.3.3  Netsharp資源

1.3.3.1 什么是資源

資源是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中的每種類型(作區、列表、表單、報表等)叫資源類型

1.3.3.2 資源是如何管理的

資源和插件是相互補充的,插件和資源都是平台的工具,區別在於,插件強調插件物理可插拔、路徑可擴展、插件項支持多種類型,但是其插件項的類型只能是攜帶信息比較少的類型,比如菜單。對於一些復雜的類型,比如工作區或者列表元數據,則需要強類型的結構來表達,這種情況插件表達則不太合適,資源就是解決這種問題的,而且資源還有自己的視角。Netsharp的平台工具中,大部分菜單都是使用資源進行管理的,可以說資源的概念比插件的概念要大。

 

Netsharp中有30種以上的資源類型,這些資源類型按照樹狀結構進行分類,資源的分類叫資源樹,樹上的每個節點叫資源節點。Netsharp中所有的資源類型的分類是統一的,即所有的資源分類都使用一個資源樹。資源節點在Netsharp中對應的實體是Netsharp.Core.ResourceNode。下圖是Netsharp的平台管理工具的面板,他可以通過工作區的主菜單”視圖/平台工具”打開,這些工具中大部分是以資源的方式來進行管理的。

 

以Netsharp部件工作區(PartWorkspace)為例,部件工作區是一種資源,他按照資源樹的方式進行管理,請參見下圖部件工作區的工具。

 

下圖是Netsharp的枚舉管理工具,枚舉是Netsharp的一種資源,他也按照資源樹的方式進行管理,請參見下圖:

 

1.3.3.3 資源是如何分類的

下圖是Netsharp資源節點的管理界面,所有的資源節點組成了一棵資源樹。

 

對於管理軟件來說,一般會進行如下分類

級次

一級

二級

三級

四級

五級

本文命名

產品線

子系統

模塊

領域對象

實體

ERP產品線

建築施工企業軟件產品

子系統一

-

-

-

子系統二

-

-

-

子系統三

-

-

-

...

-

-

-

ERP產品

供應鏈

采購

采購訂單

采購訂單頭

 

采購訂單行

 

結算明細

進貨單

-

采購發票

-

...

-

銷售

-

-

庫存

-

-

財務

現金

-

-

往來

-

-

出納

-

-

生產

-

-

-

分銷零售

-

-

-

....

-

-

-

 

上圖為稍微復雜一些的系統分級結構,簡單的系統可能只有第三、四、五級。第五級別的實體為研發人員視圖。客戶和銷售人員不會有此概念,或者概念比較模糊,即他們不會把實體作為獨立的概念環境進行思維。在命名上會有歧義的是第三級和第四級,即模塊和領域對象。“領域對象”是本文的一種叫法,目前還沒有找到更好的進行第三級和第四級進行區分的命名。使用“領域對象”的初衷是領域指的是軟件給客戶(某一種崗位在某一個業務場景)提供完整業務的一種最小的場景,如錄入一張新的采購訂單,在這個場景中,用戶打開采購訂單界面,可以做很多與采購訂單編輯相關的事情。(這個名稱感覺也不是很好,因為用戶很難理解)模塊可以簡單的理解為是一個部門級別的應用,或者為一個需要多個崗位來完成的場景,比如采購管理。

 

在Netsharp的資源節點對應的實體是Netsharp.Core.ResourceNode,ResourceNode有個屬性ResourceType,ResourceType是一個枚舉,有三個可選值:分類、插件、單據。ResourceType是資源節點的必輸字段。下面詳細介紹這三種資源節點類型。

1.插件

和第三級模塊對應,當資源節點類型為插件是,必須在資源節點上設置對應的插件。因為平台的資源是通過資源樹管理的,當插件進行導出操作時候,平台會根據插件對應的資源節點把下屬的所有資源進行導出,插件的安裝、卸載也是這種邏輯。

2.單據

和第四級(領域對象)對應,當資源節點是一個領域對象時,如銷售訂單、采購入庫單等,資源節點類型選擇單據。當資源節點為單據時,必須設置資源節點的EntityId。EntityId是Netsharp中常用的概念,他表示一個領域對象,技術上對應領域對象(或者叫實體)的Type.FullName,也可以理解為實體模型的類全名,參見下圖:

 

領域對象是實體的特例,當一個資源節點和一個實體對應時,類型都可以選擇單據。

3.分類

當資源節點類型不為插件和單據時,都可以選擇分類。

1.3.4  工作台

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

 

 

 

 

 

1.3.5  部件工作區

上文已經介紹了工作區(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

自定義

 

 

 

 

1.3.6  六駕馬車

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在界面端和服務端的兩個種:

一、客戶端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

 

 

二、服務端Action場景

例如,在訂單保存時服務方法中執行的邏輯,按照順序如下:

 

順序

功能

Action

說明

1

信用控制

 

 

2

可用量控制

 

 

3

最低售價控制

 

 

4

訂單基本校驗

 

 

5

訂單持久化到數據庫

 

 

6

生成收款單

 

 

7

生成出庫單

 

 

8

生成加工單

 

 

9

記往來賬

 

 

10

記可用量帳

 

 

11

更新客戶信用

 

 

12

更新最低售價

 

 

1.4     Netsharp組件清單

分類

組件

功能特征

客戶可見

工具支持

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查詢分析器

 

1.5     Netsharp發展路線圖

Netsharp路標規划分成五個階段,參見下圖,目前基本完成第二個階段,即平台產品化階段。

  

 

本文特別感謝東莞許勝平的建議和校對工作。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM