DA26 – 升级到Data Abstract 'Vinci' 的Delphi版本

 
DA26 – 升级到 Data Abstract 'Vinci' Delphi 版本DA26 – 升级到Data Abstract 'Vinci' 的Delphi版本_第1张图片
本文讨论从 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 接口创建一个新的项目 .
DA26 – 升级到Data Abstract 'Vinci' 的Delphi版本_第2张图片
新的 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 替换原来的库 .
DA26 – 升级到Data Abstract 'Vinci' 的Delphi版本_第3张图片
下一步 , 查找 RODL 文件中每个数据服务 ( 本例中只用一个服务 , 但是更复杂的通用服务可能会将数据存取分为多个服务 ) 并将其父类由 DARemoteService 改为 DataAbstractService ..
DA26 – 升级到Data Abstract 'Vinci' 的Delphi版本_第4张图片
完成之后关闭 Service Builder 返回 Delphi IDE, 然后在主菜单中选择 RemObjects | Regenerate Units from RODL .
DA26 – 升级到Data Abstract 'Vinci' 的Delphi版本_第5张图片
更新数据服务
库中定义的每个数据服务 , 都会在项目中有一个命名为 <ServiceName>_Impl.pas 的实现源文件 . 对每个需要更新为 4.0 接口的服务做如下步骤 .
打开服务单元做如下修改 :
  • Uses 子句中将DataAbstract_Intf ( DataAbstract3_Intf) 替换为DataAbstract4_Intf单元.
  • DARemoteService_Impl 替换为 DataAbstractService_Impl.
  • 将其父类由TDARemoteService替换为TDataAbstractService.
完成后保持并关闭源文件 , 在重新打开 .
IDE 试图打开服务设计器时提示一些属性丢失的警告 . 这些原来 TDARemoteService 类中的属性和事件已经不存在 ( 或被重命名 ) TDataAbstractService . 对每个警告选择 Ignore ( 忽略 ), 直到服务模块设计器弹出 .
DA26 – 升级到Data Abstract 'Vinci' 的Delphi版本_第6张图片
最后 , 可能需要在新的 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.
DA26 – 升级到Data Abstract 'Vinci' 的Delphi版本_第7张图片
最后 , Remote Data Adapter 连接到远程服务和 Data Streamer* 组件 .
DA26 – 升级到Data Abstract 'Vinci' 的Delphi版本_第8张图片
动态方法绑定
第三步 , 需要配置到服务的动态方法绑定 . 如果服务是 4.0 风格的 , 这些都会自动处理不需要手动设置 . 如果你希望去连接 3.0 风格的服务 , 右击 Remote Data Adapter 在上下文菜单中选择 Reset Calls to Default (Legacy v3.0) . 自动将 DMB 配置为老式接口 .
DA26 – 升级到Data Abstract 'Vinci' 的Delphi版本_第9张图片
( 您会发现上下文菜单中还提供了一个 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 工具提供了简单的转换 .
 

你可能感兴趣的:(.net,service,ide,工具,Delphi,通讯)