[ |../../index.htm#lansa/l4wdev05_0155.htm]
現在地:

4.3.7 ファイルへのレコード追加(同時に複数)

処理対象ファイル
次のフィールドから成る物理ファイル「TARGET」(売り上げ目標)

フィールド

タイプ

全桁数

説明

YEAR

S

2,0

MONTH

S

2,0

BRAND

A

5

ブランド番号/ID

QUANTITY

P

9,0

売り上げ目標数量

DOLLARS

P

11,2

売り上げ目標金額

 
RDMLプログラム
<< Define work fields for this function >> DEFINE     FIELD(#ERRCOUNT) TYPE(*DEC) LENGTH(7)             DECIMALS(0) << Define group to appear on top of screen >> GROUP_BY   NAME(#TIME)   FIELDS(#YEAR #MONTH) << Define group that contains all fields to be inserted >> GROUP_BY   NAME(#TARGET) FIELDS(#YEAR #MONTH #BRAND             #QUANTITY #DOLLARS) << Define list to be used for data entry >> DEF_LIST   NAME(#VALUES) FIELDS(#BRAND #QUANTITY #DOLLARS) << Loop until EXIT or MENU function key used >> BEGIN_LOOP << Clear screen and initialize list with 20 entries >>     CHANGE     FIELD(#TARGET) TO(*NULL)     SET_MODE   TO(*ADD)     INZ_LIST   NAMED(#VALUES) NUM_ENTRYS(20)     << Accept input until no errors exist in data >>     DOUNTIL    COND('#ERRCOUNT = 0')     SET_MODE   TO(*ADD)     DISPLAY    FIELDS(#TIME) BROWSELIST(#VALUES)     << Process all not "null" and not "accepted" records >>     CHANGE     FIELD(#ERRCOUNT) TO(0)     SELECTLIST NAMED(#VALUES) GET_ENTRYS(*NOTNULL *ADD)                    INSERT FIELDS(#TARGET) TO_FILE(TARGET)                           VAL_ERROR(L10)               L10  IF_STATUS  IS_NOT(*OKAY)                    CHANGE     FIELD(#ERRCOUNT)                                TO('#ERRCOUNT + 1')                    SET_MODE   TO(*ADD)                    ELSE                    SET_MODE   TO(*DISPLAY)                    ENDIF                    UPD_ENTRY  IN_LIST(#VALUES)                    ENDIF               ENDSELECT               ENDUNTIL END_LOOP
 
着目点:

INSERTコマンドでレコードが受理されたか否かを明示するようにしたい場合は、RDMLコマンドを次のように修正してください。
<< Define work fields for this function >> DEFINE     FIELD(#ERRCOUNT) TYPE(*DEC) LENGTH(7) DECIMALS(0) DEFINE     FIELD(#ACCEPTED) TYPE(*CHAR) LENGTH(3)             COLHDG('Target' 'has been' 'Accepted') << Define group to appear on top of screen >> GROUP_BY   NAME(#TIME)   FIELDS(#YEAR #MONTH) << Define group that contains all fields to be inserted >> GROUP_BY   NAME(#TARGET) FIELDS(#YEAR #MONTH #BRAND             #QUANTITY #DOLLARS) << Define list to be used for data entry >> DEF_LIST   NAME(#VALUES) FIELDS(#BRAND #QUANTITY              #DOLLARS (#ACCEPTED *OUTPUT)) << Loop until EXIT or MENU function key used >> BEGIN_LOOP << Clear screen and initialize list with 20 entries >>     CHANGE     FIELD(#TIME)   TO(*NULL)     CHANGE     FIELD(#VALUES) TO(*NULL)     SET_MODE   TO(*ADD)     INZ_LIST   NAMED(#VALUES) NUM_ENTRYS(20)     << Accept input until no errors exist in data >>     DOUNTIL    COND('#ERRCOUNT = 0')     SET_MODE   TO(*ADD)     DISPLAY    FIELDS(#TIME) BROWSELIST(#VALUES)     << Process all not "null" and not "accepted" records >>     CHANGE     FIELD(#ERRCOUNT) TO(0)     SELECTLIST NAMED(#VALUES) GET_ENTRYS(*NOTNULL *ADD)                INSERT FIELDS(#TARGET) TO_FILE(TARGET)                 VAL_ERROR(L10)             L10  IF_STATUS  IS_NOT(*OKAY)                 CHANGE     FIELD(#ERRCOUNT) TO('#ERRCOUNT  1')                 SET_MODE   TO(*ADD)                 ELSE                 SET_MODE   TO(*DISPLAY)                 CHANGE     FIELD(#ACCEPTED) TO(YES)                 ENDIF                 UPD_ENTRY  IN_LIST(#VALUES)                 ENDIF             ENDSELECT             ENDUNTIL END_LOOP The main processing loop of the program could be modified to allow updates to "accepted" records like this: << Define work fields for this function >> DEFINE     FIELD(#ERRCOUNT) TYPE(*DEC) LENGTH(7) DECIMALS(0) DEFINE     FIELD(#ADD_RRN)  TYPE(*DEC) LENGTH(15) DECIMALS(0) DEFINE     FIELD(#ACCEPTED) TYPE(*CHAR) LENGTH(3)             COLHDG('Target' 'has been' 'Accepted') << Define group to appear on top of screen >> GROUP_BY   NAME(#TIME)   FIELDS(#YEAR #MONTH) << Define group that contains all fields to be inserted >> GROUP_BY   NAME(#TARGET) FIELDS(#YEAR #MONTH #BRAND             #QUANTITY #DOLLARS) << Define list to be used for data entry >> DEF_LIST   NAME(#VALUES) FIELDS(#BRAND #QUANTITY #DOLLARS            (#ACCEPTED *OUTPUT)(#ADD_RRN *HIDDEN)) << Loop until EXIT or MENU function key used >> BEGIN_LOOP     << Clear screen and initialize list with 20 entries >>     CHANGE     FIELD(#TIME)   TO(*NULL)     CHANGE     FIELD(#VALUES) TO(*NULL)     SET_MODE   TO(*ADD)     INZ_LIST   NAMED(#VALUES) NUM_ENTRYS(20)     DOUNTIL    COND('#ERRCOUNT = 0')     SET_MODE   TO(*ADD)     DISPLAY    FIELDS(#TIME) BROWSELIST(#VALUES)     << Process all not "null" records >>      CHANGE     FIELD(#ERRCOUNT) TO(0)      SELECTLIST NAMED(#VALUES) GET_ENTRYS(*NOTNULL)         IF     COND('#ACCEPTED = YES')         UPDATE FIELDS(#TARGET) IN_FILE(TARGET) VAL_ERROR(L10)                 WITH_RRN(#ADD_RRN)         ELSE         INSERT FIELDS(#TARGET) TO_FILE(TARGET)                 VAL_ERROR(L10) RETURN_RRN(#ADD_RRN)         ENDIF    L10  IF_STATUS  IS_NOT(*OKAY)         CHANGE     FIELD(#ERRCOUNT) TO('#ERRCOUNT  1')         ELSE         CHANGE     FIELD(#ACCEPTED) TO(YES)         ENDIF         SET_MODE   TO(*ADD)         UPD_ENTRY  IN_LIST(#VALUES)         ENDIF    ENDSELECT    ENDUNTIL END_LOOP
 
[ |../../index.htm#lansa/l4wdev05_0155.htm]