Re-raise/-throw 一个错误
Re-raise/-throw an error
我想 "re-raise" 在 NO-ERROR
语句之后出现错误,如下所示:
FIND FIRST table
WHERE table.ID = myID
EXCLUSIVE-LOCK NO-WAIT NO-ERROR.
IF (NOT AVAILABLE temp AND LOCKED temp) THEN
/* Here I want to raise/throw the last error ("Raise ERROR:STATUS") */
IF (NOT AVAILABLE table) THEN
CREATE table.
Progress中有这样的说法吗?
在 OpenEdge 10.1C 及更高版本中,您可以抛出错误。要重新抛出错误,您必须先捕获它。
所以,
IF (NOT AVAILABLE temp AND LOCKED temp) THEN
UNDO, THROW NEW Progress.Lang.AppError
(ERROR-STATUS:GET-MESSAGE (1),
ERROR-STATUS:GET-MESSAGE-NUM (1)) .
或者您首先发现了错误:
DO ON ERROR UNDO, THROW: /* ABL try */
FIND FIRST table
WHERE table.ID = myID
EXCLUSIVE-LOCK NO-WAIT .
CATCH err AS Progress.Lang.SysError:
IF LOCKED temp THEN
UNDO, THROW err . /* re-THROW */
END CATCH .
END . /* ABL try block */
IF (NOT AVAILABLE table) THEN
CREATE table.
迈克的回答是正确的。但只是为了提供更早版本的解决方案,因为这是永久记录:以前要捕获可用,正确的方法是 RETURN 错误到调用程序。再次使用 NO-ERROR 之前,ERROR-STATUS 不会被清除,您仍然可以查询可用的错误消息。
我想 "re-raise" 在 NO-ERROR
语句之后出现错误,如下所示:
FIND FIRST table
WHERE table.ID = myID
EXCLUSIVE-LOCK NO-WAIT NO-ERROR.
IF (NOT AVAILABLE temp AND LOCKED temp) THEN
/* Here I want to raise/throw the last error ("Raise ERROR:STATUS") */
IF (NOT AVAILABLE table) THEN
CREATE table.
Progress中有这样的说法吗?
在 OpenEdge 10.1C 及更高版本中,您可以抛出错误。要重新抛出错误,您必须先捕获它。
所以,
IF (NOT AVAILABLE temp AND LOCKED temp) THEN
UNDO, THROW NEW Progress.Lang.AppError
(ERROR-STATUS:GET-MESSAGE (1),
ERROR-STATUS:GET-MESSAGE-NUM (1)) .
或者您首先发现了错误:
DO ON ERROR UNDO, THROW: /* ABL try */
FIND FIRST table
WHERE table.ID = myID
EXCLUSIVE-LOCK NO-WAIT .
CATCH err AS Progress.Lang.SysError:
IF LOCKED temp THEN
UNDO, THROW err . /* re-THROW */
END CATCH .
END . /* ABL try block */
IF (NOT AVAILABLE table) THEN
CREATE table.
迈克的回答是正确的。但只是为了提供更早版本的解决方案,因为这是永久记录:以前要捕获可用,正确的方法是 RETURN 错误到调用程序。再次使用 NO-ERROR 之前,ERROR-STATUS 不会被清除,您仍然可以查询可用的错误消息。