事务和函数

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" 事务回滚,则所有子事务,包括被调用代码中的子事务,也将回滚。