如何找到调用过程的过程句柄?

时间:2015-04-10 11:07:26

标签: progress-4gl openedge

我正在尝试编写一些测试程序,并且我有一个想法来运行一个过程,并让程序调用调用程序中的内部函数和过​​程。据我了解,您可以使用RUN x IN y,其中y是调用堆栈中的任何过程。

但是,我似乎无法找到任何获取调用过程句柄的方法。似乎并没有提升调用堆栈的方法。

我能想到的唯一方法是将调用过程的THIS-PROCEDURE句柄作为参数传递。它会工作,但似乎相当不优雅。

2 个答案:

答案 0 :(得分:2)

你快到了。使用THIS-PROCEDURE:INSTANTIATING-PROCEDURE手柄,看一下下面的例子。

  

INSTANTIATING-PROCEDURE属性

     

返回实例化对象的过程的句柄。

parentProgram.p

RUN childProgram.p.

PROCEDURE hello:
    DEFINE INPUT  PARAMETER pcMessage AS CHARACTER   NO-UNDO.
    MESSAGE "Child says:" pcMessage VIEW-AS ALERT-BOX INFORMATION.
END.

childProgram.p

MESSAGE "Calling parent. Anybody home?" VIEW-AS ALERT-BOX.

IF VALID-HANDLE(THIS-PROCEDURE:INSTANTIATING-PROCEDURE) THEN
    RUN hello IN THIS-PROCEDURE:INSTANTIATING-PROCEDURE (INPUT "I am your child") NO-ERROR.
IF ERROR-STATUS:ERROR THEN DO:
    MESSAGE "That didn't work" VIEW-AS ALERT-BOX ERROR.
END.

答案 1 :(得分:0)

要获取调用过程的句柄,请使用SOURCE-PROCEDURE句柄。它具有 last 过程调用的句柄。如果运行另一个过程,那么它将更改为匹配该过程实例的句柄,因此如果您需要程序记住谁调用它,您的代码将需要在调用它时立即存储该值。