2016-10-16 64 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)設置的影響;例如該作業可以設置爲默認自動回覆,這樣查詢就不會出現,但這對於一致性/期望來說可能是件好事。