Recently I got an application request :
A sends orders to T via MQ. The messages sent by A use CCSID 500.
While recieving the order at T end most of the orders are in CCSID 500 format. But some of the orders have their CCSID changed to 1047.
When this is the case A-T interface stops and the orders have to be manually inserted into the databse.
Can you advise us under what circumstances this CCSID could change? And is there any configuration changes that could be made either at T or A side to prevent this happening ?
The CCSID is set by the application that does the MQPUT.
When it is left empty then it is filled by the underlyingin MQ installation.
The MQGET application can set a message get option to convert it to a desired CCSID.
There are tables in the appendix of the "application programming reference" in Knowledge center for all possible translations.
If you are dealing with MQFMT_STRING messages, you should be able to use GMO_CONVERT so all the messages get converted to the CCSID on the T side.
You may have an issue with missing translation tables on the receiving side. Check in the MQ installation directory /IBM/WebSphere MQ/conv/table.
Here's a little note from IBM describing the differences between EBCDIC code pages: https://www.ibm.com/support/knowledgecenter/SSEPEK_10.0.0/com.ibm.db2z10.doc.char/src/tpc/db2z_codeptdiffebcdic.dita
Source: http://www-01.ibm.com/support/docview.wss?uid=swg27005729
Related
Has anyone worked with MQ from RPG?
The problem is as follows. There are several messages in the queue. All of them are with RFH2 header. Each header contains a set of NameValueData.
I am creating a Message Handle and passing it to MQGET. Then I retrieve Properties using MQINQMP.
Question. When I read several messages in a loop, using the same Message Handle instance for all (without freeing it and re-creating it for each message), will I have memory leaks?
The IBM MQ Message Properties API is designed to be used in the following way.
MQOPEN
MQCRTMH
start-loop
MQGET
MQINQMP
end-loop
MQCLOSE
MQDLTMH
You can see this demonstrated in the IBM supplied 'C' sample amqsbcg0.c. I know your question is for RPG, but the underlying API is meant to work the same for all languages.
My problem is: there is an application, that wants from me XML messages with ISO-8859-2 encoding. Currently I use IBM MQ Explorer 9.0, and there are two queues in a queue manager. Either of them use I to put the XML message manual:copy XML->select queue->right click->put test message->paste the XML in the inputfield->Put.
(The other one is the queue, where the response messages are).
When I put an XML message with these ISO-8859-2 encoding, the "ő" and "ű" characters change to another characters. Actually, the application, that reads the XML messages from this queue, uses ISO-8859-2 encoding, and it gets this message with the bad "ő", "ű" characters (õ, û).
The message doesnt pass between queue managers. I dont know the application, that the message reads from the queue. They said, they want the XML messages with ISO-8859-2 encoding.
When I put the message, and click to "browse messages" by the queue, and I see the message properties, the 'character set id' is 1208. I think, it must be 912. Isn't it the problem? How can I change it?
This is the message data properties, that I put to the queue:
And we get the message with these properties:
Thanks
Recently I attended an interview, he asked this question
I am putting messages in Q. Manager, but client unable to get that messages, what is the problem can you explain it?
(All permission are ok, and put and get are enable state).
There are a 101 possible reasons. That is why MQ provides an MQRC back to the application, and further information in the AMQERR01.LOG. Without either of those you cannot even begin to guess. (P.S. I suspect that would have been a suitable reply in an interview!!)
But, since you ask for us to guess, here's a few more different from those Valerie suggested.
Perhaps the client channel max message length is shorter than the messages on the queue.
The codepage between client and queue manager may be such that data cannot be converted.
Client application get buffer isn't big enough
Hasn't specified accept truncated and the message was bigger than the buffer
AMS is in use and he's not the intended recipient (different from permissions)
This is a very broad question, would need to check error code received by client. Could be programming situation where client is getting based on a specific message or correl ID that does not exist. Could be that channel auth is blocking client. Also, it could be that the putting application did not commit the messages so they are not really available for the get.
The problem is regarding IBM z/OS and WebSphere MQ.
The task at hand is to create(define) a reply queue for WebSphere MQ.
This is the main WebSphere terminal:
IBM Websphere MQ for z/OS - Main Menu1
The reply queue is to be defined with all the properties of another predefined queue named SYSTEM.DEFAULT.LOCAL.QUEUE. It has to be named <userid>.REPLY, where <userid> is my mainframe ID. According to my comprehension, the 2. Define like Action has to be used to define a new object(queue in our case) based on an existing one. The Object type field can have either QUEUE or QLOCAL value.
As it is documented in the IBM-Infocenter, Name should hold the queue on whose attributes the new queue is to be defined; so Name gets SYSTEM.DEFAULT.LOCAL.QUEUE. Disposition is best declared A. Connect name is the name of the queue manager: CSQ1. The Target Queue Manager and Action queue manager is same as the Connect name.
Main Menu with entered fields2
These settings don't work and an error pops up:
--- CSQO014E MQOPEN of SYSTEM.COMMAND.INPUT unsuccessful. Reason code = 2035. ---
Referring to this site, I concluded that the reason for error maybe any of the two possibilities:
Insufficient storage, or
Authorization issues.
I raised these these concerns at the official IBM developer works community, and it was assured that if there were any technical issues they would get back to me. But no reply followed so that made me think if I were somehow at fault. So I tried almost all possible combinations of the available options and values, but every time one or the other error followed.
Your help would be much appreciated, Thank you.
That error message is pretty self explanatory. If you do not know what reason code 2035 (not authorized) is, did you look in the MQ Messages manual?
Are you the MQAdmin or just some user trying to define a queue? Because only the MQAdmin should be defining queues (or any other MQ objects). If you are not the MQAdmin then ask your MQAdmin to define the required queue.
The question is about the value of ccsid from QMGR. When doing this configuration, how many
ones can be used in total? How do i know what kind of ccsid i'm able to choose from? Is there any way to find it out?
Thanks in advance
Accordint go IBM WebSphere MQ 7.0 Infocenter, the following applies to queue manager option CCSID (Coded Charset ID):
The coded character set identifier for the queue manager. The CCSID is the identifier used with all character string fields defined by the API. It does not apply to application data carried in the text of messages unless the CCSID in the message descriptor is set to the value MQCCSI_Q_MGR when the message is put to a queue.
Specify a value in the range 1 through 65 535. The CCSID must specify a value that is defined for use on your platform, and use a character set that is appropriate to the platform.
I think the bold part answers the first part of your question (how many can be used), although it should be noted that you can only use one particular CCSID for your queue manager.
You can only use CCSIDs valid for your platform (you did not mention which OS the queue manager is running on). See WebSphere MQ / Application Programming Reference / Code Page Conversions for a list of supported conversions on a platform of your choice.