Page History
[ |../../index.htm#lansa/rangecheck_e.htm]
現在地:
...
7.102.2 RANGECHECK の使用例
妥当性検査サブルーチンを使用するようファンクションを構築する
RANGECKECKコマンドを使用してインライン妥当性検査を実行する
RANGECHECKコマンドを使用してサブルーチンによる妥当性検査を実行する
| Anchor | ||||
|---|---|---|---|---|
|
通常、インライン妥当性検査を実行する場合、妥当性検査コマンド(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 | ||||
|---|---|---|---|---|
|
通常、サブルーチンによる妥当性検査を実行する場合、妥当性検査コマンド(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 | ||||
|---|---|---|---|---|
|
この例は、メイン・プログラム・ブロック内で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 | ||||
|---|---|---|---|---|
|
この例は、サブルーチン内で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