Page History
[ |../../index.htm#lansa/datecheck_e.htm]
現在地:
...
7.19.3 DATECHECK の使用例
妥当性検査サブルーチンを使用するようファンクションを構築する
DATECHECK コマンドを使用してインライン妥当性検査を実行する
DATECHECK コマンドを使用してサブルーチンによる妥当性検査を実行する
| 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
BEGINCHECK
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 で制御が戻されます。
| Anchor | ||||
|---|---|---|---|---|
|
この例は、メイン・プログラム・ブロック内で DATECHECK コマンドを使用して、日付フィールドの妥当性を検査する方法を示しています。
DEF_
...
LIST NAME(#EMPBROWSE)
...
FIELDS(#EMPNO #GIVENAME #SURNAME)
BEGIN_LOOP
REQUEST FIELDS(#EMPNO #STARTDTE) BROWSELIST(#EMPBROWSE)
BEGINCHECK
DATECHECK FIELD(#STARTDTE) IN_FORMAT(*DDMMYY)
...
BEFORE(30)
...
AFTER(0)
...
MSGTXT('Start date is not in the right format or not in the last month')
ENDCHECK
ADD_ENTRY TO_LIST(#EMPBROWSE)
END_LOOP
...
#STARTDTE が DDMMYY の形式でなく、現在日の前後 30 日以内の日付でない場合、DATECHECK コマンドで定義されたメッセージが発行され、プログラム制御が、直前に表示されていた画面に戻されます。この例では、直前に表示されていた画面は REQUEST 画面です。
| Anchor | ||||
|---|---|---|---|---|
|
この例は、サブルーチン内で DATECHECK コマンドを使用して、日付フィールドの妥当性を検査する方法を示しています。
ユーザーが要求された詳細を入力すると、VALIDATE サブルーチンが呼び出されます。このサブルーチンでは、#STARTDTE が DD/MM/YY の形式かどうか、また現在日より 30 日前の日付から現在日までの期間にあるかどうかが検査されます。この条件に適合しない場合、DATECHECK コマンドで定義されたメッセージが発行され、DOUNTIL ループが再実行されます。
#STARTDTE ループが再実行されます。#STARTDTE の形式と値が正しい場合は、DOUNTIL ループが終了し、検証済みの入力データが処理されます。 DEFINE FIELD
DEFINE FIELD(#ERRORCNT)
...
TYPE(*DEC)
...
LENGTH(3)
...
DECIMALS(0)
...
DEFAULT(0)
DEF_
...
COND NAME(*NOERRORS)
...
COND('
...
#ERRORCNT =
...
0')
DEF_
...
LIST NAME(#EMPBROWSE)
...
FIELDS(#EMPNO #STARTDTE)
BEGIN_LOOP
DOUNTIL COND(*NOERRORS)
...
REQUEST FIELDS(#EMPNO #STARTDTE) 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)
...
DATECHECK FIELD(#STARTDTE)
...
IN_FORMAT(*DDMMYY)
...
BEFORE(30)
...
AFTER(0)
...
MSGTXT('Start date is not in the right format or not in the last month')
ENDCHECK IF_ERROR(*NEXT)
...
ENDROUTINE