|
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-2024 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.