事务和函数
Transaction and functions
我们在单个 .p 文件中使用函数,如下所示:
myTest.p
BLOCK-LEVEL ON ERROR UNDO, THROW.
FUNCTION secondFunc RETURNS LOG ():
UNDO, THROW NEW Progress.Lang.AppError("ERROR HAPPENED, UNDO ALL!").
END FUNCTION.
FUNCTION firstFunc RETURNS LOG ():
secondFunc().
END FUNCTION.
FUNCTION starter RETURNS LOG ():
/* start transaction */
DO TRANSACTION:
firstFunc().
END.
END FUNCTION.
/* start execution of the function tree */
starter().
CATCH err AS Progress.Lang.Error:
RUN WRITE_log(err:GetMessage(1)).
MESSAGE err:GetMessage(1) VIEW-AS ALERT-BOX.
UNDO, RETURN ERROR.
END.
根据此代码,Transaction
撤消在 starter()
函数中完成的所有更改吗?或者我们是否需要将某种句柄传递给 Transaction
中的所有函数,以便它可以是 "undone"?
如果 "outer" 事务回滚,则所有子事务,包括被调用代码中的子事务,也将回滚。
我们在单个 .p 文件中使用函数,如下所示:
myTest.p
BLOCK-LEVEL ON ERROR UNDO, THROW.
FUNCTION secondFunc RETURNS LOG ():
UNDO, THROW NEW Progress.Lang.AppError("ERROR HAPPENED, UNDO ALL!").
END FUNCTION.
FUNCTION firstFunc RETURNS LOG ():
secondFunc().
END FUNCTION.
FUNCTION starter RETURNS LOG ():
/* start transaction */
DO TRANSACTION:
firstFunc().
END.
END FUNCTION.
/* start execution of the function tree */
starter().
CATCH err AS Progress.Lang.Error:
RUN WRITE_log(err:GetMessage(1)).
MESSAGE err:GetMessage(1) VIEW-AS ALERT-BOX.
UNDO, RETURN ERROR.
END.
根据此代码,Transaction
撤消在 starter()
函数中完成的所有更改吗?或者我们是否需要将某种句柄传递给 Transaction
中的所有函数,以便它可以是 "undone"?
如果 "outer" 事务回滚,则所有子事务,包括被调用代码中的子事务,也将回滚。