Возможно ли вызвать оконную процедуру из другого раздела запуска окна?

#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. Если окна запускаются независимо, рассмотрите возможность использования ПУБЛИКАЦИИ и ПОДПИСКИ. Предполагая, конечно, что они находятся в одном сеансе. В противном случае вы можете сделать это только путем сброса или загрузки данных из внешних файлов.