Example 3: INPUT ARRAY using a dynamic array
Form definition file
"custlist.per":
SCHEMA shop 
LAYOUT
TABLE
{
 Id       First name   Last name 
[f001    |f002        |f003        ]
[f001    |f002        |f003        ]
[f001    |f002        |f003        ]
[f001    |f002        |f003        ]
[f001    |f002        |f003        ]
[f001    |f002        |f003        ]
} 
END
END
TABLES
  customer 
END
ATTRIBUTES
  f001 = customer.id ;
  f002 = customer.fname ;
  f003 = customer.lname, NOT NULL, REQUIRED ;
END
INSTRUCTIONS
  SCREEN RECORD sr_cust( customer.* );
ENDSCHEMA shop 
MAIN
  DEFINE custarr DYNAMIC ARRAY OF RECORD LIKE customer.*
  DEFINE counter INTEGER
  FOR counter = 1 TO 500 
    LET custarr[counter].id = counter 
    LET custarr[counter].fname = "ff"||counter 
    LET custarr[counter].lname = "NNN"||counter 
  END FOR
    
  OPEN FORM f FROM "custlist"
  DISPLAY FORM f 
    
  INPUT ARRAY custarr WITHOUT DEFAULTS FROM sr_cust.*
                ATTRIBUTES ( UNBUFFERED )
      ON ROW CHANGE
        MESSAGE "Row #"||arr_curr()||" has been updated."
  END INPUT
    
END MAIN