我想从QSYS.LIB中的队列以外的队列中获取AS400中的消息。我正在使用以下运行良好的代码,只有在QSYS.LIB中使用队列:
public String getMessagesFromQsysopr(boolean needReply) {
String messageStr = "";
try {
MessageQueue queue = new MessageQueue(this.as400, "/qsys.lib/qsysopr.msgq");
// want only inquiry messages
queue.setSelectMessagesNeedReply(needReply);
queue.setSelectMessagesNoNeedReply(!needReply);
queue.setSelectSendersCopyMessagesNeedReply(needReply);
queue.setListDirection(false);
Enumeration e = queue.getMessages();
while (e.hasMoreElements()) {
QueuedMessage message = (QueuedMessage) e.nextElement();
messageStr += message.getText()+"\n";
}
} catch (Exception e) {
e.printStackTrace();
}
如果我将/qsys.lib/qsysopr.msgq替换为来自其他lib的任何其他队列,例如" /yaclib.lib/queueName.msgq"我收到以下错误:
com.ibm.as400.access.IllegalPathNameException:/yaclib.lib/queueName.msgq:对象不在QSYS文件系统中。 at com.ibm.as400.access.QSYSObjectPathName.parse(QSYSObjectPathName.java:599) 在com.ibm.as400.access.QSYSObjectPathName。(QSYSObjectPathName.java:169) 在com.ibm.as400.access.QSYSObjectPathName。(QSYSObjectPathName.java:177) 在com.ibm.as400.access.MessageQueue。(MessageQueue.java:299) 在br.com.operation.AS400Inspector.getMessagesFromYaclib(AS400Inspector.java:225) 在br.com.operation.Main.main(Main.java:43)
问题1:我做错了什么?
问题2:有没有办法限制不需要回复的邮件?比如在特定日期或最后2天消息后获取消息?
感谢。
答案 0 :(得分:3)
@ user2338816是正确的。
QSYS
是一个特殊的图书馆;它实际上包含系统中的每个其他库。在5250会话中,WRKOBJ * ALL * LIB将确认每个库都是QSYS库中的系统。有趣的是,QSYS本身包含在QSYS中。
使用IFS命名时,要引用YACLIB.LIB
库,您需要使用/QSYS.LIB/YACLIB.LIB
就按日期选择而言,没有办法做到这一点。如果您查看最近的java docs,我会发现NEW, NEWEST, OLD, OLDEST