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

The*_*son 1 progress-4gl openedge

我有一些这样的清单

DEFINE VARIABLE procedurelist AS CHARACTER EXTENT 5
    INITIAL [ "1.p", "2.p", "3.p", "4.p", "5.p"].
Run Code Online (Sandbox Code Playgroud)

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

Jen*_*nsd 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.
Run Code Online (Sandbox Code Playgroud)

如果参数不同,则会变得更棘手(但并非不可能).该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.
Run Code Online (Sandbox Code Playgroud)