× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.


  • Subject: RE: QMHRDQM API - Retrieve Data Queue Message
  • From: Mark Drazic <Mark.Drazic@xxxxxxxxxxxx>
  • Date: Wed, 20 Dec 2000 09:47:14 -0600

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.
> ----------
> From:         Jim Langston[SMTP:jimlangston@conexfreight.com]
> Reply To:     RPG400-L@midrange.com
> Sent:         Tuesday, December 19, 2000 5:09 PM
> To:   RPG400-L@midrange.com
> Subject:      Re: QMHRDQM API - Retrieve Data Queue Message
> 
> Mark,
> 
> It would help us out tremendously if you would paste the code snippet
> where you are declaring the API and using it.
> 
> Regards,
> 
> Jim Langston
> 
> Mark Drazic wrote:
> > 
> > I am unable to get this API to return the pointer for the Receiver
> Variable
> > (1st parm).  Whether I send a *NULL pointer, or an already allocated
> one,
> > the API always returns the pointer as *NULL.  All other parms appear to
> be
> > correct, there are no error messages issued by the API, and entries do
> exist
> > on the Queue based on the results from the QMHQRDQD API.  If I can't use
> a
> > pointer, I am limited to a field size of 32,767 for all the Data Queue
> > entries, which will probably not be workable.
> > 
> > Is there some trick to getting this to work?  I am calling the API from
> a
> > Service Program in an Activation Group called QSRV, could this be
> affecting
> > the results?  I have noticed this problem in calling other IBM API's,
> and
> > RPG ILE needs to be able to receive pointer information for these types
> of
> > functions.
> > 
> > Any help would be greatly appreciated.
> +---
> | 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
> +---
> 
+---
| 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 thread ...

Follow-Ups:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

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.