#openedge #progress-4gl
#openedge #прогресс -4gl
Вопрос:
Я хочу написать программу для вызова оконной процедуры из другого раздела запуска окна.Позвольте мне поделиться своей программой, что я пробовал.
DO:
DEFINE VARIABLE cPartType AS CHARACTER NO-UNDO.
DEFINE VARIABLE cSubPartType AS CHARACTER NO-UNDO.
DEFINE VARIABLE cAttributeExp AS CHARACTER NO-UNDO.
DEFINE VARIABLE cOutputQty AS CHARACTER NO-UNDO.
DEFINE VARIABLE cOutputExp AS CHARACTER NO-UNDO.
DEFINE VARIABLE cResult AS CHARACTER NO-UNDO.
DEFINE VARIABLE cCheckCase AS CHARACTER NO-UNDO.
ASSIGN
cPartType = coCombo :SCREEN-VALUE IN FRAME {amp;FRAME-NAME}
cSubPartType = fiChar-2 :SCREEN-VALUE IN FRAME {amp;FRAME-NAME}
cAttributeExp = fiChar-3 :SCREEN-VALUE IN FRAME {amp;FRAME-NAME}
cOutputQty = fiChar-4 :SCREEN-VALUE IN FRAME {amp;FRAME-NAME}
cOutputExp = fiChar-5 :SCREEN-VALUE IN FRAME {amp;FRAME-NAME}.
{ launch.i amp;PLIP = "'ford/prc/Parts.p'"
amp;IProc = "'AddPart'"
amp;PList = "(INPUT cPartType,
INPUT cSubPartType,
INPUT cAttributeExp,
INPUT cOutputQty,
INPUT cOutputExp,
OUTPUT cResult,
OUTPUT cCheckCase)"
amp;AutoKill = YES
amp;OnApp = 'YES'
amp;PARTITION = 'ASS'
}
END.
Здесь я могу вызвать процедуру из файла plipp, но я хочу вызвать другую оконную процедуру из этого триггера. Не могли бы вы помочь в этом случае?
Ответ №1:
Если процедура находится в той же программе, то просто
RUN addPart (INPUT cPartType,
INPUT cSubPartType,
INPUT cAttributeExp,
INPUT cOutputQty,
INPUT cOutputExp,
OUTPUT cResult,
OUTPUT cCheckCase).
Теперь, если эта процедура находится в другой программе, для ее запуска вам понадобится дескриптор. В этом случае в определениях определите дескрипторную переменную следующим образом
DEFINE VARIABLE myHandle AS HANDLE NO-UNDO.
И в основной блок добавьте этот код
RUN ford/prc/Parts.p PERSISTENT SET myHandle.
Наконец, в триггере выполните
RUN addPart IN myHandle (INPUT cPartType,
INPUT cSubPartType,
INPUT cAttributeExp,
INPUT cOutputQty,
INPUT cOutputExp,
OUTPUT cResult,
OUTPUT cCheckCase).
Комментарии:
1. На самом деле я пытаюсь сказать, что рассмотрите test1.w и test2.w … В test2.w одна процедура вызывается Data..so я хочу сказать, что мне нужно вызвать процедуру test2.w в test1.w
2. Это именно то, что я говорил во втором примере с использованием дескриптора. Для того, чтобы окна знали друг о друге, у вас должен быть дескриптор программы.
3. Если окна запускаются независимо, рассмотрите возможность использования ПУБЛИКАЦИИ и ПОДПИСКИ. Предполагая, конечно, что они находятся в одном сеансе. В противном случае вы можете сделать это только путем сброса или загрузки данных из внешних файлов.