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;
程序在处理一些业务逻辑时,部分业务逻辑比较复杂,需要同客户端交互。
如某业务逻辑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;