如何使用异步方法从窗口应用程序调用外部程序中的过程部分?

时间:2019-07-26 06:09:48

标签: openedge progress-4gl

我想出于目的使用异步方法,但是这里的问题是,当我编写如下查询时,程序被读取到主块,并且没有进入过程部分。我也想读。

DEFINE VARIABLE hAsynCall     AS HANDLE      NO-UNDO.

ASSIGN cPgmTest = Test.p

RUN VALUE(cPgmTest) ON SERVER gshAstraAppserver ASYNCHRONOUS
    SET hAsynCall (INPUT 'Csv') NO-ERROR.
IF ERROR-STATUS:ERROR THEN DO:
   MESSAGE ERROR-STATUS:GET-MESSAGE(1).
END.


DO WHILE NOT hAsynCall :COMPLETE:

  PROCESS EVENTS.

  IF hAsynCall :COMPLETE THEN

    MESSAGE "completed"        
      VIEW-AS ALERT-BOX INFORMATION.

  ELSE /* Async result not ready, so do something else. */
    MESSAGE "Not yet ..." VIEW-AS ALERT-BOX INFORMATION.

END. 

/* Test.p*/

  /* Definition*/

  /*Main Block*/
    DEFINE INPUT PARAMETER cData AS CHARACTER NO-UNDO.
    PAUSE 5.

  /*Procedure*/

  /*Function*/

如上所示,该程序已读入主程序段,但如果我从主程序段中剪切查询并粘贴到过程程序段中,则不会输入该程序。

1 个答案:

答案 0 :(得分:1)

您需要持久地运行AppServer过程 ,然后在其中运行异步调用。

https://documentation.progress.com/output/ua/OpenEdge_latest/index.html#page/dvref%2Frun-statement.html

类似的东西:

DEFINE VARIABLE hp AS HANDLE NO-UNDO.

RUN test.p PERSISTENT SET hp.
RUN whatever IN hp ASYNCRHONOUS SET hasync ( "csv" ).

FINALLY:
   DELETE OBJECT hp.
END FINALLY.

请注意,此模式会导致另外两个AppServer调用,可以使用代理存根来防止这种情况。