我有一些像这样的列表
DEFINE VARIABLE procedurelist AS CHARACTER EXTENT 5
INITIAL [ "1.p", "2.p", "3.p", "4.p", "5.p"].
但是这个带有输入输出参数的所有程序我想执行这个程序,我该怎么做?我不知道该怎么做。
答案 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.