|
Mark Drazic wrote:
> Brief code snippets for this Service Program, which is running in Activation
> Group QSRV.
>
> This is the version used with a Pointer for the Receiver Variable, which
> always came back *Null whether the pointer was allocated or not. Some of
> the information, prefixed "dQD", comes from the Retrieve Data Queue
> Description API successfully called prior to this call. Fields prefixed
> "pp" are passed into this procedure.
>
> D @lenOfDQEntLst...
> D S 9B 0
> D @dQEntListPtr...
> D S * Inz(*Null)
> D @dQELFName S 8 Inz('RDQM0100')
> D @lenOfMSelInf S 9B 0 Inz(8)
> D @mSelInfFName S 8 Inz('RDQS0100')
>
> DDQSelInf01DS DS
> D @dQSelectionType...
> D 1
> D @dQReserved02...
> D 3
> D @dQNumberOfMessageTextBytesToRetrieve...
> D 9B 0
>
> DDQEntInfHdrDS DS Based(@dQEntHdrDSPtr)
> D @dQBytesReturned...
> D 9B 0
> D @dQBytesAvailable...
> D 9B 0
> D @dQNumberOfMessagesReturned...
> D 9B 0
> D @dQNumberOfMessagesAvailable...
> D 9B 0
> D @dQMessageKeyLengthReturned...
> D 9B 0
> D @dQMessageKeyLengthAvailable...
> D 9B 0
> D @dQMessageTextLengthReturned...
> D 9B 0
> D @dQMessageTextLengthAvailable...
> D 9B 0
> D @dQEntryLengthReturned...
> D 9B 0
> D @dQEntryLengthAvailable...
> D 9B 0
> D @dQOffsetToFirstMessageEntry...
> D 9B 0
> D @dQActualDataQLibraryName...
> D 10
> D @dQReserved01...
> D 1
>
> D @dQEntHdrDSPtr S * Inz(*Null)
>
> C Eval @lenOfDQEntLst =
> C (@dQDMessageLength *
> @dQDNumberOfMessages)
> C + %Len(DQEntInfHdrDS)
> C + ((%Len(DQEntInfDS) *
> @dQDNumberOfMessages))
> C Eval @qualDQName = ppDataQName +
> ppDataQLibrary
> C Eval @dQSelectionType = 'A'
> C Eval @dQNumberOfMessageTextBytesToRetrieve =
> C
> @dQDMessageLength
>
> *==================
> * Call API to Retrieve Data Queue Entries
> C Call (E) 'QMHRDQM'
> C Parm @dQEntListPtr
> Receiver Variable
> C Parm @lenOfDQEntLst
> Length of Receiver Variable
> C Parm @dQELFName
> Format name
> C Parm @qualDQName
> Qualified Data Queue Name
> C Parm DQSelInf01DS
> Message Selection Information
> C Parm @lenOfMSelInf
> Length of Message Selection Information
> C Parm @mSelInfFName
> Message Selection Information Format Name
> C Parm APIErrorDS
> Error Data Structure
>
> As stated, the pointer as a Receiver Variable is always returned *Null.
> But, if the pointer is changed to a field name, the API immediately starts
> to work and returns information.
>
> D @dQEntListDta...
> D S 32767 Based(@dQEntListPtr)
>
> C If @dQEntListPtr = *Null
> C Eval @lenOfDQEntLst = %Len(@dQEntListDta)
> C Alloc @lenOfDQEntLst@dQEntListPtr
> C EndIf
>
> *==================
> * Call API to Retrieve Data Queue Entries
> C Call (E) 'QMHRDQM'
> C Parm @dQEntListDta
> C Parm @lenOfDQEntLst
> C Parm @dQELFName
> C Parm @qualDQName
> C Parm DQSelInf01DS
> C Parm @lenOfMSelInf
> C Parm @mSelInfFName
> C Parm APIErrorDS
>
> The problem with this method is the 32K limit, which in our case, where we
> have Data Queues backed up with a lot of entries and some Queues which have
> long lengths, we can't return enough information to satisfy our users.
> Also, many API's return a Receiver Variable, and I have yet been able to get
> any of them to work with a pointer, including both external calls and
> procedural calls. Having the ability to utilize more memory dynamically
> would be a big plus in using the API's.
>
> Again, any help would be greatly appreciated.
Mark,
I did a little experiment with this API a few years ago and I could not use
pointers to reference the RTNVAR (being on V3R2M0). I suggests to code the
RTNVAR
as a data structure and skip the idea of using a pointer. Required information
on
the offset of the first message and the next message(s) is stored in the RTNVAR.
How do you want to extract that with a pointer? IMHO the datastructure approach
is in that respect much simpler.
The things I found out is:
With a keyed data queue you can settle to retrieve the next set of messages. Of
course this also depends on the composition of the key data.
With a non keyed data queue you can not settle and will always retrieve the
first
messages.
So the use of this API seems very limited to me. My experiment resulted in a
copy
programme to another data queue or a PF and vice versa.
With regards,
Carel Teijgeler
+---
| This is the RPG/400 Mailing List!
| To submit a new message, send your mail to RPG400-L@midrange.com.
| To subscribe to this list send email to RPG400-L-SUB@midrange.com.
| To unsubscribe from this list send email to RPG400-L-UNSUB@midrange.com.
| Questions should be directed to the list owner/operator: david@midrange.com
+---
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.