14.23.1 単純なデータ入力プログラム

データ入力プログラムに使うごく簡単なアプリケーション・テンプレート例を以下に示します。

/* ===================================================  */
/* ASK FOR THE "WORD" - ask the user a question.*/
/* Note the prompt text and extended prompt text that   */
/* can be entered on the command.More detailed help    */
/* can also be entered in HELP panels for the template.*/
/* Note the special format of the ANSWER parameter.*/
/* ==================================================== */
@@QUESTION PROMPT('Supply word to describe+ 
           WHAT this data entry program wo+
           rks with') ANSWER(@@CANS001) EX+
           TEND('The word you specify here+
           is used to build messages that +
           appear on the' 'data entry scre+
           en panel.You should use ONE wo+
           rd only, use lowercase' 'charac+
           ters only and only use singular+ 
           form (eg:"customer", "employee+
           "' '"order").Do NOT use more t+
           han 18 characters in your answe+
           r.''Use the HELP function key +
           for more information and exampl+
           es.')HELPIDS (HELP010 HELP020 +
           HELP030 HELP040 HELP050)
/* ====================================================*/
/* GET NAME OF JUST ONE PHYSICAL FILE                  */
/* Ask the user to enter the name of a single primary  */
/* file used for data entry.Note the prompt text      */
/* and extended prompt text that can be entered on the */
/* command.More detailed help can also be entered on  */
/* HELP panels for the template.*/
/* ====================================================*/
@@GET_FILS TO(1) PROMPT('Enter name of PHYSICAL 
           file to be used by this template') E+
           XTEND('The file name may be specifie+
           d partially (to cause a partial' 'li+
           st of available files to be displaye+
           d), or in left blank (to cause a ful+
           l list' 'of available files to be di+
           splayed).When a list of files is d+
           isplayed,' 'the file required may be+ 
           selected from the list.' ' ' 'Use t+
           he HELP function key for more detail+
           s about this template and' 'examples+
           of the type of RDML applications it +
           can create.')HELPIDS(HELP010 HELP02+
           0 HELP030 HELP040 HELP050)
/* =============================================== */
/* GET FIELDS OF CHOSEN FILE INTO LIST 1           */
/* Note that all lists must be defined by an       */
/* @@CLR_LST command before being used in an       */
/* application template.*/
/* =============================================== */
@@CLR_LST  NUMBER(1)
@@RTV_FLDS FROM_FILE(1) INTO_LST(1)
/* =============================================== */
/* GET KEYS OF CHOSEN FILE INTO LIST 2             */
/* =============================================== */
@@CLR_LST  NUMBER(2)
@@RTV_KEYS OF_FILE(1) INTO_LST(2)
/* ================================================= */
/* GET USER TO CHOOSE FIELDS TO APPEAR ON PANEL      */
/* AND PUT RESULTS INTO LIST 3                       */
/* Note how the keys of the file are used as a       */
/* force list to ensure all the fields are chosen.*/
/* Note the column headings for the selection column */
/* and that sequence numbers are pre-filled on all   */
/* fields in the selection list.This allows fields  */
/* to be ordered in the desired sequence.*/
/* ================================================= */
@@CLR_LST  NUMBER(3)
@@MAK_LSTS FROM_LSTS(1) FORCE_LSTS(2) INTO_LSTS+
           ((3 'Fields to' 'Appear on' 'Entry P+
           anel' *SEQUENCE *ALL)) HELPIDS(HELP0+
           10 HELP020 HELP030 HELP040 HELP050)
/* ============================================== */
/* GET USER TO CHOOSE FIELDS TO WORK WITHIN       */
/* PROGRAM AND PUT RESULTS INTO LIST 4            */
/* Note that this list only requires the user to  */
/* enter anynon-blank character to select a field.*/
/* ===============================================*/
@@CLR_LST  NUMBER(4)
@@MAK_LSTS FROM_LSTS(1) INTO_LSTS((4 'Fields to ' '+
           Work with  ''in Program ' *YESNO *NO)) H+ 
           ELPIDS(HELP010 HELP020 HELP030 HELP040 H+
           ELP050)
/* =================================================== */
/* MERGE FIELDS IN LIST 4 INTO LIST 3 AS *HIDDEN       */
/* The fields selected as fields to be worked with in  */
/* the program are merged to list 3 with the *HIDDEN   */
/* attribute if not already selected in list 3 by the  */
/* previous @@MAK_LSTS command.*/
/* =================================================== */
@@MRG_LSTS FROM_LSTS((4 *HIDDEN)) INTO_LST(3)
/* =============================================== */
/* ASK HOW THE PANEL IS TO BE DESIGNED             */
/* =============================================== */
@@QUESTION PROMPT('Design fields on data entry+ 
           panel DOWN the screen or ACROSS the+ 
           screen') ANSWER(@@CANS002) EXTEND('+
           Reply DOWN or ACROSS only.''If you+
           r data entry panel contains 17 (or +
           less) fields, DOWN is the   ' 'reco+
           mmended value.If your data entry p+ 
           anel contains more than 17' 'fields+
           , ACROSS is the recommended value.'+
           'Use the HELP function key for more+
           information and examples.')LOWER(*+
           NO) VALUES(DOWN ACROSS) HELPIDS(HEL+
           P010 HELP020 HELP030 HELP040 HELP05+
           0)
/* ==================================================*/
/* GENERATE THE RDML PROGRAM                         */
/* The following code consists only of RDML that     */
/* will appear in the generated RDML program.*/
/* Note the use of special @@ variables in the RDML  */
/* commands--these are substituted when the template */
/* is executed.*/
/* ================================================= */
@@COMMENT  'Function control options'
FUNCTION   OPTIONS(*NOMESSAGES *DEFERWRITE)
@@COMMENT  'Group and field declarations'
/*                                                     */
/* The following command will not be accepted by the   */
/* CL syntax checker, it must be forced to be accepted */
/* as it will be quite valid when the special variable */
/* @@LST03 is relaced by the list 3 elements when      */
/* executing this template.Do not code                */
/* FIELDS((#@@LST03))as this will generate             */
/* an invalid RDML command.This error                 */
/* may also be true for other RDML commands.It        */
/* will be necessary to force these errors to          */
/* be accepted also (e.g. the DESIGN parameter of      */
/* the REQUEST command)                                */
/*                                                     */
GROUP_BY   NAME(#PANELDATA) FIELDS(@@LST03)
@@COMMENT  'Issue initial data entry message'
MESSAGE    MSGID(DCU0010) MSGF(DC@M01) +
           MSGDTA('''@@CANS001''')
@@COMMENT  'Do data entry until terminated by +
           EXIT or CANCEL'
BEGIN_LOOP
@@COMMENT  'Request user inputs or corrects details'
REQUEST    FIELDS(#PANELDATA) DESIGN(*@@CANS002)+ 
           IDENTIFY(*LABEL)
@@COMMENT  'Perform any program level validation here'
BEGINCHECK
ENDCHECK
@@COMMENT  'Attempt to insert data into the data base'
INSERT     FIELDS((#PANELDATA)) TO_FILE(@@FNAME01)
@@COMMENT  'If okay, reset fields and issue accepted +
           message'
CHANGE     FIELD(#PANELDATA) TO(*DEFAULT)
MESSAGE    MSGID(DCU0011) MSGF(DC@M01) +
           MSGDTA('''@@CANS001''')
END_LOOP
/* =============================================== */
/* CLEAR ALL LISTS USED                            */
/* At the end of all application templates, it     */
/* is suggested that all work lists in the         */
/* template are cleared to delete all work records */ 
/* from the database.*/
/* =============================================== */
@@CLR_LST  NUMBER(1)
LST  NUMBER(2)
@@CLR_LST  NUMBER(3)
@@CLR_LST  NUMBER(4)