交易和功能

时间:2016-03-01 11:32:22

标签: progress-4gl openedge

我们在单个.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 - 函数中完成了更改?或者我们是否需要将某种句柄传递给MinimumVisualStudioVersion内的所有函数,以便它可以“撤消”?

1 个答案:

答案 0 :(得分:3)

如果“外部”事务回滚,则所有子事务(包括被调用代码中的事务)也将回滚。