gpt4 book ai didi

ibm-midrange - 如何处理 RPGLE 中的错误?

转载 作者:行者123 更新时间:2023-12-05 09:26:27 24 4
gpt4 key购买 nike

我正在尝试想出一个好的方法来处理带有多个子过程的 RPGLE 程序中的错误。

dcl-proc getWorkKeyString;

dcl-pi *n ind ;
workKeyArray likeDS(parentWorkKeyArray) dim(500);
workKeyString like(ISWCDUPDS.IWKEY_ISWC);
end-pi;

index = 1;

dow (index < 500);

monitor;
if ( workKeyArray(index).workKey <> 0);

if (index > 1);
workKeyString = %Trim(workKeyString) + '|';
endif;
workKeyString = %Trim(workKeyString) + %char(workKeyArray(index).workKey);

endif;
index = index + 1;
on-error;
return cFalse;
endmon;

enddo;

return cTrue;
end-proc;

如您所见,我已将 do while 主体包含在监视器组中。如果出现错误,则子过程返回 false 以指示错误。但如果这看起来是个好方法,请告诉我。

最佳答案

IBM i 的一大优点是它通常基于异常而不是基于返回码。

通过监控所有异常并返回一个指示器,您正在创建一个基于返回码的系统。

对于基于返回码的系统,您必须在每个过程中编写这样的代码:

rc = someProc();
if rc > 0
... return rc
else
... continue with the work
endif
rc = someOtherproc();
if rc > 0
... return error
else
... continue with the work
endif

很容易忘记检查返回码:

rc = someProc();
rc = someOtherproc(); // What if someProc failed?!

甚至不用费心获取返回码也很容易:

someProc();
someOtherproc(); // What if someProc failed?!

对于基于异常的系统,如果我有某种方法来处理错误:

monitor;
someProc();
someOtherproc();
on-error;
... handle the error
... I could even use SND-MSG *ESCAPE to raise a new exception
after I handle the error
endmon;

如果我想让我的调用者(或它的调用者)处理异常,我可以让我的过程在获取异常时结束,并让异常渗透:

someProc();
someOtherproc();

关于ibm-midrange - 如何处理 RPGLE 中的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73953987/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com