如何使用 Progress 4gl 中的参数从列表执行过程?

How to execute procedure from List with parameters in Progress 4gl?

我有一些这样的列表

DEFINE VARIABLE procedurelist AS CHARACTER EXTENT 5
    INITIAL [ "1.p", "2.p", "3.p", "4.p", "5.p"].

但这都是带有输入输出参数的程序,我想执行这个程序,我该怎么做?我不知道该怎么做。

您的解决方案的基础是 RUN VALUE 语句。

手册说明。

VALUE( extern-expression ) An expression that returns the name of the (local or remote) external procedure you want to run....

这基本上意味着您可以将带有程序(或过程)值的字符串输入到您的 运行 语句中。

如果所有的输入输出参数完全相同你可以这样做:

DEFINE VARIABLE procedurelist AS CHARACTER EXTENT 5 INITIAL [ "1.p", "2.p", "3.p", "4.p", "5.p"].

DEFINE VARIABLE iExtent   AS INTEGER     NO-UNDO.
DEFINE VARIABLE cVariable AS CHARACTER   NO-UNDO.

DO iExtent = 1 TO EXTENT(procedurelist):
    RUN VALUE(procedurelist[iExtent]) (INPUT-OUTPUT cVariable).
END.

如果参数不同,它会变得更棘手(但并非不可能)。 CREATE CALL 和调用对象可以帮助你。在这种情况下,您还需要某种方式来跟踪不同的参数。

这是直接从联机帮助中获取的基本示例:

DEFINE VARIABLE hCall AS HANDLE NO-UNDO. 

CREATE CALL hCall. 
/* Invoke hello.p non-persistently */
hCall:CALL-NAME      = "hello.p".

/* Sets CALL-TYPE to the default */
hCall:CALL-TYPE  = PROCEDURE-CALL-TYPE.
hCall:NUM-PARAMETERS = 1.
hCall:SET-PARAMETER(1, "CHARACTER", "INPUT", "HELLO WORLD").
hCall:INVOKE. 

/* Clean up */
DELETE OBJECT hCall.