Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

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

...

7.45.3 ENDCHECK の使用例

...

例1:ユーザーに、製品番号、受注番号、および数量を入力するよう要求し、次にフィールドに対して妥当性検査を実行します。

Code Block
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)

Code Block
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:デフォルト値例2:デフォルト値*LASTDISを指定すると、以下の例に示すように、実際には「このネスト・レベル(またはそれ以上のレベル)で直前に表示された画面」が使用されます。

Code Block

...

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

Code Block
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