有没有办法在创建假脱机文件时指定JOB名称? 这样我的创建了s.f.没有默认的“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;
}
答案 0 :(得分:3)
ATTR_JOBUSER和ATTR_JOBNAME是假脱机文件的只读属性。我注意到,只要我的Java程序与AS / 400进行通信 - 即使是那些在AS / 400上本机运行的程序 - 它们也会与主机服务器作业进行通信,而不一定是提交Java调用的作业。在这种情况下,您正在与400上的打印服务器作业进行通信,并且所有假脱机文件都将获得QPRTJOB作业名称。
精心设计的解决方法是让您的Java程序提交一个名为NASAOBRJVA的新作业,并使用命令调用一些简单的RPG程序,并将消息文本作为参数。对于假脱机文件上的作业名称可能需要花费很多精力,但是你知道你的项目是否值得付出努力。
答案 1 :(得分:1)
作业,用户和作业编号由系统分配,无法更改。据我所知,无论如何。