Versions Compared

Key

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

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

...

7.102.2 RANGECHECK の使用例

インライン妥当性検査を実行するようファンクションを構築する

妥当性検査サブルーチンを使用するようファンクションを構築する

RANGECKECKコマンドを使用してインライン妥当性検査を実行する

RANGECHECKコマンドを使用してサブルーチンによる妥当性検査を実行する

Anchor
RANGE_CHECK_EX1
RANGE_CHECK_EX1
インライン妥当性検査を実行するようファンクションを構築する

通常、インライン妥当性検査を実行する場合、妥当性検査コマンド(CONDCHECK、DATECHECK、FILECHECK、RANGECHECK、VALUECHECKなど)を使用するファンクションを以下のように構築します。 を使用するファンクションを以下のように構築します。  BEGIN_LOOP  REQUEST    << INPUT >> BEGINCHECK             << USE CHECK COMMANDS TO VALIDATE INPUT HERE >> ENDCHECK               << PROCESS THE VALIDATED INPUT HERE >> END_LOOP  

   BEGIN_LOOP
REQUEST    << INPUT >>
BEGINCHECK
           << USE CHECK COMMANDS TO VALIDATE INPUT HERE >>
ENDCHECK 
          << PROCESS THE VALIDATED INPUT HERE >>
END_LOOP

BEGINCHECK/ENDCHECKコマンド・ブロック内の妥当性検査コマンドが妥当性検査エラーを検出すると、REQUESTコマンドに制御が戻されます。これは、ENDCHECKコマンドでデフォルトのIF_ERROR(*LASTDIS)パラメータが指定されるためです。

Anchor
RANGE_CHECK_EX2
RANGE_CHECK_EX2
妥当性検査サブルーチンを使用するようファンクションを構築する

通常、サブルーチンによる妥当性検査を実行する場合、妥当性検査コマンド(CONDCHECK、DATECHECK、FILECHECK、RANGECHECK、VALUECHECKなど)を使用するファンクションを以下のように構築します。
DEFINE     FIELDを使用するファンクションを以下のように構築します。 

   DEFINE     FIELD(#ERRORCNT)

...

 REFFLD(#STD_NUM)
DEF_

...

COND   NAME(*NOERRORS)

...

 COND('

...

#ERRORCNT =

...

 0')

...

          

BEGIN_LOOP
DOUNTIL    COND(*NOERRORS)

...


REQUEST    << INPUT >>
EXECUTE    SUBROUTINE(VALIDATE)
ENDUNTIL 
           << PROCESS THE VALIDATED INPUT HERE >>
END_LOOP          

SUBROUTINE NAME(VALIDATE)
CHANGE     FIELD(#ERRORCNT) TO(0)
BEGINCHECK KEEP_COUNT(#ERRORCNT)
           << USE CHECK COMMANDS TO VALIDATE INPUT HERE >>
ENDCHECK   IF_ERROR(*NEXT)
ENDROUTINE

...

BEGINCHECK/ENDCHECKコマンド・ブロック内の妥当性検査コマンドが妥当性検査エラーを検出すると、メイン・ファンクション・ループに#ERRORCNT > 0で制御が戻されます。 0で制御が戻されます。 

Anchor
RANGE_CHECK_EX3
RANGE_CHECK_EX3
RANGECKECKコマンドを使用してインライン妥当性検査を実行する

この例は、メイン・プログラム・ブロック内でRANGECHECKコマンドを使用して、従業員番号が特定の値範囲内にあることを検査する方法を示しています。 この例は、メイン・プログラム・ブロック内でRANGECHECKコマンドを使用して、従業員番号が特定の値範囲内にあることを検査する方法を示しています。 

   DEF_

...

LIST   NAME(#EMPBROWSE) FIELDS(#EMPNO #GIVENAME #SURNAME)
*         
BEGIN_LOOP
REQUEST    FIELDS(#EMPNO #GIVENAME #SURNAME) BROWSELIST(#EMPBROWSE)
*         
BEGINCHECK
RANGECHECK FIELD(#EMPNO) RANGE((A0000 A9999)) MSGTXT('Employee number has to be in the range A0000 - A9999')
ENDCHECK 
*         
ADD_ENTRY  TO_LIST(#EMPBROWSE)
END_LOOP

#EMPNOの値がA0000~A9999の範囲外の場合、RANGECHECKコマンドで定義されたメッセージが発行され、直前に表示されていた画面にプログラム制御が戻されます。この例では、直前に表示されていた画面はREQUEST画面です。  FIELDS(#EMPNO #GIVENAME #SURNAME) *            BEGIN_LOOP  REQUEST    FIELDS(#EMPNO #GIVENAME #SURNAME) BROWSELIST(#EMPBROWSE) *            BEGINCHECK  RANGECHECK FIELD(#EMPNO) RANGE((A0000 A9999)) MSGTXT('Employee number has to be in the range A0000 - A9999') ENDCHECK    *            ADD_ENTRY  TO_LIST(#EMPBROWSE) END_LOOP   
#EMPNOの値がA0000~A9999の範囲外の場合、RANGECHECKコマンドで定義されたメッセージが発行され、直前に表示されていた画面にプログラム制御が戻されます。この例では、直前に表示されていた画面はREQUEST画面です。

Anchor
RANGE_CHECK_EX4
RANGE_CHECK_EX4
RANGECHECKコマンドを使用してサブルーチンによる妥当性検査を実行する

この例は、サブルーチン内でRANGECHECKコマンドを使用して、従業員番号が特定の値範囲内にあることを検査する方法を示しています。 この例は、サブルーチン内でRANGECHECKコマンドを使用して、従業員番号が特定の値範囲内にあることを検査する方法を示しています。  ユーザーが要求された詳細を入力すると、VALIDATEサブルーチンが呼び出されます。このサブルーチンでは、#EMPNOの値がA0000~A9999の範囲内にあることを検査します。この条件に適合しない場合、RANGECHECKコマンドで定義されたメッセージが発行され、DOUNTILループが再実行されます。入力された#EMPNO値が指定の範囲内にある場合、DOUNTILループが終了し、検証済みの入力の処理が実行されます。
DEFINE     FIELD

ユーザーが要求された詳細を入力すると、VALIDATEサブルーチンが呼び出されます。このサブルーチンでは、#EMPNOの値がA0000~A9999の範囲内にあることを検査します。この条件に適合しない場合、RANGECHECKコマンドで定義されたメッセージが発行され、DOUNTILループが再実行されます。入力された#EMPNO値が指定の範囲内にある場合、DOUNTILループが終了し、検証済みの入力の処理が実行されます。 

   DEFINE     FIELD(#ERRORCNT)

...

 TYPE(*DEC)

...

 LENGTH(3)

...

 DECIMALS(0)

...

 DEFAULT(0)
DEF_

...

COND   NAME(*NOERRORS)

...

 COND('

...

#ERRORCNT =

...

 0')
DEF_

...

LIST   NAME(#EMPBROWSE)

...

 FIELDS(#EMPNO #GIVENAME #SURNAME)
*         
BEGIN_LOOP
DOUNTIL    COND(*NOERRORS)

...


REQUEST    FIELDS(#EMPNO #GIVENAME #SURNAME) BROWSELIST(#EMPBROWSE)

...


EXECUTE    SUBROUTINE(VALIDATE)

...


ENDUNTIL 
*         
ADD_ENTRY  TO_LIST(#EMPBROWSE)
END_

...

LOOP  
*         
SUBROUTINE NAME(VALIDATE)

...


CHANGE     FIELD(#ERRORCNT)

...

 TO(0)

...


*         
BEGINCHECK KEEP_COUNT(#ERRORCNT)

...


RANGECHECK FIELD(#EMPNO)

...

 RANGE((

...

A0000 A9999))

...

 MSGTXT('Employee number has to be in the range A0000 - A9999')
ENDCHECK   IF_ERROR(*NEXT)

...


*         
ENDROUTINE