如何在 progress 4GL 上使用异步方法从 window 应用程序调用过程部分?

How do I call the procedure section from window application using asynchronous method on 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*/

正如您在上面看到的,程序被读取到主块,但是如果我从主块中剪切查询并粘贴到过程块中,那么它就不会被输入。

您需要运行您的 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 调用,可以使用代理存根来防止这种情况。