Я хочу написать программу для процедуры вызова окна из другого раздела триггера окна. Позвольте мне поделиться своей программой, что я пробовал.
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 {&FRAME-NAME}
cSubPartType = fiChar-2 :SCREEN-VALUE IN FRAME {&FRAME-NAME}
cAttributeExp = fiChar-3 :SCREEN-VALUE IN FRAME {&FRAME-NAME}
cOutputQty = fiChar-4 :SCREEN-VALUE IN FRAME {&FRAME-NAME}
cOutputExp = fiChar-5 :SCREEN-VALUE IN FRAME {&FRAME-NAME}.
{ launch.i &PLIP = "'ford/prc/Parts.p'"
&IProc = "'AddPart'"
&PList = "(INPUT cPartType,
INPUT cSubPartType,
INPUT cAttributeExp,
INPUT cOutputQty,
INPUT cOutputExp,
OUTPUT cResult,
OUTPUT cCheckCase)"
&AutoKill = YES
&OnApp = 'YES'
&PARTITION = 'ASS'
}
END.
Здесь я могу вызвать процедуру из файла plipp, но я хочу вызвать другую оконную процедуру из этого триггера. Не могли бы вы помочь этому делу?
Если процедура в той же программе, то просто
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).
Это именно то, что я говорил во втором примере с дескриптором. Чтобы окна знали друг о друге, вам нужно иметь дескриптор программы.
Если окна запускаются независимо, рассмотрите возможность использования PUBLISH и SUBSCRIBE. Предполагая, конечно, что они находятся в одном и том же сеансе. В противном случае вы можете сделать это только путем сброса или загрузки данных из внешних файлов.
На самом деле я пытаюсь сказать, что рассмотрим test1.w и test2.w... В test2.w одна процедура называется Data.. так что я хочу сказать, что мне нужно вызвать процедуру test2.w в test1.w