ヘッダー/明細行のスタイルを問い合わせる、やや複雑なアプリケーション・テンプレート例を示します。
/* ======================================================= */ /* GET NAMES OF UP TO 50 RELATED FILES */ /* Note that the user can select up to 50 physical or */ /* logical files including 1:n relationships.*/ /* ======================================================= */ @@GET_FILS TO(50) PHY_ONLY(*NO) SGL_ONLY(*NO)+ PROMPT('Enter the name of the base+ file to be used by this template')+ EXTEND('The file name may be speci+ fied partially (to cause a partia+ l' 'list of available files to be + displayed), or in left blank (to c+ ause a full list' 'of available fi+ les to be displayed).When a list+ of files is displayed,' 'the file + required may be selected from the + list.'' ' 'Use the HELP function + key for more details about this te+ mplate and' 'examples of the type+ of RDML applications it can create+ .')HELPIDS(HELP010 HELP020 HELP03+ 0 HELP040)/* ======================================================= *//* LOAD DETAILS OF FIELDS OF "HEADER" INTO LIST 1 *//* LOAD DETAILS OF FIELDS OF "BROWSE" INTO LIST 2 *//* Use special variable @@FAREAnn to separate fields in *//* the header and browse portions of the panel.*//* Note the use of an index to control the loading of *//* multiple file information.*//* ======================================================= */ @@CLR_LST NUMBER(1) @@CLR_LST NUMBER(2) @@SET_IDX IDX_NAME(CF) TO(1) A10:@@LABEL @@CMP_IDX IDX_NAME(CF) IDX_VALUE(@@TFMX) IF_GT(A20) @@IF COND((*IF @@FAREACF *NE B)) GOTO(A12) @@RTV_FLDS FROM_FILE(CF) INTO_LST(2) @@GOTO LABEL(A14) A12:@@RTV_FLDS FROM_FILE(CF) INTO_LST(1) A14:@@INC_IDX IDX_NAME(CF) @@GOTO LABEL(A10) A20:@@LABEL/* ====================================================*//* ASK THE USER TO SELECT THE HEADER FIELDS REQUIRED *//* ====================================================*/@@CLR_LST NUMBER(11)@@MAK_LSTS FROM_LSTS(1) INTO_LSTS((11 'Fields in'+ 'Header' 'Area' *SEQUENCE *ALL)) HELPI+ DS(HELP010 HELP020 HELP030 HELP040)/* ===================================================*//* ASK THE USER TO SELECT THE BROWSE FIELDS REQUIRED *//* ===================================================*/@@CLR_LST NUMBER(22)@@MAK_LSTS FROM_LSTS(2) INTO_LSTS((22 'Fields in'+ 'Detail/List' 'Area' *SEQUENCE *ALL)) + HELPIDS(HELP010 HELP020 HELP030 HELP0 + 40)/* ===================================================*//* ASK THE USER HOW TO DESIGN THE PANELS *//* ===================================================*/@@QUESTION PROMPT('Design fields in the header a + rea DOWN the screen or ACROSS the scre+ en') ANSWER(@@CANS002) EXTEND('Reply D+ OWN or ACROSS only.''If your header a+ rea contains 10 (or less) fields, DOWN+ is the ' 'recommended value.+ If your header area contains more than+ 10' 'fields, ACROSS is the recommended+ value.''Use the HELP function key for+ more information and examples.')LOWER+ (*NO) VALUES(DOWN ACROSS) HELPIDS(HELP+ 010 HELP020 HELP030 HELP040)/* ======================================================= *//* MERGE ALL RELATED KEY FIELDS INTO LIST 11 OR LIST 22 *//* AS *HIDDEN FIELDS.LIST 3 IS A WORKING LIST ONLY *//* Note the use of @@RTV_RELN command to get the keys of *//* the secondary files.*//* ======================================================= */ @@SET_IDX IDX_NAME(CF) TO(2) A30:@@LABEL @@CMP_IDX IDX_NAME(CF) IDX_VALUE(@@TFMX) + IF_GT(A40) @@CLR_LST NUMBER(3) @@RTV_RELN OF_FILE(CF) INTO_LST(3) @@IF COND((*IF @@FAREACF *NE B)) + GOTO(A34) @@IF COND((*IF @@FRELRCF *EQ M)) + GOTO(A34) @@MRG_LSTS FROM_LSTS((3 *HIDDEN)) INTO_LST(22) @@GOTO LABEL(A36) A34:@@MRG_LSTS FROM_LSTS((3 *HIDDEN)) INTO_LST(11) A36:@@INC_IDX IDX_NAME(CF) @@GOTO LABEL(A30) A40:@@LABEL/* ======================================================= *//* GENERATION OF RDML CODE STARTS HERE *//* ======================================================= */ FUNCTION OPTIONS(*NOMESSAGES *DEFERWRITE) GROUP_BY NAME(#HEADER) FIELDS(@@LST11) DEF_LIST NAME(#LIST) FIELDS((#LISTDUMMY *HIDDEN) @@LST22) @@COMMENT 'Loop until user EXITs or CANCELs' BEGIN_LOOP/* ======================================================= *//* REQUEST KEYS OF THE BASE FILE BE INPUT AND GET DATA *//* ======================================================= */ @@CLR_LST NUMBER(3) @@RTV_KEYS OF_FILE(1) INTO_LST(3) R10:REQUEST FIELDS(@@LST03) DESIGN(*@@CANS002) + IDENTIFY(*LABEL)/* ======================================================= *//* GENERATE FETCH TO THE PRIMARY FILE *//* ======================================================= */ @@COMMENT COMMENT('Fetch file @@FNAME01 details ') FETCH FIELDS((#HEADER)) + FROM_FILE(@@FNAME01) + WITH_KEY(@@LST03) NOT_FOUND(R10) + ISSUE_MSG(*YES) /* ======================================================= */ /* GENERATE FETCHES TO ALL FILES IN THE HEADER AREA */ /* ======================================================= */ @@SET_IDX IDX_NAME(CF) TO(2) H10:@@LABEL @@CMP_IDX IDX_NAME(CF) IDX_VALUE(@@TFMX) + IF_GT(H20) @@IF COND((*IF @@FAREACF *EQ B)) GOTO(H15) @@CLR_LST NUMBER(3) @@RTV_RELN OF_FILE(CF) INTO_LST(3) @@COMMENT COMMENT('Fetch file @@FNAMECF details ') FETCH FIELDS((#HEADER)) FROM_FILE(@@FNAMECF) + WITH_KEY(@@LST03) H15:@@INC_IDX IDX_NAME(CF) @@GOTO LABEL(H10) H20:@@LABEL /* ======================================================= */ /* NOW EXTRACT DATA TO BE PLACED INTO THE BROWSE LIST */ /* ======================================================= */ @@SET_IDX IDX_NAME(CF) TO(2) @@SET_IDX IDX_NAME(SC) TO(0) A50:@@LABEL @@CMP_IDX IDX_NAME(CF) IDX_VALUE(@@TFMX) + IF_GT(A80) @@IF COND((*IF @@FAREACF *NE B)) GOTO(A78) @@CLR_LST NUMBER(3) @@RTV_RELN OF_FILE(CF) INTO_LST(3) @@IF COND((*IF @@FRELRCF *EQ M)) GOTO(A55) /* FETCH INTO THE LIST ENTRY */ @@COMMENT COMMENT('Fetch file @@FNAMECF details ') FETCH FIELDS((#LIST)) FROM_FILE(@@FNAMECF) + WITH_KEY(@@LST03) @@GOTO LABEL(A78) /* THE ONE AND ONLY SELECT COMMAND */ A55:@@COMMENT COMMENT('Select all file @@FNAMECF details') @@INC_IDX IDX_NAME(SC) SELECT FIELDS((#LIST)) FROM_FILE(@@FNAMECF) + WITH_KEY(@@LST03) @@GOTO LABEL(A78) /* INC INDEX AND LOOP AROUND */ A78:@@INC_IDX IDX_NAME(CF) @@GOTO LABEL(A50) A80:@@LABEL/* ======================================================= *//* ADD_ENTRY AND ENDSELECT FOR THE LIST (IF SELECT USED) *//* ======================================================= */ @@CMP_IDX IDX_NAME(SC) IDX_VALUE(0) IF_EQ(A90) ADD_ENTRY TO_LIST(#LIST) ENDSELECT A90:@@LABEL/* ======================================================= *//* DISPLAY DETAILS TO THE USER *//* ======================================================= */ @@COMMENT COMMENT('Display results to the user') DISPLAY FIELDS(#HEADER) DESIGN(*@@CANS002)+ IDENTIFY(*LABEL)+ BROWSELIST(#LIST) @@COMMENT COMMENT('Clear header and list and + loop around ') CHANGE FIELD(#HEADER) TO(*DEFAULT) @@CMP_IDX IDX_NAME(SC) IDX_VALUE(0) IF_EQ(A95) CLR_LIST NAMED(#LIST) A95:@@LABEL END_LOOP/* ======================================================= *//* CLEAR ALL LISTS USED *//* ======================================================= */ @@CLR_LST NUMBER(1) @@CLR_LST NUMBER(2) @@CLR_LST NUMBER(3) @@CLR_LST NUMBER(11) @@CLR_LST NUMBER(12)