2015-03-20 2 views
1

У меня есть список, как этотКак выполнить процедуру из списка с текущими параметрами 4gl?

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

но это все процедуры с параметрами ввода-вывода, и я хочу, чтобы выполнить эту процедуру, как я могу это сделать? Я не знаю, как это сделать.

ответ

5

Основой вашего решения является заявление 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. 
+0

OMG. Это очень просто. Спасибо, брат ! –

 Смежные вопросы

  • Нет связанных вопросов^_^