DA26 –
升级到
Data Abstract 'Vinci'
的
Delphi
版本
本文讨论从
Data Abstract 3.0
到
Data Abstract 5.0 ('Vinci') for
Delphi
主要的库的变化
.
其中说明了如果将你的项目从版本
3
或
版本
4
迁移到新版本并说明了迁移的原因及优势
.
重点
:
主要的转换发生在
3.0
版到
4.0
版
.
从
4.0
到
Vinci
的转换是可选的
,
涉及到使用新的
TDAMemTable
和
Bin2DataStreamer
功能
.
提供的
DAConverter
工具可以自动转换
3.0
和
4.0
项目
.
如果你没有
3.0
项目
,
你可以跳过本文的绝大部分
,
直接查看
Using the DAConverter Tool.
升级服务端应用程序
Data Abstract 4.0
的
Delphi
版本已经为服务端应用程序提供了两种模式
.
一方面
,
提供了在
3.0
已经接触过的服务接口
,
从而允许你做很少的修改就可以重新生成服务端应用程序
.
另外
, Data Abstract 4.0
提供了新的服务接口
,
与
.NET
版本
共享
,
改进数据存取并使跨平台开发客户端及服务端解决方案更容易
.
默认
,
所有通过向导建立的新
Data Abstract
项目都使用这个新的
v4.0
接口
,
但是
"Data Abstract v3.0 Legacy Application"
模板使你可以基于
V3.0
接口创建一个新的项目
.
新的
Data Abstract 4.0
或
'Vinci'
客户端可以存取
v3.0
以及
v4.0
的服务端
,
但是使用
V3.0
接口的客户端不如使用
V4.0
的容易维护
.
重新生成已存在的
v3.0
服务
在
Data Abstract 'Vinci'
中重新生成已存在的
V3.0
服务主要就是打开项目中所有的窗体和数据模块向其中的
User
子句中加入一组单元引用
.
一些类已经移到独立的单元中
,
所以当你遇到特定类型无法识别的错误
,
如
data adapters*
或
Deltas: uDADelta, uDADataStreamer,
你可能需要向
Uses
子句中加入这些单元的引用
.
同时
, DataAbstract_Intf
单元重命名为
DataAbstract3_Intf.
将你已存在的服务端应用程序转换到
v4.0
接口
这里
, 4.0
版接口是指
4.0
版本和
Vinci
版本
,
因为它们相互兼容
.
将你现在的服务转换为
4.0
版接口意味着要修改数据服务或服务使之继承于新的
DataAbstractService
基类
(
见
DataAbstractService_Impl.pas
),
其在
DataAbstract4.RODL
文件中定义的接口可同时应用在
Delphi
和
.NET
版本
.
将服务升级到
4.0
版本接口有如下优点
:
- 新的接口比3.0接口提供了更多改进的数据存取方法. 通常,在一个服务调用中获取或更新多表数据将更容易.
- 使用4.0接口实现客户端将更容易,客户端组件(TDADataTable 和新的 TDARemoteDataAdapter) 在拖放到窗体后就可以自动与新接口通讯.
- 由于新的接口共享给了Data Abstract的.NET版本, .NET 和 Mono客户端可以在不需要自定义动态方法绑定的情况下直接与4.0版本的服务通讯.同时可以应用在ASP.NET和精简框架集客户端.
- 很多新的高级数据存取特性,如Unions,只能在4.0版本的服务中使用. (更多详细信息见 DA30).
作为对新的
4.0
服务接口变更的唯一影响
,
现存的
Data Abstract 3.0
客户端不能直接同
4.0
版服务端通讯
,
必须加以改造
.
改造服务端需要的工作当然与你的服务应用程序自定义代码和使用
Data Abstract
的方式有关
.
下面的步骤基于标准的无代码服务应用程序
.
使用新的
4.0 RODL
第一步
,
需要使服务端应用程序使用新的
RODL
库定义新风格的服务接口和相关类
.
在
Delphi IDE
中激活服务端应用程序并在主菜单中选择
RemObjects|Service Builder
启动
Service Builder.
库打开后
,
从可用库列表中删除原来的
DataAbstract.RODL
,
并点击
Edit | Use Existing RODL
菜单使用新的
Data Abstract 4.0
替换原来的库
.
下一步
,
查找
RODL
文件中每个数据服务
(
本例中只用一个服务
,
但是更复杂的通用服务可能会将数据存取分为多个服务
)
并将其父类由
DARemoteService
改为
DataAbstractService
..
完成之后关闭
Service Builder
返回
Delphi IDE,
然后在主菜单中选择
RemObjects | Regenerate Units from RODL
.
更新数据服务
库中定义的每个数据服务
,
都会在项目中有一个命名为
<ServiceName>_Impl.pas
的实现源文件
.
对每个需要更新为
4.0
接口的服务做如下步骤
.
打开服务单元做如下修改
:
- 在Uses 子句中将DataAbstract_Intf (或 DataAbstract3_Intf) 替换为DataAbstract4_Intf单元.
- 将 DARemoteService_Impl 替换为 DataAbstractService_Impl.
- 将其父类由TDARemoteService替换为TDataAbstractService.
完成后保持并关闭源文件
,
在重新打开
.
IDE
试图打开服务设计器时提示一些属性丢失的警告
.
这些原来
TDARemoteService
类中的属性和事件已经不存在
(
或被重命名
)
于
TDataAbstractService
.
对每个警告选择
Ignore
(
忽略
),
直到服务模块设计器弹出
.
最后
,
可能需要在新的
DataAbstractService
子类中
调整更新一些属性
,
或重新指定事件处理
.
如果你对原来服务模块不做任何变动
,
那么就只需要将其新的属性
DataStreamer
指定为
Data Adapter
组件
.
如果不确定
,
那么就需要去检查属性列表保证这些属性都被设置好了
.
好了
,
现在服务端应用程序已经改造为新的
4.0
接口并可以向新的
Data Abstract 4.0
Delphi
或
.NET
客户端提供服务
.
如果你的客户端还是
Data Abstract 3.0
应用程序
,
确保同时做一系列改进使之可与新的服务通讯
.
更新客户端应用程序
Data Abstract 4.0
的
Delphi
版本对客户端组件架构做出了一些基本的调整
,
通过
DataTable
关联的新的
Remote Data Adapter
组件分离动态方法绑定及其服务调用的逻辑
.
.NET
版本的用户可以认识到
,
通过这种变更
, Data Abstract
的
Delphi
版更像平台上提供的组件集
,
然而在架构级别上修正平台只是这种变更的优点之一
.
通过新的
TDARemoteDataAdapter
组件封装数据获取
,
提供了一个在一个地方去配置多个或所有
DataTable
的服务存取和动态方法绑定的解决方案
.
在
Data Abstract 3.0,
对每个
DataTable
都需要运行向导去适当的连接到服务
,
现在不需要这样了
.
手动转换窗体和数据模块
将窗体和数据模块中包含的
Data Abstract
组件转换为
4.0
版的过程很直接
,
可通过几个简单的步骤完成
.
然而
,
虽然简单却很繁琐
,
我们提供了一个
DAConverter
工具简化了这个过程
.
如果你希望自己实现并想了解内部原理请继续阅读本节
;
否则直接到
Using the DAConverter Tool.
首先
,
在
IDE
中打开所有的数据模块
.
如服务端转换一样
,
这里也会出现一些
DataTable
属性被移除的警告
.
特别是一些数据存取调用和对
DataAdaper
及远程服务的直接引用
;
一些被移除或重命名的事件也需要引起重视
.
对所有的警告选择
Ignore
(
忽略
)
直到打开窗体或数据模块
.
下一步
,
向数据模块中拖放一个新的
TDARemoteDataAdapter
组件并连接到
DataTable
上
.
设置这种连接的一种方式是手动设置每个
DataTable
的
RemoteDataDapter
属性
.
另一种方式是右击
TDARemoteDataAdapter,
在上下文菜单中选择
Hook up Data Tables
然后选择你希望连接的
DataTable.
最后
,
将
Remote Data Adapter
连接到远程服务和
Data Streamer*
组件
.
动态方法绑定
第三步
,
需要配置到服务的动态方法绑定
.
如果服务是
4.0
风格的
,
这些都会自动处理不需要手动设置
.
如果你希望去连接
3.0
风格的服务
,
右击
Remote Data Adapter
在上下文菜单中选择
Reset Calls to Default (Legacy v3.0)
.
自动将
DMB
配置为老式接口
.
(
您会发现上下文菜单中还提供了一个
Reset Calls to Default
的菜单项可以在需要的时候点击一下鼠标重置
DMB
为
4.0
默认的设置
).
当然你也可以手动指定自定义方法去匹配服务可能用到的自定义服务接口
.
对象观察器中的动态方法绑定目录中包含四个分隔的调用属性
,
可以用来指定方法名称和参数列表并挑选出默认功能的参数如表名
,
输入
/
输出参数等
.
请在在线帮助中订阅
DMB
专题查看更多使用自定义动态方法绑定的详细信息
.
结束语
最后
,
你要确定所有的
DataTable
的
LogicalName
属性都被设置为其所代表的表名
.
在
3.0
中这个属性不是必须的
,
因为表名经常经过
DMB
的表名参数进行配置
.
由于现在方法调用集中于
Remote Data Adapter,
每个表都要维护其自己的
LogicalName
和
OutgoingTableNamesParameter
数据调用的属性
,
用以确定如何向服务端传输名称
.
其他从
v3.0
到
4.0
值得注意的变动
其他变动
,
你可能注意到我们将
Data Adapter
命名为
Data Streamer.
在
Data Abstract 4.0
中提供了两个
Data Streamer
分别是
TDABinDataStreamer (
二进制同
.NET
兼容
)
和
TDAXmlDataStreamer.
为了向后兼容
,
两个使用原来名称的子类
(TDABinDataAdapter
和
TDAXmlAdapter)
仍然被注册在
IDE
的
Data Abstract (Legacy)
组件面板中
.
这样基于
3.0
组件的窗体还能打开
,
但是在开发新应用时我们强烈推荐使用新的组件
,
在应用程序中拖放新的
Streamer.
'Vinci'
版本
Bin2DataStreamer
格式与新的
TDAMemDataTable
同时推出
,
这两个卓越的对象提供了无与伦比的数据获取效率
,
尤其是在获取大数据集时
. TDAMemDataTable
能够直接使用从
Bin2DataStreamer
获取的数据
,
而不需要将数据一条一条地处理加载为内部数据存储
,
瞬间完成
Open()
操作
.
使用
DAConverter
工具
用户会使用很多自定义的动态方法绑定
,
使得转换非常繁琐
,
因此我们提供了一个小工具帮助处理这个过程
: DAConverter.exe (
在产品发布是装载
: C:/Program Files/RemObjects Software/Data Abstract (Common)/Bin).
DAConverter.exe
是一个命令行工具
,
可以更新基于
3.0
的
.Pas/.dfm
文件生成
Remote Data Adapters
并适当的转变动态方法绑定设置
.
在命令行中使用要更新的
.pas
文件命启动这个工具
,
或在
Windows
资源管理器中简单的拖动一个文件到
.Exe
上
.
For 'Vinci'
, DAConverter
已经扩展支持转换新的
Bin2DataStreamer
和
TDAMemDataTable
组件
.
重点
:
为安全起见
,
推荐在应用转换器前备份项目文件
.
同时
,
你可能希望查看发生的变化
(
见下面的
/wait
开关
).
我们相信产品中包括很多无法预测的问题
,
我们无法精确的估计每个用户如何使用我们的产品
.
如果你对这个工具有什么问题或建议请写信到
[email protected].
语法
:
DAConverter [/wait] [/moveevents] [/usebin2] [/usememtable] /folder:<folder>
DAConverter [/wait] [/moveevents] [/usebin2] [/usememtable] <file1> [<file2> [...]]
where:
/wait
|
:
|
在点击回车键前控制台窗体一直打开
|
/moveevents
|
:
|
将每个
DataTable
的事件转移到相关的
Remote Data Adapter
上
|
/usebin2
|
:
|
使用
TDABin2DataStreamers
去替换
TDABinAdapter
和
TDABinDataStreamer
组件
.
(new for 'Vinci')
|
/usememtable
|
:
|
使用
TDAMemDataTables
去替换
TDACDSDataTable
和
TDAADODataTable
组件
.
(new for 'Vinci')
|
注意
:
1) TDAMemDataTable
组件的最初版本不支持索引和筛选
. DAConverter
将检查需要的工具以及是否可以转换
,
不能转换将记录错误信息
(
这种情况下推荐使用
/wait
选项获取警告信息
).
对索引和筛选的支持很受重视将很快推出
.
2) TDABin2DataStreamer is able to be more stringent when checking and storing field datatypes and sizes, so it is possible that you may need to refresh the client-side schema to match the server (select the datatable and select 'Retrieve Datatable Schema' from its context menu).
总结
总之
,
从本文可见
, Data Abstract 4.0
引入了一些基本的组件架构库的变化
,
将你现有的应用程序转换到新版本是一个很直接的过程
.
除了对
Data Abstract
的
.NET
版的两种方式兼容性
,
还有广泛增强易用的库
,
改进的设计时和开发体验和更快的数据存取
.
本文也说明了如何使用
DAConverter
工具
.
最后
,
对于
'Vinci'
,
讨论了新的
Bin2DataStreamer
和
TDAMemDataTable
组件
,
连同拓展的
DAConverter
工具提供了简单的转换
.