14.23.1 Simple data entry program
1. The following is an example of a simple application template for a data entry program:
/* =================================================== */
/* 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)