Input 进度4GL-来自外部程序的输入

Input 进度4GL-来自外部程序的输入,input,external,handle,progress-4gl,Input,External,Handle,Progress 4gl,我需要使用外部程序或程序更新程序a.p中的字段。 但我不能。 这是a.p.的示例: DEF VAR v1 AS CHAR. DEF VAR v2 AS CHAR. DEF VAR v3 AS CHAR. DEF VAR v4 AS CHAR. DEF VAR external_program AS CHAR INITIAL 'myexternalprogram.p'. FORM v1 v2 v3 v4 WITH FRAME f1. ON F2 OF v1

我需要使用外部程序或程序更新程序a.p中的字段。 但我不能。 这是a.p.的示例:

DEF VAR v1 AS CHAR.
DEF VAR v2 AS CHAR.
DEF VAR v3 AS CHAR.
DEF VAR v4 AS CHAR.

DEF VAR external_program AS CHAR INITIAL 'myexternalprogram.p'.

FORM 
    v1
    v2
    v3
    v4
WITH FRAME f1.


ON F2 OF v1 IN FRAME f1
DO:

    RUN VALUE(external_program) .

END.
REPEAT:
    UPDATE 
        v1
        v2
        v3
        v4
    WITH FRAME f1.
END.
=========================================
myexternalprogram.p :

INPUT FROM VALUE(txt_with_data).
如果我使用内部程序是很容易的。但是我需要使用外部的。我不能修改程序a.p。 我试了一些有把手的,但失败了

我开始想,这有可能吗

谢谢你的回答

当我使用:

MESSAGE PROGRAM-NAME(2) VIEW-AS ALERT-BOX.
MESSAGE SELF:NAME VIEW-AS ALERT-BOX.

SELF:SCREEN-VALUE = 'w1'.
APPLY "ENTER" TO SELF.
我可以跳到另一个领域,但在程序结束时。
如何使用类似的代码在知道帧和字段名的情况下跳过所有字段?

您可以通过运行批处理会话来重新定向stdin:

mbpro-db dbname-p program.p 或者,使用ENTRY事件获取当前字段,检查所需字段的PROGRAM-NAME()和SELF:NAME值,并根据需要修改SELF:SCREEN-VALUE


要更新框架中的其他字段,请使用widget handle:PREV-SIBLING和widget handle:NEXT-SIBLING遍历框架的窗口小部件树。

这会起作用,但在Im使用程序a.p时不会起作用。当我在同一个会话中打开a.p时,我需要填写此字段。在这种情况下,使用ON ENTRY ANYWHERE触发器运行一个持久过程。在触发器中,检查PROGRAM-NAME()是否在正确的程序中,SELF:NAME是否在正确的字段中,并将SELF:SCREEN-VALUE设置为该字段所需的值。一旦获得了一个字段句柄,就可以通过上一个同级和下一个同级遍历框架的小部件树来获得其余的字段句柄。您应该将这变成一个新问题,因为它和你给的不一样。你还需要投票支持我的答案。:)我真的很想提高投票率,但我没有必要的声望点数。需要赚些钱才能给你投票权。