Page History
...
7.22.2 DEF_COND の使用例
...
例1:「AがB×Cの結果より小さい」という条件を定義して、この条件を他のコマンドで繰り返し使用できるようにします。
| Code Block |
|---|
DEF_COND NAME |
...
(*ALTBC) |
...
COND(' |
...
#A * |
...
LT ( |
...
#B * |
...
#C)') IF |
...
|
...
COND(*ALTBC) |
...
ENDIF DOWHILE |
...
|
...
COND(*ALTBC) |
...
ENDWHILE DOUNTIL |
...
|
...
COND(*ALTBC) |
...
ENDUNTIL |
...
BEGINCHECK CONDCHECK |
...
FIELD(#A) |
...
COND(*ALTBC) |
...
MSGTXT('A must be not be less than B times C')
ENDCHECK |
例2:DEF_CONDコマンドを使用して、ユーザー名がFRED、MARY、またはBILLの場合のみDISPLAYコマンドで[変更]および[削除]ファンクション・キーを有効にします。
| Code Block |
|---|
DEF_COND NAME(*AUTHORISE) COND('( |
...
#USER = |
...
FRED) |
...
* |
...
OR ( |
...
#USER = |
...
MARY) |
...
* |
...
OR ( |
...
#USER = |
...
BILL)') DISPLAY |
...
|
...
FIELDS(......) |
...
CHANGE_KEY(* |
...
YES * |
...
NEXT *AUTHORISE) |
...
DELETE_KEY(* |
...
YES * |
...
NEXT *AUTHORISE) |
...
例3:CHECK_AUTHORITY組み込み関数を使用し、PRODMSTという製品マスター・ファイルを使用して、上記の例を照会および保守のプログラムとして汎用化します。
| Code Block |
|---|
DEF_COND NAME(*ALLOWCHG) |
...
COND(' |
...
#CHANGE = |
...
Y') |
...
DEF_ |
...
COND NAME(*ALLOWDLT) |
...
COND(' |
...
#DELETE = |
...
Y') USE |
...
|
...
BUILTIN(CHECK_AUTHORITY) |
...
WITH_ARGS( |
...
PRODMST '''*LIBL''' |
...
'FD' |
...
'CH') |
...
TO_GET(#CHANGE) |
...
USE BUILTIN(CHECK_AUTHORITY) |
...
WITH_ARGS( |
...
PRODMST '''*LIBL''' |
...
'FD' |
...
'DL') |
...
TO_GET(#DELETE) REQUEST |
...
...
FIELDS(.....) FETCH |
...
...
FIELDS(......) |
...
FROM_FILE(PRODMST) |
...
WITH_KEY(......) DISPLAY |
...
...
FIELDS(......) |
...
CHANGE_KEY(* |
...
YES * |
...
NEXT *ALLOWCHG) |
...
DELETE_KEY(* |
...
YES * |
...
NEXT *ALLOWDLT) IF_MODE |
...
|
...
IS(*CHANGE) UPDATE |
...
FIELDS(........) |
...
IN_FILE(PRODMST) ENDIF IF_MODE |
...
|
...
|
...
IS(*DELETE) |
...
DELETE FROM_FILE(PRODMST) ENDIF |
この方法により、照会プログラムと保守プログラムを1つのプログラムに安全かつ簡単に統合できます。 ENDIF この方法により、照会プログラムと保守プログラムを1つのプログラムに安全かつ簡単に統合できます。\[変更\]および\[削除\]ファンクション・キーは、ユーザーが情報の変更または削除権限を持っている場合のみ有効になるため、これ以上のプログラム検査は必要ありません。 例4:部門番号が464以外の場合、フィールド#SALARYが画面パネルに表示されないようにします。 DEF_COND NAME]ファンクション・キーは、ユーザーが情報の変更または削除権限を持っている場合のみ有効になるため、これ以上のプログラム検査は必要ありません。
例4:部門番号が464以外の場合、フィールド#SALARYが画面パネルに表示されないようにします。
| Code Block |
|---|
DEF_COND NAME(*HEADOFF) |
...
COND(' |
...
#DEPTMENT = |
...
''464''') DISPLAY |
...
...
FIELDS(#A #B #C (#SALARY *HEADOFF) #E #F #G) |
例5:複雑な条件を細分化して単純にします。
| Code Block |
|---|
DEF_COND NAME(*SELCUST) |
...
COND('(( |
...
#CUSTTYPE = |
...
''A'') |
...
* |
...
OR ( |
...
#CUSTTYPE = |
...
''B'') |
...
* |
...
OR ( |
...
#CUSTTYPE = |
...
''C'')) |
...
* |
...
AND (( |
...
#BALANCE *GT 10000) *AND (#BALANCE *LT 100000)) *AND (#LASTSALE > *MONTHSTART)') |
...
上記の条件は、以下のようにすることで、保守性と分かりやすさを高めることができます。
| Code Block |
|---|
DEF_COND NAME(*SELTYPE) |
...
COND('( |
...
#CUSTTYPE = |
...
''A'') |
...
* |
...
OR ( |
...
#CUSTTYPE = |
...
''B'') |
...
* |
...
OR ( |
...
#CUSTTYPE = |
...
''C'')') |
...
DEF_ |
...
COND NAME(*SELBAL) |
...
COND('( |
...
#BALANCE *GT 10000) *AND (#BALANCE *LT 100000)') |
...
DEF_ |
...
COND NAME(*SELSALE) |
...
COND(' |
...
#LASTSALE > #MONTHSTRT') |
...
...
DEF_ |
...
COND NAME(*SELCUST) |
...
COND('* |
...
SELTYPE * |
...
AND * |
...
SELBAL * |
...
AND *SELSALE') |
条件は、個別に使用することも、より大きな式に組み込むこともできます。
| Code Block |
|---|
IF |
...
...
|
...
COND(*SELCUST) |
...
DOWHILE COND('* |
...
SELCUST * |
...
OR ( |
...
#ACTIVE * |
...
EQ ''Y'')') |
...
...
|