Partner400 Logo
    Source Code for Open Access Handler Template
   

This is a basic template for an Open Access handler program. I developed it after I had written a number of other examples which is why you will find some of the techniques used slightly different and, hopefully, easier to follow.

  All About Us

  Where To See Us

  Magazine Articles

  Downloads

  WDSC and RSE

  On-site Training

  The RPG Redbook

  Home Page

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

	

     H DftActGrp(*No) Option(*SrcStmt)

       // User Data - normally in a copy source - modify as required
     D userData_T      ds
     D   userParm                    10a

        // Standard IBM supplied Open Access definitions
      /Copy QRNOPENACC

        // Copy constants for all RPG status codes - write your own or use mine
        //   email me at Contact at Partner400 dot com if you would like a copy
      /Copy MonStatCds

       // Protos for program and local procedures - not needed v7+
     D OpenFile        Pr

     D CloseFile       Pr

                                        // Change to ExtProc etc. if required
     D HandlerName     Pr                  ExtPgm('HANDLERNM')
     D   info                              likeds(QrnOpenAccess_T)


     d userData        ds                  Based(info.userArea)
       // Add fields as required - normally this is in a /Copy

       // Remove input and output buffer definitions if not needed
     d inputBuffer     s          64512a   Based(info.inputBuffer)
     d outputBuffer    s          64512a   Based(info.outputBuffer)

      // Field Names/Values structures if required
     D nvInput         ds                  likeds(QrnNamesValues_T)
     D                                     based(info.NamesValues)

       // State info
     d stateInfo       DS                  Based(info.stateInfo) Qualified
       // Add the data defintions for whatever fields you need preserve for a specific file

     D RcvDQHand1      PI
     D   info                              likeds(QrnOpenAccess_T)

      /Free

       Select;

         // Add When clauses here for all required operations
         //   READ, CHAIN, SETLL, etc. - Whatever you need

         When (info.rpgOperation = QrnOperation_OPEN);
           OpenFile();

         When (info.rpgOperation = QrnOperation_CLOSE);
           CloseFile();

         Other; // We don't know how to do this operation
           Dsply ('Unsupported function ' + %Char(info.rpgOperation)
                 + ' on queue ' + info.externalFile.name );
           info.rpgStatus = errIO;

         EndSl;

       Return;
      /End-Free

       // Basic outline logic for Open function
     P OpenFile        B
     D                 PI

      /Free
       // If no state info area yet allocate now and initialize
       If info.stateInfo = *null;
         info.stateInfo = %Alloc( %Size(stateInfo));
         Clear stateInfo;
       EndIf;

       // Check if user parm was supplied and any set defaults if needed
       //   Store the values in the state info area oitherwise if values change
       //   in the user parm it migth really mess us up
       If info.userArea = *Null;
         // Set any default values required by handler
       Else;
         // Copy user supplied data into state info area to preserve
       EndIf;

       Return;

      /End-Free

     P OpenFile        E


     P CloseFile       B
     D                 PI

      /Free

       // Release storage holding state information and set pointer to null.
       //   That way we can't ever reference it by mistake.
       Dealloc info.stateInfo;
       info.stateInfo = *null;
       info.rpgStatus = stsOK;

       Return;

      /End-Free

     P CloseFile       E

 
     
Return to Home Page  

Want more information?
Got a question or comment about the site?
Please feel free to Contact Us at any time.}