我想从 QSYS 队列以外的队列中获取 AS400 中的消息。自由。我使用以下运行良好的代码,仅当我使用 QSYS 中的队列时。自由:
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 替换为其他库中的任何其他队列,例如"/yaclib.lib/queueName.msgq",我会收到以下错误:
com.ibm.as400.access.IllegalPathNameException:/yaclib.lib/queueName.msgq: Object 不在 QSYS 文件系统中。 at com.ibm.as400.access.QSYSObjectPathName.parse(QSYSObjectPathName.java:599( at com.ibm.as400.access.QSYSObjectPathName.(QSYSObjectPathName.java:169( at com.ibm.as400.access.QSYSObjectPathName.(QSYSObjectPathName.java:177( at com.ibm.as400.access.MessageQueue.(消息队列.java:299( at br.com.operation.AS400Inspector.getMessagesFromYaclib(AS400Inspector.java:225( at br.com.operation.Main.main(Main.java:43(
问题1:我做错了什么?
问题2:有没有办法限制不需要回复的消息?喜欢在特定日期之后或仅收到最近 2 天的消息?
谢谢。
@user2338816是正确的。
QSYS
是一个特殊的库;它实际上包含系统中的所有其他库。 从 5250 会话中,WRKOBJ *ALL *LIB 将确认每个库都是系统在 QSYS 库中。 有趣的是,QSYS本身包含在QSYS中。
使用 IFS 命名时,要引用一个YACLIB.LIB
库,需要使用/QSYS.LIB/YACLIB.LIB
至于按日期选择,不,没有办法做到这一点。 如果你看一下java文档,你会发现最接近的是NEW, NEWEST, OLD, OLDEST