An IBM i RPG subfile is a powerful programming construct used in RPG (Report Program Generator) on the IBM i platform (formerly AS/400 or iSeries) to handle the display and management of multiple records on a screen, typically in a list or table format. Subfiles are widely used in interactive applications to present data to users efficiently, allowing them to scroll through, select, update, or delete records. Below is an overview of what a subfile is, how it works, and its key components.

What is a Subfile?

A subfile is essentially a buffer or a temporary storage area in memory that holds a set of records to be displayed on a screen. It’s paired with a display file (defined in DDS - Data Description Specifications) to present data in a structured, scrollable format. Subfiles are ideal for scenarios like showing a list of customers, orders, or inventory items, where users need to interact with multiple records at once.

Key Components of a Subfile

Display File (DDS):
  • The subfile is defined in a display file using DDS keywords like SFL (Subfile) and SFLCTL (Subfile Control).
  • The SFL record format defines the layout of each row (e.g., fields like customer ID, name, etc.).
  • The SFLCTL record format manages the subfile’s behavior, such as scrolling, size, and control options.
RPG Program:
  • The RPG program populates the subfile with data, controls its display, and processes user interactions.
  • Common operations include loading records, clearing the subfile, and handling input from the user.
Subfile Record Number (Relative Record Number - RRN):
  • Each record in the subfile is assigned a relative record number, starting at 1, which the program uses to track and manage rows.

Types of Subfiles

Load-All Subfile:
  • All records are loaded into the subfile at once.
  • Suitable for small datasets (e.g., fewer than 9,999 records, limited by the SFLSIZ keyword).
  • Simple to implement but can be memory-intensive for large datasets.

Page-at-a-Time Subfile:

  • Loads only one page of records at a time (e.g., 10 rows per page).
  • Uses SFLSIZ (subfile size) equal to SFLPAG (page size).
  • More efficient for large datasets, as it loads data incrementally based on user scrolling.
Expanding Subfile:
  • Starts with SFLSIZ greater than SFLPAG and dynamically increases as more records are added.
  • Combines aspects of load-all and page-at-a-time, offering flexibility for varying data sizes.

Basic Workflow

Define the Subfile in DDS:
  • Create a subfile record format (SFL) and a control format (SFLCTL).
  • Specify keywords like SFLDSP (display subfile), SFLCLR (clear subfile), and SFLEND (scrolling indicator).
Initialize the Subfile in RPG:
  • Clear the subfile using SFLCLR.
  • Set the initial relative record number (RRN).
Load Data:
  • Read data from a database file (e.g., using READ or CHAIN).
  • Write each record to the subfile with WRITE to the subfile format.
  • Increment the RRN for each record.
Display the Subfile:
  • Use EXFMT (execute format) on the control record to show the subfile on the screen.
Handle User Input:
  • Process function keys (e.g., F3 to exit, F5 to refresh) or user selections (e.g., option fields).
  • Update, delete, or add records as needed.
{"email":"Email address invalid","url":"Website address invalid","required":"Required field missing"}
>