说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

Delphi:MIDAS中动态强制约束编程

HTML文档下载 WORD文档下载 PDF文档下载
Delphi:MIDAS中动态强制约束编程

一个用来区分 MIDAS 与其他分布式数据库解决方案的特征就是,MIDAS 支持动态数据约束(constraints)功能。这些动态约束可以控制由 AppServer 到瘦客户端的分布式数据的外观、业务确认规则、是否显示等等功能。作者(John Kaster)认为这是分布式数据库需具备的一个非常重要的特征。

MIDAS 数据包(Data Packets)概述

先介绍一下MIDAS 数据包(Data Packets)格式的详细特征,MIDAS 数据包(Data Packets)是一个独立于语言和中立传输(transport-neutral)的二进制流格式数据,他包括元数据(metadata)

约束(constraints)

数据(data)

和deltas。

元数据是用来描述按照 APPSERVER 来分布的数据集。 MIDAS 2,3 支持嵌套数据集,因此单个数据包能够包含一个乃至于多个数据集的信息。约束是用来校验和显示数据集中的每个栏位的相关业务规则。Data 是数据集的实际数据栏位和记录数。Deltas 记录客户端的数据修改的 Log ,且是属于自动维护和传送到 AppServer中的。

MIDAS 数据栏位约束

数据栏位约束是在 AppServer 与客户程序之间传播,可以快速修改业务规则,非常简便的发布新的客户程序,基于服务器端的业务规则,可以自动强制应用于客户程序,从而增强了分布式应用系统的生存周期以及系统的可维护性。

如果没有充分的理由,应在客户端强迫执行基于服务器端的业务规则,这样将会提供应用系统的可靠性和数据的准确性,因为有问题的数据包会立即被客户程序检测到,所以应该培养正确的使用数据值和减少无效数据的网络回路的习惯。简单一点说,数据约束能让你快速构建分布式系统,及时响应相关修改要求和提高系统的可靠性

MIDAS 2、3 数据包能够自动的由 AppServer 到客户端传递以下数据栏位属性:

Constraint Property Description

----------------------------------------------------------------------------------------------

ConstraintErrorMessage Message to display if data for the field if not valid.

Example: CustNo cannot be blank

CustomConstraint Constraints to place on the validation of the field. Expressions

can be used for this constraint.

Example: CustNo IS NOT NULL

DisplayFormat Controls formatting of the field for display

DisplayLabel Used as the data field’s default column heading.

Example: Customer #

EditMask Used for customizing data entry for the field.

Example: 0000

MaxValue The maximum value of a numeric field

MinValue The minimum value of a numeric field

Visible A boolean value indicating whether the field should be visible in

a grid by default

实现约束编辑服务器(Constraint Editor Server)

只要客户连接到 MIDAS Server ,相关RDM(remote data module)就会自动创建并提供给客户来访问Server约束编辑服务器(ConstraintSvr.exe)在第一次使用这些RDM时会去获取 provider 的列表和包含在这些provider 中栏位约束。ConstraintSvr 也同样为编辑每个provider中的栏位约束提供一个用户接口和为每个应用实例保存更改结果。

在更改结果保存后(在系统运行期),客户程序只需要简单的重新连接的 AppServer,获取一个新的数据包,此包中包含新的业务约束。

变量角色(A Cast of Variants)

开始建立一个能够提供运行期编辑数据约束的应用程序,只需要做一点点代码定制。Screen 对象有一个属性可以列出一个应用程序中的所有数据模块(data modules),同样我们能通过检查此属性来建立包含在数据模块中的Provider 的列表。此 Provider 名列表是通过一个变量类型从数据模块中输出,同样也需要通过适当的Delphi 类型来接收数据模块的 Provider 命名。代码如下:

{ Copyright (c) 1999 - 2000 by John Kaster

Dan Miser and Louis Kleiman }

procedure GetProviderList( ProviderList : TStrings );

var

ProviderNames : OLEVariant;

I : Integer;

DataSet : TDataSet;

GenObject : TComponent;

begin

if (Screen.DataModuleCount = 0) then

Raise Exception.Create( ’No data modules are active.’ );

ProviderList.Clear;

{ Get the list of all providers for the first data module.

All instances of the data module are probably the same. }

ProviderNames := IConstraints(TConstraints(Screen.DataModules[0])).

AS_GetProviderNames;

for I := VarArrayLowBound(ProviderNames

1) to

VarArrayHighBound(ProviderNames

1) do

begin

{ Retrieve the component matching the provider name }

GenObject := Screen.DataModules[0].FindComponent(ProviderNames[I]);

if (GenObject is TDataSetProvider) then

DataSet := TDataSetProvider(Screen.DataModules[0].

FindComponent(ProviderNames[I])).DataSet

else if (GenObject is TDBDataSet) then

DataSet := TDataSet(Screen.DataModules[0].

FindComponent(ProviderNames[I]))

else

DataSet := nil;

{ Add it to the list of providers

attaching the Dataset if assigned }

ProviderList.AddObject(ProviderNames[I]

DataSet);

end; { for }

end; { GetProviderList() }

接收约束内容

现在从RDM的实例获取 provider 列表,其他的都是一些传统的 Delphi 代码。通过一个列表框元件来显示Provider

通过另一个列表框元件来显示每个提供者的栏位约束值。 Provider列表框元件命名为lbProviders。代码如下:

procedure TFormConstraintsEditor.lbProvidersClick(Sender: TObject);

var

DataSet : TDataSet;

I : Integer;

SaveActive : Boolean;

begin

lbFields.Clear;

DataSet := TDataSet(lbProviders.Items.Objects[lbProviders.ItemIndex]);

if Assigned(DataSet) then

begin

SaveActive := DataSet.Active;

DataSet.Open;

try

for I := 0 to DataSet.FieldCount - 1 do

lbFields.Items.AddObject(DataSet.Fields[I].FieldName

DataSet.Fields[I]);

finally

DataSet.Active := SaveActive;

end; { try...finally }

end; { if }

end;

Android控件开发之ToggleButton原理 Android标题栏TitleBar全攻略 AsyncTask实例代码演示Android异步任务 重绘TextView类演示Android的Handler Android的SoundPool类使用与利弊 //请问,最后2句,"%0*ld"和"%s.%.*s"怎么理解? interrupt source(中断源)的含义? 在 datagrid 中如何删除当前记录? 请问在java中如何实现浮动菜单?还请各位多帮忙 如何从数据窗口中取出多条记录存到另一个库表里 直接用Socket传送文件还是用其它FTP控件 用telnet登录到linux上去,但是在用vi时会出现问题? 报表问题!在线等待! ginger和cxx1997请进。 求桃花源记的练习题及答案,谢谢.我看了你回答的邹忌 《桃花源记》和《小石潭记》的原文 找一本男主角穿越成皇帝的种马小说,穿越到只有女人的 解放后中国的变化是作手抄报的 中国社会的变化 彩虹岛可以在空中发技能吗?我在视频上总看到有人挑起 解放后的中国的变化0 999 跪求“历史的选择”征文一篇,500~600字左右 诗经采薇全文 近3成日本大学毕业生3年内离职 疑被小狗被饿三周吃伞充饥 其主人不愿救治研究证明蝙蝠系非典传播源 病毒可由动西班牙首相关注美监听行动 称将听取情田中角荣之女真纪子拟参加下一届日本众“酷虫学校”引发江门校园昆虫科普热潮上海孤寡老人及特困家庭已故人员可享免湖南城乡妇女积极参政议政 彰显“半边成都军区昆明总医院无偿救治一流浪汉 宁波欲借力新材料高地 分羹航天技术产凤武传奇眼泛桃花邪善道巅峰的勇者叩仙途金河寺旅游金河口旅游安徽省博物馆新馆旅游小悬空寺旅游帽儿胡同旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘