RPG Open Access

RPG Open Access

:: IBM i

 

 

Prerequisite 

OS v6+

1) You already have the product 5733-OAR (CHKPRDOPT PRDID(5733OAR))
Remove product 5733-OAR and follow instructions in 2).

 

2) Open Access is now free and part of the RPG compiler, then you can either:
Upgrade 5761-WDS if you are in v6 or 5770-WDS if you are in v7.
or
Install the following PTFs for v6: SI45906, (and optionally for ISV: SI45904)
Install the following PTFs for v7: SI45905, (and optionally for ISV: SI45903, SI45902)
 

 

How to create an RPG Open Access Handler - Example01 

  

  1. This example will use a simple file from which the data structure will be used for the Handler output.
  2. You can insert any code extension to use the file output values within the handler.
  3. (to create an IFS doc, spreadsheet... call a websrv... etc.)
  4. 1. Source member: HDLWRT    - The Open Access handler
  5. 2. Source member: HDLWRTRPG - The RPG using the handler
  6. 3. Source member: MYFILE    - The PF used by the RPG and the handler
  7. =======================================================================================================
  8.  
  9.       * PASCAL/QRPGLESRC (HDLWRT)    
  10.       * Author: Pascal Polverini
  11.       * Open Accesss Handler example for PF/LF open/close/write
  12.       *
  13.       * Compilation:
  14.       *    crtrpgmod pascal/HDLWRT srcfile(pascal/qrpglesrc)
  15.       *    crtsrvpgm pascal/HDLWRT module(pascal/HDLWRT) export(*all)
  16.       *
  17.       * The PF MYFILE used in this example is as follow:
  18.       *    A          R MYREC
  19.       *    A            FLD01          5  0
  20.       *    A            FLD02         30
  21.       *    A            FLD03        100
  22.       *
  23.       * ==> Change MYFILE with your-file in:
  24.       *     - extname(MYFILE:*output)             at -D RcdFmto       E DS- line
  25.       *     - if fld.externalName = 'FLD01'...    at -setOneValue         - procedure
  26.       *     -    repeat it for any fields
  27.       * ==> Add your code to deal with the WRITE  at -disk_WRITE          - procedure
  28.       *
  29.       *========================================================================
  30.      H nomain
  31.      H option(*srcstmt)
  32.       *========================================================================
  33.      D RcdFmto       E DS                  extname(MYFILE:*output)
  34.       *========================================================================
  35.       /copy QOAR/qrpglesrc,qrnopenacc
  36.       *========================================================================
  37.      D OADISK          pr                  extproc('OADISK')
  38.      D   info                              likeds(QrnOpenAccess_T)
  39.      D disk_OPEN...
  40.      D                 pr              n                                        *on=ok
  41.      D   info                              likeds(QrnOpenAccess_T)
  42.      D disk_CLOSE...
  43.      D                 pr              n                                        *on=ok
  44.      D   info                              likeds(QrnOpenAccess_T)
  45.      D disk_WRITE...
  46.      D                 pr
  47.      D   info                              likeds(QrnOpenAccess_T)
  48.      D setValues...
  49.      D                 pr
  50.      D   info                              likeds(QrnOpenAccess_T)
  51.      D setOneValue...
  52.      D                 pr
  53.      D   fld                               likeds(QrnNameValue_T)
  54.       *========================================================================
  55.      P OADISK          b                   export
  56.      D                 pi
  57.      D   info                              likeds(QrnOpenAccess_T)
  58.       /free
  59.  
  60.          if info.rpgOperation = QrnOperation_OPEN;
  61.             if not disk_OPEN(info);
  62.                dsply ('File ' + %trim(info.externalFile.name)
  63.                       + ' of type ' + %trim(info.RpgDevice)
  64.                       + ' not handled.' );
  65.                info.rpgStatus = 1299;
  66.                return;
  67.             endif;
  68.          elseif info.rpgOperation = QrnOperation_CLOSE;
  69.             if disk_CLOSE(info);
  70.             endif;
  71.          elseif info.rpgOperation = QrnOperation_WRITE;
  72.             callp disk_WRITE(info);
  73.          else;
  74.             dsply ('Unhandled operation for disk file '
  75.                                           + %char(info.rpgOperation));
  76.             info.rpgStatus = 1299;
  77.          endif;
  78.       /end-free
  79.      P OADISK          e
  80.  
  81.       *========================================================================
  82.      P disk_OPEN...
  83.      P                 b
  84.      D                 pi              n
  85.      D   info                              likeds(QrnOpenAccess_T)
  86.       /free
  87.             if info.RpgDevice <> 'D';                        // disk (D)
  88.                return *off;
  89.             endif;
  90.             info.useNamesValues = '1';
  91.             return *on;
  92.       /end-free
  93.      P                 e
  94.       *========================================================================
  95.      P disk_CLOSE...
  96.      P                 b
  97.      D                 pi              n
  98.      D   info                              likeds(QrnOpenAccess_T)
  99.       /free
  100.             return *on;
  101.       /end-free
  102.      P                 e
  103.       *========================================================================
  104.      P disk_WRITE...
  105.      P                 b
  106.      D                 pi
  107.      D   info                              likeds(QrnOpenAccess_T)
  108.       /free
  109.             setValues(info);
  110.             // now the DS RcdFmto is fulfilled and ready to be used.
  111.             // Add your code here ...
  112.             return;
  113.       /end-free
  114.      P                 e
  115.       *========================================================================
  116.      P setValues...
  117.      P                 b
  118.      D                 pi
  119.      D   info                              likeds(QrnOpenAccess_T)
  120.      D nv              ds                  likeds(QrnNamesValues_T)
  121.      D                                     based(pNameValues)
  122.      D i               s             10i 0
  123.       /free
  124.          pNameValues = info.namesValues;
  125.          for i = 1 to nv.num;
  126.             if nv.field(i).output;
  127.                setOneValue (nv.field(i));
  128.             endif;
  129.          endfor;
  130.       /end-free
  131.      P                 e
  132.       *========================================================================
  133.      P setOneValue...
  134.      P                 b
  135.      D                 pi
  136.      D   fld                               likeds(QrnNameValue_T)
  137.      D val             s          32767a   based(pVal)
  138.       /free
  139.          pVal = fld.value;
  140.  
  141.          if     fld.externalName = 'FLD01';
  142.                 RcdFmto.fld01 = %dec(%subst(val:1:5):5:0);    //remember: FLD01 (5 0)
  143.          elseif fld.externalName = 'FLD02';
  144.                 RcdFmto.fld02 = val;
  145.          elseif fld.externalName = 'FLD03';
  146.                 RcdFmto.fld03 = val;
  147.          endif;
  148.  
  149.       /end-free
  150.      P                 e
  151.  
  152.  
  153. =======================================================================================================
  154.       * PASCAL/QRPGLESRC (HDLWRTRPG)
  155.       *
  156.      H dftactgrp(*NO)                                                      
  157.      H option(*srcstmt)                                                    
  158.       *=====================================================================
  159.      FMYFILE    IF A E             DISK    extfile('MYFILE')                
  160.      F                                     handler('PASCAL/HDLWRT (OADISK)')
  161.       *=====================================================================
  162.       /free                                                                
  163.                                                                            
  164.          FLD01 = 12345;                                                    
  165.          FLD02 = 'abc';                                                    
  166.          FLD03 = 'Heureux qui comme Ulysse conquit la toison d''or';        
  167.          write myrec;                                                      
  168.                                                                            
  169.          *inlr = '1';                                                      
  170.  
  171.  
  172. =======================================================================================================
  173.       * PASCAL/QDDSSRC (MYFILE)
  174.       *
  175.      A          R MYREC              
  176.      A            FLD01          5  0
  177.      A            FLD02         30  
  178.      A            FLD03        100

Comments