JT400 - 获取命令生成的假脱机文件
JT400 - Get spool file generated by a command
我正在使用 JT400 开发 java class 并尝试通过以下方式获取命令“dspmsg qsysopr”的结果:
AS400 as400 = new AS400(system, user, password);
CommandCall cmd = new CommandCall(as400);
cmd.runCommand("dspmsg qsysopr");
我发现命令运行s在用户QUSER的JOB中,但是在我实例化对象AS400时指定的用户"user"下生成了一个假脱机文件和结果。
我可以成功 运行 命令,但我得到的不是队列中的消息:
"Printer output created."
我用代码得到了这个结果:
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 或类似的东西返回给我?
无法这样做,我正在使用以下方法获取假脱机文件:
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:如何获取与该假脱机文件生成相关的 JOB?
问题3:我是否也可以获取与生成的假脱机文件相关的参数,如假脱机文件编号和假脱机文件名?
我需要以下信息才能调用 "getSpoolFile" 方法:
- 假脱机文件名
- 假脱机文件编号
- 职位名称
- 工作用户
- 职位编号
谢谢,
卡洛斯
您可能根本不想 "print" 这些消息。你还没有说一旦你收到消息你想做什么(一开始接收 QSYSOPR 消息可能不是一个好主意)。
您可能会回顾 AS/400 Message queue filtering - JT400,然后开始考虑您希望如何继续。消息可以做很多事情。
没有具体说明如何检索假脱机文件信息,但如果这是您的最终目标,这将为您提供 QSYSOPR 消息。
AS400 sys = new AS400(as400system,username,password);
//Get the user object for QSYSOPR
User u = new User(sys,"qsysopr");
//Get the path to the user's message queue
String qpath = u.getMessageQueue();
//Retrieve the message queue object
MessageQueue queue = new MessageQueue(sys, qpath);
// Get the list of messages currently in this user's queue.
queue.setListDirection(false);
//Get the first 15 messsages
QueuedMessage[] qm = queue.getMessages(0,15);
//Loop through the messages
for (int i = qm.length -1; i >=0; i--)
{
System.out.println(qm[i].getText());
}
当然,您可以从 QueuedMessage class 中检索其他属性、日期、回复状态、用户。无需解析。
我正在使用 JT400 开发 java class 并尝试通过以下方式获取命令“dspmsg qsysopr”的结果:
AS400 as400 = new AS400(system, user, password);
CommandCall cmd = new CommandCall(as400);
cmd.runCommand("dspmsg qsysopr");
我发现命令运行s在用户QUSER的JOB中,但是在我实例化对象AS400时指定的用户"user"下生成了一个假脱机文件和结果。
我可以成功 运行 命令,但我得到的不是队列中的消息:
"Printer output created."
我用代码得到了这个结果:
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 或类似的东西返回给我?
无法这样做,我正在使用以下方法获取假脱机文件:
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:如何获取与该假脱机文件生成相关的 JOB?
问题3:我是否也可以获取与生成的假脱机文件相关的参数,如假脱机文件编号和假脱机文件名?
我需要以下信息才能调用 "getSpoolFile" 方法:
- 假脱机文件名
- 假脱机文件编号
- 职位名称
- 工作用户
- 职位编号
谢谢, 卡洛斯
您可能根本不想 "print" 这些消息。你还没有说一旦你收到消息你想做什么(一开始接收 QSYSOPR 消息可能不是一个好主意)。
您可能会回顾 AS/400 Message queue filtering - JT400,然后开始考虑您希望如何继续。消息可以做很多事情。
没有具体说明如何检索假脱机文件信息,但如果这是您的最终目标,这将为您提供 QSYSOPR 消息。
AS400 sys = new AS400(as400system,username,password);
//Get the user object for QSYSOPR
User u = new User(sys,"qsysopr");
//Get the path to the user's message queue
String qpath = u.getMessageQueue();
//Retrieve the message queue object
MessageQueue queue = new MessageQueue(sys, qpath);
// Get the list of messages currently in this user's queue.
queue.setListDirection(false);
//Get the first 15 messsages
QueuedMessage[] qm = queue.getMessages(0,15);
//Loop through the messages
for (int i = qm.length -1; i >=0; i--)
{
System.out.println(qm[i].getText());
}
当然,您可以从 QueuedMessage class 中检索其他属性、日期、回复状态、用户。无需解析。