Versions Compared

Key

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

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

...

7.10.3 CALLCHECK の使用例

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

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

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

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

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

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

この例は、妥当性検査プログラムとして機能する RDML ファンクションが含まれるプログラム・ブロック内でCALLCHECK コマンドを使用する方法を示しています。

要求された詳細をユーザーが入力すると、WORKDAY RDML プログラムが呼び出され、開始日が作業日に該当するかどうかが検査されます。WORKDAY プログラムが否定的な応答を戻した場合、定義されているメッセージが発行され、直前に表示されていた画面 (この例では Request 画面) にプログラム制御が戻されます。

   DEF_

...

LIST   NAME(#EMPBROWSE)

...

 FIELDS(#EMPNO #STARTDTE)

BEGIN_LOOP
REQUEST    FIELDS(#EMPNO #STARTDTE) BROWSELIST(#EMPBROWSE)        

BEGINCHECK
CALLCHECK  FIELD(#STARTDTE) BY_CALLING(WORKDAY)

...

 PROG_TYPE(FUN)

...

 MSGTXT('指定された日付は作業日ではありません。')

...


ENDCHECK           

ADD_ENTRY  TO_LIST(#EMPBROWSE)
END_LOOP

...

WORKDAY ファンクションは、以下のように定義されます。 FUNCTION   OPTIONS

    FUNCTION   OPTIONS(*

...

DIRECT *

...

LIGHTUSAGE *

...

MLOPTIMISE *NUM_FIELD_VALIDATE)

...

          

DEFINE     FIELD(#TESTDATEC)

...

 TYPE(*CHAR)

...

 LENGTH(6)

...


DEFINE     FIELD(#TESTDATEN)

...

 LENGTH(6)

...

 DECIMALS(0)

...

 REFFLD(#DATE)

...

 EDIT_CODE(4)

...

 DEFAULT(0)

...

 TO_OVERLAY(#TESTDATEC)

...


DEFINE     FIELD(#DAYOFWEEK)

...

 TYPE(*CHAR)

...

 LENGTH(3)

...

         

CHANGE     FIELD(#TESTDATEN)

...

 TO(#VALFLD$NV)

...


USE        BUILTIN(CONVERTDATE)

...

 WITH_ARGS(

...

#TESTDATEC B R) TO_GET(#DAYOFWEEK)

...


CASE       OF_FIELD(#DAYOFWEEK)

...


WHEN       VALUE_IS('=

...

 MON'

...

 '=

...

 TUE'

...

 '=

...

 WED'

...

 '=

...

 THU'

...

 '=

...

 FRI')

...


CHANGE     FIELD(#VALFLD$RT)

...

 TO('''1''')

...


OTHERWISE
CHANGE     FIELD(#VALFLD$RT)

...

 TO('''0''')

...


ENDCASE  
          
RETURN

複雑なロジックの妥当性検査ファンクションの作成に関する詳細については、FUNCTION コマンドのパラメータに関するセクションの *ALP_FIELD_VALIDATE および *NUM_FIELD_VALIDATE に関する技術ノートを参照してください。

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

この例は、妥当性検査プログラムとして機能するRDMLファンクションが含まれるサブルーチン内でCALLCHECK コマンドを使用する方法を示しています。

ユーザーが要求された入力コードを入力すると、VALIDATE サブルーチンが呼び出されます。このサブルーチンは、ANUMBER RDML プログラムを呼び出して、入力コードが正しい形式であるかどうかを検査します。ANUMBER プログラムが否定的な応答を返した場合、CALLCHECK コマンドで定義されているメッセージが発行され、DOUNTIL ループが再実行されます。ANUMBER ループが再実行されます。

ANUMBER プログラムが肯定的な応答を返した場合、DOUNTIL ループが終了し、検証済みの入力の処理が実行されます。 DEFINE     FIELD

    DEFINE     FIELD(#ERRORCNT)

...

 REFFLD(#STD_NUM)
DEF_

...

COND   NAME(*NOERRORS)

...

 COND('

...

#ERRORCNT =

...

 0')

...


DEFINE     FIELD(#INPUT)

...

 TYPE(*CHAR)

...

 LENGTH(7)
DEF_

...

LIST   NAME(#EMPBROWSE)

...

 FIELDS(#INPUT)

...

          

BEGIN_LOOP
DOUNTIL    COND(*NOERRORS)

...


REQUEST    FIELDS(#INPUT)

...

 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)

...


CALLCHECK  FIELD(#INPUT)

...

 BY_CALLING(ANUMBER)

...

 PROG_TYPE(FUN)

...

 MSGTXT('

...

The input code format must be Annnnnn.')

...


ENDCHECK   IF_ERROR(*NEXT)

...

         

ENDROUTINE

ANUMBER プログラムは、以下のように定義されます。 FUNCTION   OPTIONS

    FUNCTION   OPTIONS(*

...

DIRECT *

...

LIGHTUSAGE *

...

MLOPTIMISE *ALP_FIELD_VALIDATE)

...


DEFINE     FIELD(#INPUT)

...

 TYPE(*CHAR)

...

 LENGTH(7)

...


DEFINE     FIELD(#INPUTA1)

...

 TYPE(*CHAR)

...

 LENGTH(1)

...

 TO_OVERLAY(#INPUT)

...


DEFINE     FIELD(#INPUTA6)

...

 TYPE(*CHAR)

...

 LENGTH(6)

...

 TO_OVERLAY(

...

#INPUT 2)
DEFINE     FIELD(#DECIMAL)

...

 TYPE(*DEC)

...

 LENGTH(1)

...

 DECIMALS(1)

...


DEFINE     FIELD(#RTN_CODE)

...

 TYPE(*CHAR)

...

 LENGTH(1)

...

          

CHANGE     FIELD(#INPUT)

...

 TO(#VALFLD$AV)

...


USE        BUILTIN(CHECKNUMERIC)

...

 WITH_ARGS(

...

#INPUTA6 6 0) TO_GET(#STD_

...

NUM #DECIMAL #RTN_CODE)

...

          

IF         COND('(

...

#INPUTA1 =

...

 A) and (#RTN_

...

CODE =

...

 Y)')

...


CHANGE     FIELD(#VALFLD$RT)

...

 TO('''1''')

...


ELSE     
CHANGE     FIELD(#VALFLD$RT)

...

 TO('''0''')

...


ENDIF             

RETURN

複雑なロジックの妥当性検査ファンクションの作成に関する詳細については、FUNCTION コマンドのパラメータに関するセクションの *ALP_FIELD_VALIDATE および *NUM_FIELD_VALIDATE に関する技術ノートを参照してください。
[ Image Removed |../../index.htm#lansa/callcheck_e.htm]