Skip to main content

Load All Subfile


Subfile is one of the most used concept in IBM i.

There are three different types of Subfiles.
  • Load All Sub File
  • Expandable Sub File (Click Here to see more about Expandable Subfile with an Example)
  • Single Page Subfile
Message Subfiles are used to display the messages on the screen. Click Here to see more about Message Subfiles.

We will see about Load All Subfile in this post. Click Here for Full Free Format RPGLE code for this example. 

Load All Subfile:

In Load-All subfile all the records are written to the subfile buffer at once and then the data in the subfile loaded from the buffer.
In this case SFLSIZ should be at-least 1 greater than the SFLPAG.
If we are writing more records in the subfile buffer than the SFLSIZ declared and SFLSIZ<9999, then the SFLSIZ is extended to accommodate all records till the size of 9999. 9999 is the buffer limit.
In this case PAGEUP AND PAGEDOWN is taken care by system. SFLPAG should be less than SFLSIZ.
In load-All subfile if we do PAGEDOWN and then press ENTER on the page, by-default ENTER bring the display screen to the very first page irrespective of the current page number. To avoid this situation, we use file information data structure to get the current page RRN number and pass it to the SFLRCDNBR hidden field defined in the display file DDS.


Sample program below will load records from Physical file to Load all subfile. Output will be shown as below.


 TESTLODALL               Test Load All Subfile                         10/09/14
   Display Records for Load All Subfile                                         
  Test Field1       Test Field2      Test Field3        Test Field4             
  -----------       -----------      -----------        -----------             
  TESTREC17         TESTREC17        TESTREC17          TESTREC17               
  TESTREC18         TESTREC18        TESTREC18          TESTREC18               
  TESTREC19         TESTREC19        TESTREC19          TESTREC19               
  TESTREC20         TESTREC20        TESTREC20          TESTREC20               
  TESTREC21         TESTREC21        TESTREC21          TESTREC21               
  TESTREC22         TESTREC22        TESTREC22          TESTREC22               
  TESTREC23         TESTREC23        TESTREC23          TESTREC23               
  TESTREC24         TESTREC24        TESTREC24          TESTREC24               
  F3=Exit  F12=Cancel                                                           

Sample Code for Physical File (TESTFILE)

     A          R TESTFR                                                        
     A            TSFLD1        10A                                             
     A            TSFLD2        10A                                             
     A            TSFLD3        10A                                             
     A            TSFLD4        10A                                             

Sample Code for Display File (TESTSUBFIL)

     A*%%TS  SD  20141010  053209  USERNAME    REL-V6R1M0  5761-WDS             
     A                                      DSPSIZ(24 80 *DS3)                  
     A          R SFDTAR                    SFL                                 
     A*%%TS  SD  20141010  053209  USERNAME    REL-V6R1M0  5761-WDS             
     A  70                                  SFLNXTCHG                           
     A            SFTSFLD1      10A  O 10  3                                    
     A            SFTSFLD2      10A  O 10 21                                    
     A            SFTSFLD3      10A  O 10 38                                    
     A            SFTSFLD4      10A  O 10 57                                    
     A          R SFCTLR                    SFLCTL(SFDTAR)                      
     A*%%TS  SD  20141010  053209  USERNAME    REL-V6R1M0  5761-WDS             
     A                                      CA03(03)                            
     A                                      CF12(12)                            
     A                                      PAGEDOWN(50)                        
     A                                      PAGEUP(51)                          
     A                                      OVERLAY                             
     A  25                                  SFLDSP                              
     A  26                                  SFLDSPCTL                           
     A  27                                  SFLINZ                              
     A  28                                  SFLCLR                              
     A  40                                  SFLEND(*MORE)                       
     A                                      SFLSIZ(9999)                        
     A                                      SFLPAG(0008)                        
     A                                  1 27'Test Load All Subfile'             
     A                                      COLOR(WHT)                          
     A                                  1 73DATE                                
     A                                      EDTCDE(Y)                           
     A                                      COLOR(BLU)                          
     A                                  2 73TIME                                
     A                                      COLOR(BLU)                          
     A            SFPGMNAM      10A  O  1  2                                    
     A                                  7  3'Test Field1'                       
     A                                  7 21'Test Field2'                       
     A                                  7 38'Test Field3'                       
     A                                  7 57'Test Field4'                       
     A                                  8  3'-----------'                       
     A                                  8 21'-----------'                       
     A                                  8 38'-----------'                       
     A                                  8 57'-----------'                       
     A                                  5  4'Display Records for Load All Subfi-
     A                                      le'                                 
     A                                      COLOR(BLU)                          
     A            CSRRRN         4S 0H      SFLRCDNBR(CURSOR)                   
     A            SFRRN          4S 0H                                          
     A          R SFFTRR                                                        
     A*%%TS  SD  20141010  024314  USERNAME    REL-V6R1M0  5761-WDS             
     A                                 23  3'F3=Exit  F12=Cancel'               
     A                                      COLOR(BLU)                          

Sample RPGLE Program for Loadall Subfile (TESTLODALL): Click Here for Full Free Format RPGLE code for this example.

       // Define Physical File                                                                     
     FTESTFILE  IF   E             DISK                                                            
       // Define Subfile                                                                            
     FTESTSUBFILCF   E             WORKSTN SFILE(SFDTAR:SFRRN)                

       // Define Required Variables

     C                   ExSr      Sub_Init                                   

     C                   ExSr      Sub_Main                                   

     C                   ExSr      Sub_Exit                                                         

       // Sub_Init - First time initialization routine                        

     C     Sub_Init      BegSr                                                

     C                   Eval      SFPGMNAM = 'TESTLODALL'                    

       // Clear Subfile                                                       

     C                   Eval      *In25 = *Off                               
     C                   Eval      *In26 = *Off                               
     C                   Eval      *In28 = *On                                
     C                   Write     SFCTLR                                     
     C                   Eval      *In28 = *Off                               
     C                   Eval      *In25 = *On                                
     C                   Eval      *In26 = *On                                

     C                   EndSr                                                
       // Sub_Main - Main Processing Routine                                  
     C     Sub_Main      BegSr                                                

     C                   ExSr      Sub_Load                                   
     C                   Dow       *In03 = *Off                               
     C                             And *In03 = *Off                           

       // If You Need Cursor to be Pointed on Specific Record,                    
       // You can move corresponding RRN to CSRRR field. In this                  
       // example I am placing Cursor on 3rd Page.                                
     C                   Eval      CSRRRN = 17                                    
     C                   If        SFRRN = 0                                      
     C                   Eval      *In25 = *Off                                   
     C                   EndIf                                                    
     C                   Write     SFFTRR                                         
     C                   Exfmt     SFCTLR                                         

     C                   EndDo                                                    

     C                   EndSr                                                    
       // Sub_Load - Load Subfile                                                 
     C     Sub_Load      BegSr                                                    

     C                   Eval      SFRRN  = 0                                     
     C                   Eval      CSRRRN = 1                                     
     C                   Read      TESTFILE                                       
     C                   Dow       Not %Eof(TESTFILE)                             
     C                             And SFRRN < 9999                               
     C                   Eval      SFRRN = SFRRN + 1                              
     C                   Eval      SFTSFLD1 = TSFLD1                              
     C                   Eval      SFTSFLD2 = TSFLD2                              
     C                   Eval      SFTSFLD3 = TSFLD3                              
     C                   Eval      SFTSFLD4 = TSFLD4                              
     C                   Write     SFDTAR                                         
     C                   Read      TESTFILE                                       
     C                   EndDo                                                    
     C                   Eval      *In40 = *On                                    
     C                   EndSr                                                    
       // Sub_Exit - Finalization Routine                                         
     C     Sub_Exit      BegSr                                                    
     C                   Eval      *InLr = *On                                    
     C                   EndSr                                                                      


  1. VERY GOOD EXEMPLE !! thanks !!

    1. Thanks Chris. Copy of the RPG code in full free format RPG is here if you are interested.


Post a Comment

Popular posts from this blog

All about READ in RPGLE & Why we use it with SETLL/SETGT?

READ READ is one of the most used Opcodes in RPGLE. As the name suggests main purpose of this Opcode is to read a record from Database file. What are the different READ Opcodes? To list, Below are the five Opcodes.  READ - Read a Record READC - Read Next Changed Record READE - Read Equal Key Record READP - Read Prior Record READPE - Read Prior Equal Record We will see more about each of these later in this article. Before that, We will see a bit about SETLL/SETGT .  SETLL (Set Lower Limit) SETLL accepts Key Fields or Relative Record Number (RRN) as Search Arguments and positions the file at the Corresponding Record (or Next Record if exact match isn't found).  SETGT (Set Greater Than) SETGT accepts Key Fields or Relative Record Number (RRN) as Search Arguments and positions the file at the Next Record (Greater Than the Key value). Syntax: SETLL SEARCH-ARGUMENTS/KEYFIELDS FILENAME SETGT  SEARCH-ARGUMENTS/KEYFIELDS FILENAME One of the below can be passed as Search Arguments. Key Fiel

What we need to know about CHAIN (RPGLE) & How is it different from READ?

CHAIN READ & CHAIN, These are one of the most used (& useful) Opcodes by any RPG developer. These Opcodes are used to read a record from file. So, What's the difference between CHAIN & READ?   CHAIN operation retrieves a record based on the Key specified. It's more like Retrieving Random record from a Database file based on the Key fields.  READ operation reads the record currently pointed to from a Database file. There are multiple Opcodes that start with READ and all are used to read a record but with slight difference. We will see more about different Opcodes and How they are different from each other (and CHAIN) in another article. Few differences to note.  CHAIN requires Key fields to read a record where as READ would read the record currently pointed to (SETLL or SETGT are used to point a Record).  If there are multiple records with the same Key data, CHAIN would return the same record every time. READE can be used to read all the records with the specified Ke

Extract a portion of a Date/Time/Timestamp in RPGLE - IBM i

%SUBDT Extracting Year, Month, Day, Hour, Minutes, Seconds or Milli seconds of a given Date/Time/Timestamp is required most of the times.  This can be extracted easily by using %SUBDT. BIF name looks more similar to %SUBST which is used to extract a portion of string by passing from and two positions of the original string. Instead, We would need to pass a value (i.e., Date, Time or Timestamp ) and Unit (i.e., *YEARS, *MONTHS, *DAYS, *HOURS, *MINUTES, *SECONDS or *MSECONDS) to %SUBDT.  Valid unit should be passed for the type of the value passed. Below are the valid values for each type. Date - *DAYS, *MONTHS, *YEARS Time - *HOURS, *MINUTES, *SECONDS Timestamp - *DAYS, *MONTHS, *YEARS, *HOURS, *MINUTES, *SECONDS, *MSECONDS Syntax: %SUBDT(value : unit { : digits { : decpos} }) Value and Unit are the mandatory arguments.  Digits and Decimal positions are optional and can only be used with *SECONDS for Timestamp. We can either pass the full form for the unit or use the short form. Below i