【问题标题】:How can I get the name of a calling program over an app server connection?如何通过应用服务器连接获取调用程序的名称?
【发布时间】:2015-05-20 13:27:17
【问题描述】:

我有一个名为Test.p 的程序。该程序通过 appserver 调用调用另一个程序ServerTest.p

ServerTest.p 中,我想知道调用的程序的名称(在本例中为Test.p)。我尝试使用 program-name() 函数,但它只为我提供了当前应用服务器的堆栈跟踪。

我怎样才能找到名为ServerTest.p的程序?

【问题讨论】:

  • 为什么要这样做?从表面上看,您将在客户端和应用服务器之间添加耦合,这似乎是一个非常糟糕的主意。就像开发人员使用 program-name() 更改会话中的行为一样。
  • @TomBascom 因为我有一个通过 Appserver 调用的程序,我想获取堆栈跟踪以找出错误的来源

标签: progress-4gl openedge


【解决方案1】:

一个简单而基本的解决方案是使用输入参数。

ServerTest.p

DEFINE INPUT  PARAMETER wpic-name AS CHARACTER  NO-UNDO.

/* wpic-name = "Test.p" */

测试.p

RUN ServerTest.p(INPUT "Test.p").

【讨论】:

  • 这不是一个很好的解决方案,因为它需要更改调用程序以及被调用程序。 (但我现在无法自己制作出更好的)...
  • @Jensd:感谢您的回归。我完全同意你的观点,但像你一样,我没有更好的。这就是为什么我说它是基本的。 :) 我们可以通过在所有调用程序中使用 program-name() 函数的包含来改进它,使其更加动态。
【解决方案2】:

您可以使用 SOURCE-PROCEDURE:FILE-NAME。所以在你的情况下你可以使用

    if SOURCE-PROCEDURE:FILE-NAME EQ "Test.p" or 
       SOURCE-PROCEDURE:FILE-NAME EQ Test.r"  then
    do:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-24
    相关资源
    最近更新 更多