1

我正在使用 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”方法:

  • 假脱机文件名
  • 假脱机文件编号
  • 职位名称
  • 工作用户
  • 工作编号

谢谢,卡洛斯

4

2 回答 2

3

您可能根本不想“打印”这些消息。你还没有说一旦你得到消息你想对它们做什么(并且首先获取 QSYSOPR 消息可能不是一个好主意)。

您可以查看AS/400 消息队列过滤 - JT400,然后开始思考您希望如何进行。消息可以做很多事情。

于 2016-01-29T12:25:59.383 回答
2

没有具体说明如何检索假脱机文件信息,但如果这是您的最终目标,这将为您提供 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 类中检索。无需解析。

于 2016-02-01T16:38:35.253 回答