You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 2 Current »

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

7.45.3 ENDCHECK の使用例

例1:ユーザーに、製品番号、受注番号、および数量を入力するよう要求し、次にフィールドに対して妥当性検査を実行します。
REQUEST     FIELDS(#PRODNO #ORDNUM #QUANTITY)   BEGINCHECK FILECHECK   FIELD(#PRODNO) USING_FILE(PRODUCT) MSGTXT('Product number not found in product master') RANGECHECK  FIELD(#ORDNUM) RANGE(A000000 Z999999) MSGTXT('Order number is not in range A000000  Z999999') RANGECHECK  FIELD(#QUANTITY) RANGE(1 9999) MSGTXT('Quantity ordered must be in range 1  9999') ENDCHECK  
ENDCHECKコマンドではデフォルト値IF_ERROR(*LASTDIS)が指定されているため、以下のように指定しても同じ結果が得られます。
REQUEST     FIELDS(#PRODNO #ORDNUM #QUANTITY) L1: BEGINCHECK FILECHECK   FIELD(#PRODNO) USING_FILE(PRODUCT) MSGTXT('Product number not found in product master') RANGECHECK  FIELD(#ORDNUM) RANGE(A000000 Z999999) MSGTXT('Order number is not in range A000000  Z999999') RANGECHECK  FIELD(#QUANTITY) RANGE(1 9999) MSGTXT('Quantity ordered must be in range 1  9999') ENDCHECK    IF_ERROR(L1)  
例2:デフォルト値*LASTDISを指定すると、以下の例に示すように、実際には「このネスト・レベル(またはそれ以上のレベル)で直前に表示された画面」が使用されます。
REQUEST     FIELDS(#FIELD01) <-----------------------------  IF         COND('#FIELD01 *LT 10')                        |             REQUEST     FIELDS(#FIELD02) <-----------     |             BEGINCHECK                                |    |             RANGECHECK  FIELD(#FIELD01) RANGE(5 9)    |    |             RANGECHECK  FIELD(#FIELD02) RANGE(10 20)  |    |             ENDCHECK -------------------------------     |  ELSE                                                      |             BEGINCHECK                                     |             RANGECHECK  FIELD(#FIELD01) RANGE(15 19)       |             ENDCHECK -------------------------------------  ENDIF  
矢印は、いずれかのENDCHECKコマンドの妥当性検査ブロック内で妥当性検査エラーが検出された場合に制御が渡される先を示しています。
この例をそのままコーディングすると、ユーザーがFIELD01に指定した値が10未満であっても、5~9の範囲内にない場合、ユーザーにFIELD01のエラーを修正する機会が与えられないため、実用性に欠けます。この場合、エラー・メッセージが画面の22/24行目に表示されますが、FIELD01は表示されないため、修正することができません。
この例は、以下のようにコーディングすることにより改善できます。
REQUEST     FIELDS(#FIELD01)  <----------------
BEGINCHECK                                     | IF          COND('#FIELD01 *LT 10')            | RANGECHECK  FIELD(#FIELD01) RANGE(5 9)         | ELSE                                           | RANGECHECK  FIELD(#FIELD01) RANGE(15 19)       | ENDIF                                          | ENDCHECK --------------------------------------   IF          COND('#FIELD01 *LT 10')             REQUEST     FIELDS(#FIELD02) <-------------             BEGINCHECK                                 |             RANGECHECK  FIELD(#FIELD02) RANGE(10 20)   |             ENDCHECK ---------------------------------- ELSE ENDIF  
[ |../../index.htm#lansa/endcheck_e.htm]

  • No labels