Основой вашего решения является заявление RUN VALUE
.
В руководстве указано.
VALUE (ехЬегп выражение) Выражение, которое возвращает имя (локальной или удаленной) внешней процедуру вы хотите запустить ....
В основном это означает, что вы можете ввести строку со значением программы (или процедуры) в ваш оператор 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.
OMG. Это очень просто. Спасибо, брат ! –