John Eberhard
-
2020-08-03
- assigned_to: Zhang Ze
I create a MessageQueue for *SYSOPR and load the messages. The first level is fine, but the second level does contain parameter names instead of the parameter content. Example:
Nachrichten-ID . . . . : CPA7025
Sendedatum . . . . . . : 30.07.20 Sendezeit . . . . . . : 14:28:57
Nachricht . . . : (I C). Empfänger QSQJRN0020 in MYDATABASE wurde nie
vollständig gesichert. (I C)
Ursache . . . . : Es wurde versucht, einen Empfänger zu löschen, der nach
dem Abhängen mit dem Befehl CHGJRN (Journal ändern) niemals vollständig
gesichert wurde.
Wurde diese Nachricht nach dem verwaltungsbezogenen Löschen im System
(über Auswahlmöglichkeiten der Oberfläche für Anwendungen (OA) oder mit dem
Befehl STRCLNUP) ausgegeben, wurde der Journalempfänger &1 in
Bibliothek &2 gelöscht.
Sorry for german message. You can see "&1" and "&2" in second level instead of the values that you can see in first level.
I checked with "DSPMSG MSGQ(*SYSOPR)" that the message is correct. Only in Java I have the error.
Example code (I want to get the inquiry messages only. To test the code you must have an inquiry message like above)
import java.util.Enumeration;
import com.ibm.as400.access.AS400;
import com.ibm.as400.access.AS400Message;
import com.ibm.as400.access.MessageFile;
import com.ibm.as400.access.MessageQueue;
import com.ibm.as400.access.QueuedMessage;
public class MessageQueueTest
{
public static void main(String[] args)
{
AS400 system = new AS400("testsystem", "user", "password");
MessageQueue queue = new MessageQueue(system, "/qsys.lib/qsysopr.msgq");
queue.setListDirection(false);
queue.setSelectMessagesNoNeedReply(false); // we want only inquiry
// messages
queue.setSelectMessagesNeedReply(true);
queue.setSelectSendersCopyMessagesNeedReply(true);
queue.setHelpTextFormatting(MessageFile.SUBSTITUTE_FORMATTING_CHARACTERS);
try {
//Update message queue
queue.load();
@SuppressWarnings(value = { "unchecked" })
Enumeration<QueuedMessage> msglst = queue.getMessages();
while (msglst.hasMoreElements())
{
QueuedMessage message = msglst.nextElement();
// String msg_jobname = message.getFromJobName();
// String msg_jobnr = message.getFromJobNumber();
// String msg_user = message.getCurrentUser();
int msg_type = message.getType();
if(msg_type == AS400Message.INQUIRY)
{
message.load(MessageFile.SUBSTITUTE_FORMATTING_CHARACTERS);
System.out.println("Test --");
System.out.println("Test: "+ message.getText()); // okay
System.out.println("Test: "+ message.getHelp()); // variable names
System.out.println("Test: "+ message.getSubstitutionData()); // null
System.out.println("Test: "+ message.getMessageHelpFormat()); // empty...
System.out.println("Test: "+ message.getMessageHelp());
System.out.println("Test: "+ message.getMessage());
System.out.println("Test: "+ message.getMessageHelpReplacement());
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}