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

时间:2015-03-20 10:12:11

标签: progress-4gl openedge

我有一些像这样的列表

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

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

1 个答案:

答案 0 :(得分:5)

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

手册说明。

  

VALUE(extern-expression)一个表达式,它返回您要运行的(本地或远程)外部过程的名称....

这基本上意味着您可以将带有程序(或过程)值的字符串输入到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.