(高手请进)多层中,客户段如何捕捉到中间层的自定义异常(200分)

  • 主题发起人 主题发起人 MuMian
  • 开始时间 开始时间
M

MuMian

Unregistered / Unconfirmed
GUEST, unregistred user!
我用的是D7 Com+ SQLServer, 业务逻辑全部封装在Com+中,
程序在处理一些业务逻辑时,部分业务逻辑比较复杂,需要同客户端交互。
如某业务逻辑A,Com+先要进行多种判断,
假如出现情况1,想向客户端返回一个数据集(Data),由客户端对Data进行处理,处理之后再回到Com+进行下一步
假如出现情况2,想向客户端返回其他参数(可能是多个参数),
其他情况.....(总之返回的结果并不确定)
同时业务逻辑A被客户端在不同的地方用到,也就是说,该Com+对象被客户端在不同的地方调用,而且调用方式可能不一样,
也有可能该Com+对象会被另一个Com+对象调用。
那么客户端该如何响应Com+返回的结果呢(因为Com+返回的结果不确定)
我想通过自定义异常来处理,根据Com+的返回结果,定义若干从EOleException继承下来的子类,如EOleException1, EOleException2... 各异常类的属性用来存放一些返回结果
一旦Com+判断到某种情况,则raise 对应的异常,然后客户端捕捉到该异常,进行响应的交互处理
但是我在程序里,客户端捕捉到的异常只是EOleException类,而非其子类,也捕捉不到存放返回值的属性
请高手把脉!!!
下附例子
//从EOleException继承的子类异常
type
EBillActionError = class(EOleException)
private
FErrorData: OleVariant;
public
constructor Create(const AErrorMessage: string;
AErrorCode: integer;
AErroeData: OleVariant);
property ErrorData: OleVariant read FErrorData write FErrorData;
end;


constructor EBillActionError.Create(const AErrorMessage: string;
AErrorCode: integer;
AErroeData: OleVariant);
begin
inherited Create(AErrorMessage, AErrorCode, '', '', 0);
FErrorData := AErroeData;
end;


//Com+判断到某种情况,触发改该异常
procedure TSheetDBAccessObj.UpdateInvt;
var iErrorCode: integer;
//错误号
aData: OleVariant;
begin
//.....程度代码

//....
if 情况1 then
begin

aData :=... //获取返回的结果值
raise EBillActionError.Create('异常信息', iErrorCode, aData);
end
if 情况2 then
begin

//类似处理,Raise 其他异常

end
end;

//客户端
procedure 调用该Com+
var cds: TClientDataSet;
begin
try
except
on E:EBillActionErrordo
begin
cds := E.FErrorData;
//...
end;

on E:其他异常do
begin

//...
end;

//....
end

end;
 
客户端 接到的错误 好象只能是文字
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部