|
If its not free then its not an option - the client will not pay for it. I do not see it as a server function on the client AS/400.
thanks Marilyn
From: "Beppe Costagliola" <beppecosta@xxxxxxxx> Reply-To: RPG programming on the AS400 / iSeries <rpg400-l@xxxxxxxxxxxx> To: "RPG programming on the AS400 / iSeries" <rpg400-l@xxxxxxxxxxxx> Subject: Re: How to scan an entire array all at once (Corrected source) Date: Mon, 3 May 2004 17:32:58 +0200
Currently we succesfully parse MQ messages with IBM XMLPR500 in this way.
first we get the lengh of the message:
MQGMO.GMOPT = GMWT; // MQGMO_WAIT MQGMO.GMOPT += GMLK; // MQGMO_LOCK MQGMO.GMOPT += GMATM; // MQGMO_ACCEPT_TRUNCATED_MSG MQGMO.GMOPT += GMCONV; // MQGMO_CONVERT MQGMO.GMOPT += GMBRWF; // MQGMO_BROWSE_FIRST MQMD.MDMID = MINONE; // MQMI_NONE MQMD.MDCID = CINONE; // MQCI_NONE BUFLEN = 0; BUFPTR = %alloc(1); MQGET(HCONN: HQGET: MQMD: MQGMO: BUFLEN: BUFPTR: MSGLEN: CMPCOD: REASON);
then we get the message
BUFLEN = MSGLEN; BUFPTR = %realloc(BUFPTR:BUFLEN); MQGMO.GMOPT = GMNWT; // MQGMO_NO_WAIT MQGMO.GMOPT += GMMUC; // MQGMO_MSG_UNDER_CURSOR MQGMO.GMOPT += GMCONV; // MQGMO_CONVERT MQMD.MDMID = MINONE; // MsgId selector MQMD.MDCID = CINONE; // CorrelId selector MQMD.MDCSI = 280; // CCSID locale MQGET(HCONN: HQGET: MQMD: MQGMO: BUFLEN: BUFPTR: MSGLEN: CMPCOD: REASON);
then we call a program that parses the message only to get the method
MQ_PARSE (BUFPTR:MSGLEN);
This program parses the document and finds the method to call (here we have something like <Process>XYZ</Process> where XYZ is the program that actually parses the specific message:
QxmlInit(envData); DomParse =QxmlXercesDOMParser_new(PenvData); MemBufInputSource = QxmlMemBufInputSource_new( MSGPTR:MSGLEN:buf:280:0:0); QxmlXercesDOMParser_parse_InputSource(DomParse:MemBufInputSource); DomDoc = QxmlXercesDOMParser_getDocument(DomParse); GetTagOpt = %alloc(256); %str(GetTagOpt:256) = 'Process'; NodeList = QxmlDOMDocument_getElementsByTagName (DomDoc:GetTagOpt:Qxml_CHARSTR:0); Node = QxmlDOMNodeList_item(NodeList:0); if QxmlDOMNode_isNull(Node) = Qxml_NODNOTNUL; if QxmlDOMNode_getNodeType(Node) = Qxml_ELMNT_NOD; Child = QxmlDOMNode_getFirstChild(Node); if QxmlDOMNode_getNodeType(Child) = Qxml_TEXT_NOD; NodeValue =QxmlDOMNODE_getNodeValue(Child); QxmlTranscode(NodeValue:Qxml_UNICODE:oStgP:BpP:Bap:280); Method = %str(oStgP); endif; endif; endif;
and then call a program (in this example XYZ) that actually retrieves the elements from the parsed document:
call(e) Method parm DomDoc parm MSGPTR parm MSGLEN
------------ Beppe.
----- Original Message ----- From: "Rooney, Michael P" <michael.p.rooney@xxxxxxxxxxxxx> To: "RPG programming on the AS400 / iSeries" <rpg400-l@xxxxxxxxxxxx> Sent: Monday, May 03, 2004 5:02 PM Subject: RE: How to scan an entire array all at once (Corrected source)
>
> Marilyn,
>
> In cutting & pasting previous post, I inadvertantly omitted some source
> statements. The following is the corrected source:
>
> Regards,
>
> Michael Rooney
> Citigroup International
>
>
> H
>
*********************************************************************
> * Bind with service program LIBMQM in library QMQM and
> * service program QC2IO in QSYS library.
> *
> * Compile using:
> *
> * CRTRPGMOD MODULE(MQSample)
> * CRTPGM PGM(MQSample) BNDSRVPGM(QMQM/LIBMQM QSYS/QC2IO)
> *
>
*********************************************************************
> DMQSample PR
> *
> DMQCC_FAILED C CONST(2)
> D* Message Identifier
> DMQMI_NONE C CONST(X'00000000000000000000-
> D 0000000000000000000000000000-
> D ')
> D*
> D* Correlation Identifier
> DMQCI_NONE C CONST(X'00000000000000000000-
> D 0000000000000000000000000000-
> D ')
> D* Open Options
> DMQOO_...
> DINPUT_AS_Q_DEF C CONST(1)
> DMQOO_BROWSE C CONST(8)
> D* Object Types
> DMQOT_Q C CONST(1)
> DMQRC_NO_MSG_...
> DAVAILABLE C CONST(2033)
> *
> D/COPY QMQM/QRPGLESRC,CMQG
> DMQGMO DS
> D/COPY QMQM/QRPGLESRC,CMQGMOG
> DMQMD DS
> D/COPY QMQM/QRPGLESRC,CMQMDG
> DMQOD DS
> D/COPY QMQM/QRPGLESRC,CMQODG
> *
> DMQSample PI
> *
> *
> Dprintf PR EXTPROC('printf')
> D * value options(*string)
> * Queue Manager Name
> DQMgrName S 48A inz(*blank)
> * Connection handle
> DHconn S 10I 0
> * Completion code
> DCompCode S 10I 0
> * Reason code qualifying CompCode
> DReason S 10I 0
> * Options that control the action of MQOPEN
> DOptions S 10I 0
> * Object handle for inquirying MQ Manager
> DHobj S 10I 0
> * Length of the message
> DBufferLength S 10I 0
> * Length of the message
> DDataLength S 10I 0
> * Selector Count for MQINQ
> DReplyptr S *
> *
> C EVAL QMgrName = ' '
> *
> C MONITOR
> *
> C CALLP MQCONN(QMgrName:Hconn:CompCode:Reason)
> *
> C ON-ERROR
> C callp printf('Error loading MQSeries Prod'+
> C 'uct.....program terminating.' +
> C x'15')
> C move *on *inlr
> C return
> C ENDMON
> *
> C if CompCode = MQCC_FAILED
> *
> C callp printf('Program failed to connect to'+
> C ' Queue Manager('+%trimr(QMgrName)+').'
+
> C ' Reason Code is '+%char(Reason)+'.'+
> C x'15')
> *
> C callp printf('Program is terminating.' +
> C x'15')
> *
> C move *on *inlr
> C return
> C endif
> *
> * Set Open Options to Input & Browse
> *
> C EVAL Options = (MQOO_BROWSE +
MQOO_INPUT_AS_Q_DEF)
> /* Get the queue name */
> C EVAL ODON = 'EXCELLER.LATAM.LISTEN'
> *
> C EVAL ODOT = MQOT_Q
> *
> C CALLP
MQOPEN(Hconn:MQOD:Options:Hobj:CompCode:
> C Reason)
> C CompCode IFEQ MQCC_FAILED
> C callp printf('Program failed to open queue '+
> C %trimr(ODON) +'.' + ' Reason Code is '+
> C %char(Reason)+'.'+
> C 'Program is terminating.' +
> C x'15')
> *
> C move *on *inlr
> C return
> C endif
> ********************************************************************
> * Prepare to Get Messages from Queue *
> ********************************************************************
> *
> * Define Message Buffer Length
> *
> C EVAL BufferLength = 10000
> C eval Replyptr = %alloc(BufferLength)
> *
> C GetNxtMsg tag
> *
> * (re)Set Get Message Options to Accept Truncated Message, Fail if
Quiescing & Browse
> *
> C EVAL GMOPT = (64 + 8192 + 32 + 16384)
> *
> * Initialize Message and Correlation Id (may have been modified by
MQPUT).
> *
> C EVAL MDMID = MQMI_NONE
> C EVAL MDCID = MQCI_NONE
> *
> * Execute MQGET in Browse Mode
> *
> C CALLP MQGET(Hconn:Hobj:MQMD:MQGMO:
> C BufferLength:Replyptr:
> C DataLength:CompCode:
> C REASON)
> *
> C CompCode IFEQ MQCC_FAILED
> C if REASON = MQRC_NO_MSG_AVAILABLE
> C callp printf('Program completed!' +
> C x'15')
> *
> C else
> C callp printf('MQGET failed! '+
> C 'Reason Code is '+
> C
> C %char(Reason)+'.'+
> C 'Program is terminating.' +
> C x'15')
> *
> C endif
> *
> C dealloc Replyptr
> C move *on *inlr
> C return
> *
> C endif
> *
> C callp printf(%trimr(%str(Replyptr)) +
> C x'15')
> *
> C goto GetNxtMsg
>
> _______________________________________________
> This is the RPG programming on the AS400 / iSeries (RPG400-L) mailing list
> To post a message email: RPG400-L@xxxxxxxxxxxx
> To subscribe, unsubscribe, or change list options,
> visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
> or email: RPG400-L-request@xxxxxxxxxxxx
> Before posting, please take a moment to review the archives
> at http://archive.midrange.com/rpg400-l.
_______________________________________________ This is the RPG programming on the AS400 / iSeries (RPG400-L) mailing list To post a message email: RPG400-L@xxxxxxxxxxxx To subscribe, unsubscribe, or change list options, visit: http://lists.midrange.com/mailman/listinfo/rpg400-l or email: RPG400-L-request@xxxxxxxxxxxx Before posting, please take a moment to review the archives at http://archive.midrange.com/rpg400-l.
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2025 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.