2016-10-16 19 views
0

У меня есть программа RPG, которая печатает данные с помощью команды DSPLY.as400 RPGLE wait for input

Когда я звоню программу,

Я вижу тиражи, который появляется в течение нескольких миллисекунд, , но он закрывает сразу.

Есть ли способ в родной RPG заставить программу ждать ввода, кроме использования файла отображения?

+0

Вы можете вызвать команду DLYJOB, чтобы подождать пару секунд. Если нет, я думаю, что вам нужно использовать файл отображения. – ChristLarsen

+0

Связано: http://stackoverflow.com/questions/18313289/rpgle-print-to-command-window – kratenko

ответ

3

Да, вам нужно добавить параметр ответа на вашу операцию воспра:

/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

Что делать, если я просто хочу, чтобы программа дождалась, когда пользователь нажмет клавишу ввода? Как вы думаете, это возможно? –

+3

Я бы не стал твердым кодом '* EXT'. Просто введите код »и пусть среда выполнения RPG решит, использовать ли« EXT »для интерактивного задания или« QSYSOPR »для пакетного задания. –

2

Бенни на правильном пути, но он остановил ответный парм.

Все, что вам нужно:

dsply wMessage *EXT wResponse; 

Программа будет ждать, пока ответ будет введен. Технически, поскольку для любого ответа требуется нажатие клавиши. Пользователь может ответить, просто введите.

1

Процедура CL с использованием сообщения отправки сообщения (SNDUSRMSG) с предоставленным по умолчанию значением [Значение ответа по умолчанию (DFT)] позволяет включить запрос, разрешающий паузу, и просто нажмите Enter для продолжения. IIRC, даже если не указано значение по умолчанию, значение символьной строки *N возвращается из-за отсутствия каких-либо данных пользователя, для которых, конечно, возвращаемое значение менее двух символов возвращает только звездочку; хотя в зависимости от другой настройки это может быть не просто с помощью Enter, а вместо этого можно увидеть только F11 = Удалить запрос пользователя [или F13 = Очистить]. Или делать тот же код, используя что-то сообщение -feature API-эффекты похожие; решение о том, куда отправлять сообщение при запуске как пакетное или интерактивное, может потребоваться кодом, использующим API против кодирования, для использования SNDUSRMSG, для которого эта функция встроена.
Примечание. На это использование, конечно, влияет настройка задания на обработку сообщений (INQMSGRPY); например задание может быть установлено автоответчиком по умолчанию, так что запрос никогда не появляется, но это, вероятно, хорошо для согласованности/ожидания.