【发布时间】:2017-11-26 15:10:00
【问题描述】:
我有以下代码(为了便于说明,已简化)。我在 proc1、proc2 和 proc3 的不同数据库表中创建记录。我想要实现的是......如果我在任何时候循环遍历临时表时遇到错误(即使在我已经创建了一堆数据库记录之后),我想回滚所有内容,因此不会创建任何记录。如果 proc1、proc2 和 proc3 没有问题,它会捕获错误,但我无法弄清楚如何将这些错误传递给主处理块,以便它理解并回滚所有内容。换句话说,消息('error @ main trans block')永远不会弹出,因此已经创建的记录保留在数据库中。事实上,没有任何东西可以回滚。
DO TRANSACTION ON ERROR UNDO, THROW:
FOR EACH tt1:
RUN proc1.
FOR EACH tt2 WHERE tt2.field1 EQ tt1.field1:
RUN proc2.
FOR EACH tt3 WHERE tt3.field2 EQ tt2.field2:
RUN proc3.
END.
END.
END.
CATCH e AS PROGRESS.Lang.AppERROR:
MESSAGE 'error @ main trans block'
VIEW-AS ALERT-BOX INFO BUTTONS OK.
END CATCH.
END.
PROCEDURE proc1.
DO TRANSACTION ON ERROR UNDO, THROW:
/* creating some DB records */
CATCH e AS PROGRESS.Lang.ERROR:
RETURN ERROR 'Proc1 ' + e:getmessage(1).
END CATCH.
END.
END PROCEDURE.
PROCEDURE proc2.
DO TRANSACTION ON ERROR UNDO, THROW:
/* creating some DB records */
CATCH e AS PROGRESS.Lang.ERROR:
RETURN ERROR 'Proc2 ' + e:getmessage(1).
END CATCH.
END.
END PROCEDURE.
PROCEDURE proc3.
DO TRANSACTION ON ERROR UNDO, THROW:
/* creating some DB records */
CATCH e AS PROGRESS.Lang.ERROR:
RETURN ERROR 'Proc3 ' + e:getmessage(1).
END CATCH.
END.
END PROCEDURE.
TIA
【问题讨论】:
标签: openedge progress-4gl