2016-10-16 60 views
0

我有一个使用命令DSPLY打印数据的RPG程序。as400 RPGLE等待输入

当我调用程序,

我可以看到它出现几毫秒, 的印刷品,但它关闭的时候了。

原生RPG中有一种方法可以让程序等待输入,而不是使用显示文件吗?

+0

您可以调用命令DLYJOB等待几秒钟。如果没有,我认为你必须使用显示文件。 – ChristLarsen

+0

相关:http://stackoverflow.com/questions/18313289/rpgle-print-to-command-window – kratenko

回答

3

是的,你需要的响应参数添加到您的DSPLY操作:

/free 
dou (response = 'Q'); 
    // dsply 'Q = Quit' '*EXT' response; 
    // Better to let the RPG runtime determine 
    // whether to use *EXT (for interactive jobs) 
    // or QSYSOPR (for batch jobs). 
    dsply 'Q = Quit' '' response; 
    if (response <> 'Q'); 
     // your code here 
     dsply yourvar; 
    endif; 
enddo; 
*inlr = *on; 
/end-free 

请注意 - 我目前无法测试这一点,我只是键入代码在这里直出我的头。

*编辑纳入芭芭拉的优点。

+0

如果我只是想让程序等待用户按Enter键怎么办?你认为这是可能的吗? –

+3

我不会硬编码'* EXT'。只需编码'',让RPG运行时决定是使用'* EXT'作为交互作业还是使用'QSYSOPR'作为批处理作业。 –

2

本尼是在正确的轨道上,但他没有回应帕尔姆。

所有你需要的是:

dsply wMessage *EXT wResponse; 

程序将等到输入的响应。从技术上讲,因为任何响应都需要输入按下。用户只需输入即可回复。

1

使用提供了默认值[默认答复值(DFT)]的发送用户消息(SNDUSRMSG)的CL过程可以启用允许暂停的询问并仅按Enter继续。 IIRC,即使没有指定缺省值,字符串值*N也会返回,因为缺少用户的任何输入,当然返回值少于两个字符将只返回星号;尽管取决于其他设置,这可能不仅仅是输入的效果,并且可能仅用F11 =用户查询的删除[或F13 =清除]才能看到。或者做相同的代码,使用任何消息 -feature API效果相似;当以批处理方式与交互式方式运行时,决定发送消息的位置可能需要使用API​​的代码,而使用API​​编码则需要使用内置该功能的SNDUSRMSG。
注意:该用法当然受作业的查询消息应答处理(INQMSGRPY)设置的影响;例如该作业可以设置为默认自动回复,这样查询就不会出现,但这对于一致性/期望来说可能是件好事。