Use MQSeriesTag(s): WinAPI/Registry WinAPI/Registry
The format is MQSERVER = NAME.OF.CONNECTION/PRTOCOL/NAME.OF.SERVER(PORT).
ex : MQSERVER = REMOTE.SVRCONN/TCP/MQSNT.SVR1.LOCAL(1414)
Powerscript exemple which write a message then read it back.
OLEObject MQS, QM, Q, ME, ML, PO, GO String ls_mqmgr, ls_s MQS = CREATE OLEObject // MQSeries Session QM = CREATE OLEObject // QueueManager Q = CREATE OLEObject // Queue MW = CREATE OLEObject // Message Written MR = CREATE OLEObject // Message Read PO = CREATE OLEOBject // Put options GO = CREATE OLEOBject // Get options MQS.ConnectToNewObject("MQAX200.MqSession") // see note 1 ls_mqmgr = "MQS.CORP.DEPT.DEV" // see note 2 QM = MQS.AccessQueueManager(ls_mqmgr) Q = QM.AccessQueue("CORP.DEPT.SYST.STAGE.QNP1",1 + 16) // see note 3 // WRITE MW = MQS.AccessMessage MW.MessageData = "HELLO WORLD " + string(cpu()) PO = MQS.AccessPutMessageOptions() Q.Put( MW, PO) // READ MR = MQS.AccessMessage() MR.MessageIdHex = MR.MessageIdHex // see note 4 GO = MQS.AccessGetMessageOptions() Q.Get( MR, GO) ls_s = MR.ReadString(MR.MessageLength) MessageBox("MQSeries", ls_s) Q.close() QM.disconnect()
1. Connection to the ActiveX
2. The Queue Manager
3. The Queue Name , see the constant defintion below, here the Queue is INPUT and OUTPUT
4. Just to make sure that we are reading the good message.
The possible constants are :
Message TYPE Global Const MQMT_SYSTEM_FIRST = 1 Global Const MQMT_REQUEST = 1 Global Const MQMT_REPLY = 2 Global Const MQMT_DATAGRAM = 8 Global Const MQMT_REPORT = 4 Global Const MQMT_SYSTEM_LAST = 65535 Global Const MQMT_APPL_FIRST = 65536 Global Const MQMT_APPL_LAST = 999999999 Open Options Global Const MQOO_INPUT_AS_Q_DEF = 1 Global Const MQOO_INPUT_SHARED = 2 Global Const MQOO_INPUT_EXCLUSIVE = 4 Global Const MQOO_BROWSE = 8 Global Const MQOO_OUTPUT = 16 Global Const MQOO_INQUIRE = 32 Global Const MQOO_SET = 64 Global Const MQOO_SAVE_ALL_CONTEXT = 128 Global Const MQOO_PASS_IDENTITY_CONTEXT = 256 Global Const MQOO_PASS_ALL_CONTEXT = 512 Global Const MQOO_SET_IDENTITY_CONTEXT = 1024 Global Const MQOO_SET_ALL_CONTEXT = 2048 Global Const MQOO_ALTERNATE_USER_AUTHORITY = 4096 Global Const MQOO_FAIL_IF_QUIESCING = 8192 Put Message Options Global Const MQPMO_SYNCPOINT = 2 Global Const MQPMO_NO_SYNCPOINT = 4 Global Const MQPMO_NEW_MSG_ID = 64 Global Const MQPMO_NEW_CORREL_ID = 128 Global Const MQPMO_LOGICAL_ORDER = 32768 Global Const MQPMO_NO_CONTEXT = 16384 Global Const MQPMO_DEFAULT_CONTEXT = 32 Global Const MQPMO_PASS_IDENTITY_CONTEXT = 256 Global Const MQPMO_PASS_ALL_CONTEXT = 512 Global Const MQPMO_SET_IDENTITY_CONTEXT = 1024 Global Const MQPMO_SET_ALL_CONTEXT = 2048 Global Const MQPMO_ALTERNATE_USER_AUTHORITY = 4096 Global Const MQPMO_FAIL_IF_QUIESCING = 8192 Global Const MQPMO_NONE = 0 Get Message Options Global Const MQGMO_WAIT = 1 Global Const MQGMO_NO_WAIT = 0 Global Const MQGMO_SYNCPOINT = 2 Global Const MQGMO_SYNCPOINT_IF_PERSISTENT = 4096 Global Const MQGMO_NO_SYNCPOINT = 4 Global Const MQGMO_MARK_SKIP_BACKOUT = 128 Global Const MQGMO_BROWSE_FIRST = 16 Global Const MQGMO_BROWSE_NEXT = 32 Global Const MQGMO_BROWSE_MSG_UNDER_CURSOR = 2048 Global Const MQGMO_MSG_UNDER_CURSOR = 256 Global Const MQGMO_LOCK = 512 Global Const MQGMO_UNLOCK = 1024 Global Const MQGMO_ACCEPT_TRUNCATED_MSG = 64 Global Const MQGMO_SET_SIGNAL = 8 Global Const MQGMO_FAIL_IF_QUIESCING = 8192 Global Const MQGMO_CONVERT = 16384 Global Const MQGMO_LOGICAL_ORDER = 32768 Global Const MQGMO_COMPLETE_MSG = 65536 Global Const MQGMO_ALL_MSGS_AVAILABLE = 131072 Global Const MQGMO_ALL_SEGMENTS_AVAILABLE = 262144 Global Const MQGMO_NONE = 0
OLEObject MQS, QM, Q, ML, GO String ls_mqmgr, ls_s MQS = CREATE OLEObject QM = CREATE OLEObject Q = CREATE OLEObject MR = CREATE OLEObject GO = CREATE OLEOBject MQS.ConnectToNewObject("MQAX200.MqSession") ls_mqmgr = "MQS.CORP.DEPT.DEV" QM = MQS.AccessQueueManager(ls_mqmgr) Q = QM.AccessQueue("CORP.DEPT.SYST.STAGE.QNP1",1 + 32) // INPUT & INQUIRE IF Q.CurrentDepth = 0 THEN MessageBox("", "The Queue is empty") ELSE ls_s = string(Q.CurrentDepth) MessageBox("", "The Queue has " + ls_s + " element(s)") ML = MQS.AccessMessage() MR.MessageType = 77777 // our known message type GO = MQS.AccessGetMessageOptions() GO.Options = GO.OPtions + 4 // GOO_NO_SYNCPOINT Q.Get( MR, GO ) ls_s = MR.ReadString(ML.MessageLength) MessageBox("MQSeries", ls_s) END IF Q.close() QM.disconnect()
The next example is two applications talking each other.
The first writes a message into a Queue with a known type. The second application reads at regular interval the Queue for available messages and prints them into scrolling listbox.
First application :
[button script] OLEObject MQS, QM, Q, MW, PO String ls_mqmgr, ls_s MQS = CREATE OLEObject QM = CREATE OLEObject Q = CREATE OLEObject MW = CREATE OLEObject PO = CREATE OLEOBject MQS.ConnectToNewObject("MQAX200.MqSession") ls_mqmgr = "MQS.CORP.DEPT.DEV" QM = MQS.AccessQueueManager(ls_mqmgr) Q = QM.AccessQueue("CORP.DEPT.SYST.STAGE.QNP1",16) // OUTPUT MW = MQS.AccessMessage MW.MessageData = "HELLO WORLD " + string(cpu()) MW.MessageType = 77778 MW.Format = "MQSTR" PO = MQS.AccessPutMessageOptions() Q.Put( MW, PO) Q.close() QM.disconnect()
Application 2
[window instance variable] OLEObject iMQS, iQM, iQ, iMR, iGO String is_mqmgr, is_s [open window event] iMQS = CREATE OLEObject iQM = CREATE OLEObject iQ = CREATE OLEObject iMR = CREATE OLEObject iGO = CREATE OLEOBject iMQS.ConnectToNewObject("MQAX200.MqSession") is_mqmgr = "MQS.CORP.DEPT.DEV" iQM = iMQS.AccessQueueManager(is_mqmgr) timer(1) [close window event] // QUEUE MANAGER DISCONNECT // iQM.disconnect() [timer window event] // write into a listbox (w=1563 h=572 not sorted vscrollbar) integer cpt = 0 iQ = iQM.AccessQueue("CORP.DEPT.SYST.STAGE.QNP1",1 + 32) // INPUT,INQUIRE IF iQ.CurrentDepth = 0 THEN cpt = lb_1.additem("The Queue is empty") ELSE iMR = iMQS.AccessMessage() iMR.MessageType = 77778 iGO = iMQS.AccessGetMessageOptions() iGO.Options = iGO.OPtions + 4 // GOO_NO_SYNCPOINT iQ.Get( iMR, iGO ) is_s = iMR.ReadString(iML.MessageLength) cpt = lb_1.additem(is_s) END IF IF cpt > 8 THEN lb_1.SetTop(cpt - 8 + 1) END IF // QUEUE close // Q.close()
mail_outline
Send comment, question or suggestion to howto@rgagnon.com
Send comment, question or suggestion to howto@rgagnon.com