我正在使用 JT400 开发一个 java 类,并尝试使用以下命令获取命令“dspmsg qsysopr”的结果:
AS400 as400 = new AS400(system, user, password);
CommandCall cmd = new CommandCall(as400);
cmd.runCommand("dspmsg qsysopr");
我发现该命令在用户 QUSER 的 JOB 中运行,但是在我实例化对象 AS400 时指定的用户“用户”下生成了一个带有结果的假脱机文件。
我可以成功运行该命令,但结果不是队列中的消息:
“已创建打印机输出。”
我用代码得到这个结果:
Job job = cmd.getServerJob();
AS400Message[] messageList = cmd.getMessageList();
for (int i = 0; i < messageList.length; i++) {
System.out.println(messageList[i].getText());
}
问题 1:有没有办法不接收假脱机文件中的消息,但它以 na AS400Message 或类似的形式返回给我?
没办法,我用下面的方法来获取spool文件:
public String getSpoolFile (
String splfname, // splf name
String splfnumbert, // splf number
String jobname, // job name
String jobuser, // job user
String jobfnumber // job number
) throws Exception {
int splno = Integer.parseInt(splfnumbert);
SpooledFile sf = new SpooledFile( as400, // system
splfname, // splf name
splno, // splf number
jobname, // job name
jobuser, // job user
jobfnumber );
PrintParameterList printParms = new PrintParameterList();
printParms.setParameter(PrintObject.ATTR_WORKSTATION_CUST_OBJECT, "/QSYS.LIB/QWPDEFAULT.WSCST");
printParms.setParameter(PrintObject.ATTR_MFGTYPE, "*WSCST");
// Create a page input stream from the spooled file
PrintObjectPageInputStream is;
String data ="";
String response ="";
is = sf.getPageInputStream(printParms);
BufferedReader d = new BufferedReader(new InputStreamReader(is));
while((data = d.readLine() )!=null)
{
response+=data+"\n";
}
return response;
}
问题是:我没有调用方法“getSpoolFile”的参数。如果我手动登录AS400,查看spool文件详细信息,用手动获取的参数调用方法,成功获取spool文件。但是我收到的 JOB 对象是:
Job job = cmd.getServerJob();
运行后:
cmd.runCommand("dspmsg qsysopr");
与创建假脱机文件的作业不同。例如,如果我检查:
System.out.println(job.getUser());
结果是“QUSER”,但假脱机文件是在“用户”输出队列下生成的。
问题2:如何获取与该spool文件的生成相关的JOB?
问题3:我是否也可以获取与生成的spool文件相关的参数,如spool文件号和spool文件名?
我需要以下信息才能调用“getSpoolFile”方法:
- 假脱机文件名
- 假脱机文件编号
- 职位名称
- 工作用户
- 工作编号
谢谢,卡洛斯