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]);

点击复制链接 与好友分享!回本站首页
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力
上一篇:将JPG格式图片保存到ACCESS数据表中
下一篇:触发器设计技巧与实例
相关文章
图文推荐

MIDAS中动态强制约束编程
delphi 7 连接 MySql
MIDAS中动态强制约束编程
Delphi函数参数中的陷
MIDAS中动态强制约束编程
Delphi图像处理 --
Delphi 应用 openm

MIDAS中动态强制约束编程

排行
热门
26 | 用Delphi编写U盘整盘数据清除程序
21 | Delphi中易混淆的概念 Owner, Paren
20 | Delphi XE5教程3:实例程序
20 | Delphi 7 控件安装
18 | jpeg图片压缩
17 | Delphi 设置代理服务
17 | Delphi Fastreport报表
15 | Delphi结束指定进程EndProcess
delphi的取整函数round、trunc、ceil和
Delphi安装/卸载OCX控件的方法
Delphi 日期时间函数详解
Assertion failure: "(!"SetThreadC
Runtime error 216 at xxx 故障解
delphi内存泄露查找工具之MemProof教程
Delphi多线程及消息发送传递结构体参数
Delphi 判断一个字符串是否为数字
文章
下载
读书
· Win2000下关闭无用端口
· 禁止非法用户登录综合设置 [win9x篇]
· 关上可恶的后门——消除NetBIOS隐患
· 网络入侵检测系统
· 潜伏在Windows默认设置中的陷井
· 调制解调器的不安全
· 构建Windows 2000服务器的安全防护林
· SQL Server 2000的安全配置
· Windows优化大师注册机源码
· Process Viewer 汉化版
· Aspcode动画教程
· WIN 2000服务器防止ICMP数据包攻击教程
· 实现网络隐身的简单方法
· 手工进行克隆帐号
· 用W32DASM破解网页合并器的密码
· 注册表操作动画教程
· 黑客攻防技术宝典:Web实战篇(第2版)
· 超级网管员——网络安全
· 代码大全(第二版)
· 软件之道:软件开发争议问题剖析
· CSS插件工具箱
· CSS入门经典(第3版)
· C#并行编程高级教程:精通.NET 4 Pa
· CMMI+敏捷整合开发
分类:默认分类 时间:2015-03-12 人气:1
本文关键词:
分享到:

相关文章

Copyright (C) quwantang.com, All Rights Reserved.

趣玩堂 版权所有 京ICP备15002868号

processed in 0.061 (s). 10 q(s)