7.19.3 DATECHECK の使用例

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

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

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

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

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

通常、インライン妥当性検査を実行する場合、妥当性検査コマンド (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/ENDCHECK コマンド・ブロック内の妥当性検査コマンドが妥当性検査エラーを検出すると、REQUEST コマンドに制御が戻されます。これは、ENDCHECK コマンドでデフォルトの IF_ERROR(*LASTDIS) パラメータが指定されるためです。

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

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

   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 で制御が戻されます。

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

この例は、メイン・プログラム・ブロック内で 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 画面です。

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

この例は、サブルーチン内で DATECHECK コマンドを使用して、日付フィールドの妥当性を検査する方法を示しています。

ユーザーが要求された詳細を入力すると、VALIDATE サブルーチンが呼び出されます。このサブルーチンでは、#STARTDTE が DD/MM/YY の形式かどうか、また現在日より 30 日前の日付から現在日までの期間にあるかどうかが検査されます。この条件に適合しない場合、DATECHECK コマンドで定義されたメッセージが発行され、DOUNTIL ループが再実行されます。

#STARTDTE の形式と値が正しい場合は、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 #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
  • No labels