従属定義 (DEP)
|
パラメーター 例 エラー・メッセージ |
従属定義(DEP)コマンド定義ステートメントは,チェックしなければならないパラメーターとパラメーター値との間の必要な関係を定義します。この関係は,1つ以上のパラメーターに特定の値が必要なことを示すこともあれば,パラメーター自体の存在が必要であることを示すこともあります。
DEPステートメントは,CLコマンドの第2レベル・パラメーター構文検査を行います。第1レベルは,値のタイプ(*NAMEや*DATEなど)を定義するPARM, QUAL,および ELEMステートメント,さらには有効な値の範囲や有効な値のリストなどのパラメーター値制限によって行われます。DEPステートメントによって,パラメーター値の組み合わせがコマンド・ストリング内で構文的に正しいかを検証することができます。
DEPステートメントは,指定されたパラメーターの最初の値しかチェックできません。値のリストを受け入れるパラメーターまたは複数の要素または修飾子をもつパラメーターの構文検査を行いたい場合には,コマンド・ストリングに第3レベルの構文検査を行う妥当性検査出口プログラムを作成することができます。PARM, QUAL, ELEM,または DEPステートメント,あるいは妥当性検査プログラムで構文検査を行うと,コマンド処理プログラムでパラメーター構文検査コードを除外するか,大幅に単純化できます。
パラメーターに省略時の値があり,パラメーターが指定されていない場合には,DEPステートメントが仕様チェックを実行するのか,関係の検査を実行するのかによって検査方法が異なります。未指定のパラメーターについて仕様の検査(そのパラメーターに値があるかどうかの検査)が行われる場合には,システムは値が指定されていないものと見なし,省略時の値は使用されません。未指定のパラメーターについて関係の検査が行われる場合には,その関係の検査でそのパラメーター値として省略時の値が使用されます。
| 上 |
パラメーター
| キーワード | 記述 | 選択項目 | ノーツ |
|---|---|---|---|
| CTL | 制御条件 | 単一値: *ALWAYS その他の値: 要素リスト |
必須, 定位置 1 |
| 要素 1: キーワードまたはキーワード参照 | 文字値 | ||
| 要素 2: 比較演算子 | *GT, *EQ, *GE, *NL, *LT, *NE, *LE, *NG | ||
| 要素 3: 値またはキーワード参照 | 文字値 | ||
| PARM | 従属パラメーター | 値 (最大 25 回の繰り返し): 要素リスト | 必須, 定位置 2 |
| 要素 1: キーワードまたはキーワード参照 | 文字値 | ||
| 要素 2: 比較演算子 | *GT, *EQ, *GE, *NL, *LT, *NE, *LE, *NG | ||
| 要素 3: 値またはキーワード参照 | 文字値 | ||
| NBRTRUE | 真の従属の数 | 単一値: *ALL その他の値: 要素リスト |
オプショナル, 定位置 3 |
| 要素 1: 比較演算子 | *GT, *EQ, *GE, *NL, *LT, *NE, *LE, *NG | ||
| 要素 2: 真となる番号 | 0-25 | ||
| MSGID | メッセージID | 名前, *NONE | オプショナル, 定位置 4 |
| 上 |
制御条件 (CTL)
PARMステートメントに定義されたパラメーターの依存関係が真となる前に,真でなければならない制御条件を指定します。最初に指定されたキーワードは,制御パラメーターを示します。制御条件は,キーワード名だけで指定するか,あるいはキーワード名および制御条件に依存するパラメーターの存在が必要であるかどうかを決定するテスト関係で指定することができます。制御パラメーターと指定された値との関係は,指定された条件と一致しているかどうかを調べるために,テストすることができます。その場合には,制御パラメーターが依存するパラメーターは,PARMキーワードおよびNBRTRUEキーワードに指定された要件と一致していなければなりません。
単一値
- *ALWAYS
- パラメーターの依存関係は,コマンドの形式に関係なく常に検査されます。
その他の値
- キーワード名
- 依存関係を制御するために値を指定しなければならないパラメーターのキーワード名を指定してください。キーワード名は,これを定義するPARMステートメントのキーワード (KWD)パラメーターに指定されたパラメーターの名前です。キーワードが指定された場合には,パラメーターの依存関係が検査されます。キーワード名は,TYPE(*NULL)で定義されたコマンド・パラメーターを参照することはできません。
- &キーワード名 比較演算子 値
- 制御パラメーターのキーワード名を指定し,その後に比較演算子(*LE, *EQなど)とテストする値を指定してください。テスト条件が一致していた場合には,制御パラメーターが依存しているパラメーターは,PARMキーワードに指定された要件と一致していなければなりません。値は32バイトを超えてはいけません。キーワード名は,TYPE(*NULL)で定義されたコマンド・パラメーターを参照することはできません。
PARMステートメントのSPCVALパラメーターまたはSNGVALパラメーターを使用して,テストの対象とする値が特殊値または単一値として指定されている場合は,置き換え値ではなく比較値を使用しなければなりません。
比較演算子および値を指定した場合には,キーワードの値がテストされることを示すために,キーワード名の前にアンパーサンド(&)を付けなければなりません。比較演算子および値を指定しない場合には,アンパーサンドを使用してはいけません。
- (&キーワード名比較演算子 &キーワード名)
- 制御パラメーターのキーワード名を指定し,その後に比較演算子(*EQなど)と,値が制御パラメーターの値と比較される別のパラメーターのキーワード名を指定してください。キーワード名は,TYPE(*NULL)またはPASSVAL(*NULL)で定義されたコマンド・パラメーターを参照することはできません。
| 上 |
従属パラメーター (PARM)
CTLパラメーターによって定義された制御条件が真である場合にテストしなければならないパラメーターの依存関係を指定します。依存関係には,存在をテストされる1つ以上のパラメーターの名前,あるいはキーワード値と他のキーワード値または定数値との1つ以上のテスト関係を指定することができます。最大25のパラメーター依存関係をこのパラメーターに指定することができます。キーワード名は,TYPE(*NULL)で定義されたコマンド・パラメーターを参照することはできません。
- キーワード名
- 値が指定されていなければならない各パラメーターのキーワード名を指定してください。
- &キーワード名 比較演算子 値
- 各パラメーターのキーワード名を,比較演算子およびテストする値を後に付けて指定してください。キーワードの値がテストされることを示すために,キーワード名の前にアンパーサンドを付けなければなりません。値は32バイトを超えてはいけません。
比較の対象とする値が,PARMステートメントの特殊値 (SPCVAL)パラメーターまたは単一値 (SNGVAL)パラメーターを用いて特殊値または単一値として指定されている場合には,比較値ではなく置き換え値を使用しなければなりません。
- &キーワード名比較演算子 &キーワード名
- 1つのパラメーターのキーワード名の後に,比較演算子と別のパラメーターのキーワード名とを続けて指定してください。最初のパラメーターと2番目のパラメーターの値が比較されます。キーワード名は,PASSVAL(*NULL)で定義されたコマンド・パラメーターを参照することはできません。
| 上 |
真の従属の数 (NBRTRUE)
真となければならないパラメーター依存関係(このDEPステートメントのPARMパラメーターで定義)の数を指定します。真とならないと,診断メッセージ (このDEPステートメントのMSGIDパラメーターで定義)が送られ,コマンドは実行されません。
このパラメーターのいずれの要素にもCL変数をコーディングすることはできません。
単一値
- *ALL
- すべてのパラメーター依存関係が真でなければなりません。これは,NBRTRUE(*EQ N)を指定することと同じです。Nは,PARMパラメーターに定義されたパラメーター依存関係の数です。
要素1: 比較演算子
- 比較演算子
- 比較演算子を指定してください。有効な値は*GT, *EQ, *GE, *NL, *LT, *NE, *LE,および*NGです。
要素2: 真となる番号
- 0から25
- 指定した関係を満たすために真でなければならないパラメーター依存関係の数を指定してください。
| 上 |
メッセージID (MSGID)
NBRTRUEパラメーターによって指定された論理式が偽として評価された場合に,ユーザーに送られる診断メッセージを指定します。
- *NONE
- 特定の診断メッセージが送られません。代わりに,汎用メッセージCPD0150が送られます。コマンドのパラメーターの数によっては,汎用メッセージのテキストからパラメーター間構文エラーの原因を判別することが非常に困難になる場合があります。
- メッセージID
- ユーザーに送られる診断メッセージのメッセージIDを指定してください。
IDが3文字の接頭部CPFまたはCPDで始まるメッセージは,弊社提供のメッセージ・ファイルQCPFMSGから検索されます。ここに指定された他のすべてのメッセージは,これらの依存関係によって定義中のコマンドを作成するために使用されるCRTCMDコマンドのMSGFパラメーターによって識別されるメッセージ・ファイルから検索されます。このパラメーターには変数をコーディングすることはできません。
| 上 |
例
例1:パラメーターの存在の検査
DEP CTL(&TYPE *EQ LIST) PARM(ELEMLIST)
TYPE(LIST)を指定する場合は,ELEMLISTパラメーターを指定する必要があります。TYPE(LIST)を指定したが,ELEMLISTパラメーターに値を指定しない場合には,汎用診断メッセージCPD0150が送られ,コマンドは実行されません。
例2:複数パラメーターの存在の検査
DEP CTL(FILE) PARM(VOL LABEL) +
NBRTRUE(*EQ 2) MSGID(USR1234)
FILEパラメーターを指定する場合は,VOLパラメーターとLABELパラメーターの両方を指定する必要があります。VOLパラメーターとLABELパラメーターのうちの一方しか値を指定しない場合,あるいはいずれのパラメーターも指定しない場合には,診断メッセージUSR1234が送られ,コマンドは実行されません。コマンド分析プログラムは,CRTCMDコマンドのMSGFパラメーターに指定されたメッセージ・ファイルでメッセージ USR1234を検索します。
例3:一緒には指定できないパラメーターの検査
DEP CTL(*ALWAYS) PARM(J1 D J2) NBRTRUE(*EQ 1)
J1, D,およびJ2パラメーターのうち1つだけに値を指定しなければなりません。これらのパラメーターのどれも指定しない場合,あるいは複数を指定した場合には,汎用診断メッセージCPD0150が送られ,コマンドは実行されません。
例4:1つ以上の条件が真であるかどうかの検査
DEP CTL(&LIB *EQ MYLIB) +
PARM((&PASSWORD *EQ XYZ5) (&USRPRF *EQ B0BJ)) +
NBRTRUE(*GE 1) MSGID(MSG1001)
LIBパラメーター値がMYLIBである場合には,PASSWORDパラメーター値がXYZ5であるか,USRPRFパラメーター値がBOBJであるか,両方をPASSWORD(XYZ5)とUSRPRF(BOBJ)として指定する必要があります。LIB(MYLIB)であり,指定された依存関係条件のどちらも真でない場合は,診断メッセージMSG1001が送られ,コマンドは実行されません。
例5: 条件付き必要パラメーターの検査
DEP CTL(&OUTPUT *EQ *OUTFILE) PARM((&OUTFILE *NE ' ')) +
NBRTRUE(*EQ 1) MSGID(CPD9861)
DEP CTL(&OUTPUT *NE *OUTFILE) PARM((&OUTFILE *EQ ' ')) +
NBRTRUE(*EQ 1) MSGID(CPD9862)
DEP CTL(&OUTMBR *NE *FIRST) PARM((&OUTFILE *EQ ' ')) +
NBRTRUE(*EQ 0) MSGID(CPD9867)
関連する3つのパラメーター間の関係は次のようにチェックされます。
- OUTPUTパラメーターが*OUTFILEである場合は,OUTFILEパラメーターにブランクでない値を指定する必要があります。さもないと,メッセージCPD9861が送られます。メッセージIDは「CPD」で始まるので,オペレーティング・システムは, メッセージ・ファイルQCPFMSG内でこのメッセージを検索します。OUTFILEパラメーターが修飾オブジェクト名であると,最初のQUALの値だけがチェックされます。
- OUTFILEパラメーターがMIN(0)としてコーディングされていて,省略時の値(DFT)がないと,OUTPUTパラメーターの値が*OUTFILE以外である場合は,OUTFILEパラメーターはブランクでなければなりません。さもないと,メッセージCPD9862が送られます。
- OUTMBRパラメーターの値が*FIRST以外の値である場合には,OUTFILEパラメーターにはブランクでない値を指定する必要があります。さもないと,メッセージCPD9867が送られます。OUTMBRパラメーターが2つの要素からなる値のリストであると,最初のELEMの値だけがチェックされます。
| 上 |
エラー・メッセージ
なし
| 上 |