Создайте буферный файл из Java с указанным именем задания в iSeries.
-
13-09-2019 - |
Вопрос
Есть ли способ указать имя задания при создании буферного файла?Чтобы моя созданная н.ф.не имеет значения по умолчанию «QPRTJOB».
Мой метод, создающий буферный файл с заданием QPRTJOB по умолчанию:
public static SpooledFile createSpoolFile( com.ibm.as400.access.AS400 as, PrinterFile pPrinterFile,
OutputQueue outq, String msg ) {
SpooledFile result = null;
try {
PrintParameterList parms = new PrintParameterList();
// create a PrintParameterList with the values that we want
// to override from the default printer file...we will override
// the output queue and the copies value.
parms.setParameter( PrintObject.ATTR_PRINTER_FILE, pPrinterFile.getPath() );
parms.setParameter( PrintObject.ATTR_JOBUSER, AS400.getUser().getUserProfileName() );
parms.setParameter( PrintObject.ATTR_JOBNAME, "NASAOBRJVA" );
parms.setParameter( PrintObject.ATTR_OUTPUT_QUEUE, outq.getPath() );
parms.setParameter( PrintObject.ATTR_CHAR_ID, "*SYSVAL" );
SpooledFileOutputStream spool = new SpooledFileOutputStream( as, parms, pPrinterFile,
outq );
SCS5256Writer scsWtr = new SCS5256Writer( spool, pPrinterFile.getSystem().getCcsid(), pPrinterFile.getSystem() );
String[] redovi = msg.split( "\n" );
for ( int i = 0; i < redovi.length; i++ ) {
if (redovi[i].equals( "" ) || redovi[i].equals( " " )) {
continue;
}
scsWtr.write( redovi[i].trim() );
if (i < redovi.length - 1) {
scsWtr.newLine();
}
}
scsWtr.close();
result = spool.getSpooledFile();
System.out.println("Spool is in Job: " + result.getJobNumber() + "/" + result.getJobUser() + "/" + result.getJobName());
}
catch ( Exception e ) {
LOG.error( e );
}
return result;
}
Решение
ATTR_JOBUSER и ATTR_JOBNAME — атрибуты буферного файла, доступные только для чтения.Я заметил, что всякий раз, когда мои Java-программы взаимодействуют с AS/400 (даже те, которые изначально работают на AS/400), они обращаются к заданиям хост-сервера, а не обязательно к заданию, отправившему вызов Java.В этом случае вы говорите с заданием сервера печати на 400, и все ваши буферные файлы получат имя задания QPRTJOB.
Сложный обходной путь заключается в том, чтобы ваша Java-программа отправила новое задание с именем NASAOBRJVA с командой для вызова какой-нибудь простой RPG-программы с текстом сообщения в качестве параметра.Вероятно, это требует больших усилий для создания имени задания в буферном файле, но вы достаточно знаете свой проект, чтобы понять, стоит ли он этих усилий.
Другие советы
Задание, пользователь и номер задания назначаются системой и не могут быть изменены.Во всяком случае, насколько мне известно.