You are on page 1of 3

i, I don't know about COBOL. But I have in PL/1. Please see, whether it is useful.

SUB-Program which has PUT call. Procedure to PUT message, VERARB_SENDMQ: PROCEDURE REORDER ; DCL LOCAL_MQMD LIKE MQMD; DCL LOCAL_MQPMO LIKE MQPMO; DCL BUFFER CHAR(6000) BASED(SENDMQE.MSGPTR); DCL BUFFER_VAR CHAR(6000) VARYING; DCL BUFFER_TEMP CHAR(SENDMQE.LENGTH); BUFFER_VAR = SUBSTR(BUFFER,1,SENDMQE.LENGTH); BUFFER_TEMP = BUFFER_VAR; IF SENDMQE.FORMAT = 'STRING' THEN DO; LOCAL_MQMD.FORMAT = MQFMT_STRING; END; LOCAL_MQMD.MSGTYPE = MQMT_DATAGRAM; LOCAL_MQMD.PRIORITY = 1; LOCAL_MQMD.PERSISTENCE = MQPER_PERSISTENCE_AS_Q_DEF; LOCAL_MQMD.REPLYTOQ = SENDMQE.REPLYQNAME; LOCAL_MQMD.REPLYTOQMGR = SENDMQE.REPLYQMGR; LOCAL_MQMD.MSGID = MQMI_NONE; LOCAL_MQMD.CORRELID = MQCI_NONE; LOCAL_MQPMO.OPTIONS = SENDMQE.PUT_OPTIONS; CALL MQPUT (SENDMQE.HCONN, SENDMQE.HOBJ, LOCAL_MQMD, LOCAL_MQPMO, SENDMQE.LENGTH, BUFFER_TEMP, SENDMQA.COMPCODE, SENDMQA.REASON); IF SENDMQA.COMPCODE ^= MQCC_OK ! SENDMQA.REASON ^= MQRC_NONE THEN DO; SENDMQO.RC = 8; SENDMQA.SEND_FAILED = 1; PUT SKIP LIST('***MQ PUT ERROR***'); PUT SKIP LIST('***CONNECTION HANDLE :'!!SENDMQE.HCONN !!'***'); PUT SKIP LIST('***QUEUE HANDLE :'!!SENDMQE.HOBJ !!'***'); PUT SKIP LIST('***MQ COMPCODE ',SENDMQA.COMPCODE,'***'); PUT SKIP LIST('***MQ REASON ',SENDMQA.REASON,'***'); RETURN; END; /* IF COMPCODE ^= MQCC_OK */ SENDMQA.MSG_ID = LOCAL_MQMD.MSGID; Input Structure of Sub-Program: DCL 1 SENDMQE,

5 5 5 5 5 5 5 5

MSGPTR POINTER, PUT_OPTIONS BIN FIXED(31,0), HCONN BIN FIXED(31,0), LENGTH BIN FIXED(31,0), HOBJ BIN FIXED(31,0), REPLYQMGR CHAR (48), REPLYQNAME CHAR (48), FORMAT CHAR (10);

Main Program to call the above sub-program: SENDMQE.MSGPTR = ADDR(TAXSEND_MSG); /* actual message to be sent */ SENDMQE.PUT_OPTIONS = PUTOPTIONS; /* get from JCL */ SENDMQE.HCONN = OPENMQA.HCONN; SENDMQE.HOBJ = OPENMQA.HOBJ; SENDMQE.LENGTH = 176; SENDMQO.METHOD = 'SEND'; SENDMQO.MCB_P = ADDR(MCB); SENDMQE.FORMAT = 'STRING'; SENDMQE.REPLYQMGR = REPLY_QMGR; /* get from JCL */ SENDMQE.REPLYQNAME = REPLY_QUEUE; /* get from JCL */ CALL SENDMQ (SENDMQP); Compile JCL - should have the MQ library for loadmodules of MQPUT etc.,: //LINK.CSQSTUB DD DSN=MQ2T.SCSQLOAD,DISP=SHR //LINK.SYSIN DD * INCLUDE CSQSTUB(CSQQSTUB) /* RUN - JCL with the following: Parameters for the program: //QMGR DD * MQ2T /* //RPLQMGR DD * MQ2T /* //RPLQ DD * TEST.DE.Q01 /* //QNAME DD * TEST.DE.Q01 /* //PARAM DD * *000016*0000002 /* we need to add these libraries(MQ specific and IMS related) in JCL: //STEPLIB DD DSN=MQ2T.USERAUTH,DISP=SHR // DD DSN=MQ2T.USERLOAD,DISP=SHR // DD DSN=MQ2T.SCSQANLE,DISP=SHR // DD DSN=MQ2T.SCSQAUTH,DISP=SHR // DD DSN=IMSTST.IMF.RESLIB,DISP=SHR // DD DSN=IMSTST.RESLIB,DISP=SHR

// DD DSN=DB2TST.SDSNLOAD,DISP=SHR // DD DSN=EORGA.TEST.LOADLIB,DISP=SHR // DD DSN=IMSTST.DOPPSB,DISP=SHR //DFSESL DD DSN=DB2TST.SDSNLOAD,DISP=SHR // DD DSN=MQ2T.SCSQAUTH,DISP=SHR // DD DSN=MQ2T.SCSQANLE,DISP=SHR // DD DSN=IMSTST.RESLIB,DISP=SHR //IMS DD DSN=IMSTST.DOPPSB,DISP=SHR // DD DSN=IMSTST.DBDLIB,DISP=SHR //CSQSNAP DD SYSOUT=*

Hope it is useful. Regards, Kayal

You might also like