Versions Compared

Key

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

...

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'')')

...

  

...