[
|../../index.htm#lansa/callcheck_e.htm]
現在地:
インライン妥当性検査を実行するようファンクションを構築する
妥当性検査サブルーチンを使用するようファンクションを構築する
CALLCHECK コマンドを使用してインライン妥当性検査を実行する
CALLCHECK コマンドを使用してサブルーチンによる妥当性検査を実行する
インライン妥当性検査を実行するようファンクションを構築する
通常、インライン妥当性検査を実行する場合、妥当性検査コマンド (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 で制御が戻されます。
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(*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 に関する技術ノートを参照してください。
CALLCHECK コマンドを使用してサブルーチンによる妥当性検査を実行する
この例は、妥当性検査プログラムとして機能するRDMLファンクションが含まれるサブルーチン内でCALLCHECK コマンドを使用する方法を示しています。
ユーザーが要求された入力コードを入力すると、VALIDATE サブルーチンが呼び出されます。このサブルーチンは、ANUMBER RDML プログラムを呼び出して、入力コードが正しい形式であるかどうかを検査します。ANUMBER プログラムが否定的な応答を返した場合、CALLCHECK コマンドで定義されているメッセージが発行され、DOUNTIL ループが再実行されます。ANUMBER プログラムが肯定的な応答を返した場合、DOUNTIL ループが終了し、検証済みの入力の処理が実行されます。
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(*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 に関する技術ノートを参照してください。
[
|../../index.htm#lansa/callcheck_e.htm]