Versions Compared

Key

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

...

OV_FILE_SERVICE

...

Note

注意: 組み込み関数の規則

基本的なファイル・サービスおよびディレクトリ・サービスを実行します。 注:&<a href="bif_rules.htm"&>組み込み関数の規則&</a&>
基本的なファイル・サービスおよびディレクトリ・サービスを実行します。

Windows パス名はすべて環境変数置換をサポートします。 この組み込み関数の実行プラットフォームにより、使用されるファイル名およびパスは大文字と小文字が区別されます。例えば、IBM i

この組み込み関数の実行プラットフォームにより、使用されるファイル名およびパスは大文字と小文字が区別されます。例えば、IBM i の IFS の以下の特定の領域では大文字と小文字が区別されます。

  • このディレクトリの /QOpenSys と files/folders では大文字と小文字が区別されます。
  • 大文字と小文字が区別されるユーザー定義ファイル システム (UDFS) が IFS ディレクトリにマウントされた場合、この位置にあるファイルとフォルダは大文字と小文字が区別されます。
Info

この OV 組み込み関数は LANSA のプログラムで利用されているものなので、修正しないようにしてください。この組み込み関数をカスタマイズする場合は、このコピーを作成し、それを修正するようにしてください。

...

この組み込み関数は、アプリケーションへの影響を考慮した上でユーザーの責任において使用してください。明示的か暗黙的かを問わず、いかなる保証もありません。免責事項全文を参照してください。

ファンクション番号:

992

必要なDLL:

U_BIF992.DLL

...

各製品の対応

Visual LANSA for Windows

使用可

 

Visual LANSA for Linux

使用可

 

LANSA/AD

使用可

使用可(RDMLXのみで使用可能)

RDMLXのみで使用可能

...

引数

番号

タイプ

必須/任意

説明

最小長

最大長

最小小数桁数

最大小数桁数

1

A

必須

必要なファイル・サービスのタイプ。以下のいずれかの値として渡します。

MAKE_

DIR  ディレクトリを作成する

DIR  ディレクトリを作成する

REMOVE_

DIR  ディレクトリを削除する

DIR  ディレクトリを削除する

REMOVE_DIR_

TREE  ディレクトリのツリーを再帰的に削除する。注意して使用すること

TREE  ディレクトリのツリーを再帰的に削除する。注意して使用すること!

CHECK_

DIR  ディレクトリが存在するかどうかを検査する

DIR  ディレクトリが存在するかどうかを検査する

CHECK_

FILE  ファイルが存在するかどうかを検査する

FILE  ファイルが存在するかどうかを検査する

SET_

FILE  ファイルの属性を読み取り専用または標準

FILE  ファイルの属性を読み取り専用または標準(読み書き可能)に設定する

COPY_

FILE  ファイルを別のファイルにコピーする

FILE  ファイルを別のファイルにコピーする

REMOVE_

FILE  ファイルを削除する

FILE  ファイルを削除する

GET_

DIR  ディレクトリの内容を取得する

DIR  ディレクトリの内容を取得する

COPY_

DIR  ディレクトリとそのすべてのサブディレクトリを別のディレクトリにコピーする。コピー先ディレクトリに同じファイルがある場合は置き換える

DIR  ディレクトリとそのすべてのサブディレクトリを別のディレクトリにコピーする。コピー先ディレクトリに同じファイルがある場合は置き換える

COPY_

PATTERN  指定されたパターンに一致するファイルを別のディレクトリにコピーする。コピー先ディレクトリに同じファイルがある場合は置き換える

PATTERN  指定されたパターンに一致するファイルを別のディレクトリにコピーする。コピー先ディレクトリに同じファイルがある場合は置き換える

1

256

 

 



2

A

任意

要求サービス引数1

引数1の値

      この引数で渡す値:

MAKE_

DIR  作成するディレクトリの名前

DIR  作成するディレクトリの名前

REMOVE_DIR_

TREE  削除するディレクトリの名前

TREE  削除するディレクトリの名前

REMOVE_

DIR  削除するディレクトリの名前

DIR  削除するディレクトリの名前

CHECK_

DIR  存在するかどうかを検査するディレクトリの名前

DIR  存在するかどうかを検査するディレクトリの名前

CHECK_

FILE  存在するかどうかを検査するファイルの名前

FILE  存在するかどうかを検査するファイルの名前

SET_

FILE  属性を設定するファイルの名前

FILE  属性を設定するファイルの名前

COPY_

FILE  コピー元ファイルの名前

FILE  コピー元ファイルの名前

REMOVE_

FILE  削除するファイルの名前

FILE  削除するファイルの名前

GET_

DIR  内容を取得するディレクトリの名前

DIR  内容を取得するディレクトリの名前

COPY_

DIR  コピー対象のディレクトリの名前

DIR  コピー対象のディレクトリの名前

COPY_

PATTERN  コピー対象のファイル・パターンを持つ完全修飾パス。サポートされるワイルドカードは

PATTERN  コピー対象のファイル・パターンを持つ完全修飾パス。サポートされるワイルドカードは*のみ

1

256

 

 



3

A

任意

要求サービス引数2

引数1の値

      この引数で渡す値:

MAKE_

DIR  不要。渡さない

DIR  不要。渡さない

REMOVE_

DIR  不要。渡さない

DIR  不要。渡さない

REMOVE_DIR_

TREE  任意

TREE  任意 (MS Windows と Linux のみサポート)。

ファイルが読み取り専用であったとしても、FORCE

を引き渡すことで全ファイルを削除します。その他の値、または値がない場合、ファイルが読み取り専用であれば、エラーが返されます。

を引き渡すことで全ファイルを削除します。その他の値、または値がない場合、ファイルが読み取り専用であれば、エラーが返されます。 

CHECK_

DIR  不要。渡さない

DIR  不要。渡さない

CHECK_

FILE  不要。渡さない

FILE  不要。渡さない

SET_

FILE  READ

FILE  READ_ONLYまたはNORMAL

COPY_

FILE  コピー先のファイルの名前

FILE  コピー先のファイルの名前

REMOVE_

FILE  任意指定

FILE  任意指定(32ビットMS Windowsでのみサポート)

読み取り専用のファイルも含め、すべてのファイルを削除するにはFORCEを渡します。その他の値を指定した場合、または値を指定しない場合は、ファイルが読み取り専用のときにエラーが返されます。

読み取り専用のファイルも含め、すべてのファイルを削除するにはFORCEを渡します。その他の値を指定した場合、または値を指定しない場合は、ファイルが読み取り専用のときにエラーが返されます。 

GET_

DIR  ディレクトリの内容を取得する際に、特定タイプのファイルのみを選択するための任意指定のファイル接尾辞

DIR  ディレクトリの内容を取得する際に、特定タイプのファイルのみを選択するための任意指定のファイル接尾辞(例:DLL、EXE、DOC)
すべてのファイルを選択するために、ブランクとして渡さないでください。

COPY_

DIR  コピー先ディレクトリの名前

DIR  コピー先ディレクトリの名前

COPY_

PATTERN  コピー先ディレクトリの名前

PATTERN  コピー先ディレクトリの名前

1

256

 

 

...



戻り値

番号

タイプ

必須/任意

説明

最小長

最大長

最小小数桁数

最大小数桁数

1

A

任意

基本戻りコード

OK =

正常に完了した

正常に完了した 
ER = エラーが発生した

2

2

 

 



2

N

任意

拡張エラー・コード。これは、(使用可能な場合は)エラー処理またはエラー・レポートに役立つオペレーティング・システムのエラー・コードです。

1

15

0

0

3

リスト

任意

返された作業リスト。このリストは、引数1が特定の値の場合のみ以下のように返されます。

返された作業リスト

このリストは、引数1が特定の値の場合のみ以下のように返されます。 

MAKE_

DIR  返されない

DIR  返されない

REMOVE_

DIR  返されない

DIR  返されない

REMOVE_DIR_

TREE  返されない

TREE  返されない

CHECK_

DIR  返されない

DIR  返されない

CHECK_

FILE 返されない

FILE 返されない

SET_

FILE  返されない

FILE  返されない

COPY_

FILE  返されない

FILE  返されない

REMOVE_

FILE  返されない

FILE  返されない

GET_

DIR  ディレクトリの内容を保持する作業リスト。この作業リストは1~7個のフィールド

DIR  ディレクトリの内容を保持する作業リスト。この作業リストは1~7個のフィールド(すなわち列)

で構成でき、完全なファイル名として返されます。 それらは以下の通りです。

で構成でき、完全なファイル名として返されます。 
それらは以下の通りです。 

ファイル名(接尾辞なし)

ファイル接尾辞

 
ファイル接尾辞 
ファイル日付(形式YYYYMMDD) 
ファイル時刻(形式HHMMSS) 
ファイル・サイズ(数値フィールド) 
(サブ)ディレクトリ・インジケータ(YまたはNとして返される) 
実際の名前(完全なファイル名)

この作業リストの既存の内容は、この組み込み関数によってクリアされます。詳細については、以下の例を参照してください。

 

この作業リストの既存の内容は、この組み込み関数によってクリアされます。詳細については、以下の例を参照してください。 

COPY_

DIR  返されない

DIR  返されない

COPY_

PATTERN  返されない

 

 

 

 

PATTERN  返されない





例 

Wiki Markup  例 以下のRDMLファンクションの例(CS/400の自由形式のファンクション・エディターにコピー/貼り付け可能)は、ディレクトリ名を指定するよう要求し、指定されたディレクトリを作成しようとします。ディレクトリの作成操作による基本戻りコードと拡張戻りコードが表示されます。 FUNCTION OPTIONSは、ディレクトリ名を指定するよう要求し、指定されたディレクトリを作成しようとします。ディレクトリの作成操作による基本戻りコードと拡張戻りコードが表示されます。 

     FUNCTION OPTIONS(*DIRECT)

...


DEFINE FIELD(#OV_DIRECT)

...

 TYPE(*CHAR)

...

 LENGTH(65)

...


DEFINE FIELD(#OV_RETC)

...

 TYPE(*CHAR)

...

 LENGTH(2)

...


DEFINE FIELD(#OV_ERRNO)

...

 TYPE(*DEC)

...

 LENGTH(7)

...

 DECIMALS(0)

...

 EDIT_CODE(4)

...


BEGIN_LOOP

...


MESSAGE MSGTXT('Specify name of directory to be created')
REQUEST FIELDS((#OV_

...

DIRECT *NOID))

...


USE BUILTIN(OV_FILE_SERVICE)

...

 WITH_ARGS(MAKE_

...

DIR #OV_DIRECT)

...

 TO_GET(#OV_

...

RETC #OV_ERRNO)

...


MESSAGE MSGTXT('Response from OV_FILE_SERVICE')

...


POP_

...

UP FIELDS(#OV_

...

RETC #OV_ERRNO)

...


END_LOOP

 以下のRDMLファンクションの例;   以下のRDMLファンクションの例(CS/400の自由形式のファンクション・エディターにコピー/貼り付け可能)は、C:\OV_DEMOというディレクトリを作成し、このディレクトリ内にディレクトリA、B、C、およびDを作成します。その後、作成したすべてのディレクトリを破棄します。削除(破棄)するためにはディレクトリが空である必要があるため、破棄操作は作成と逆の順序で実行されます。 FUNCTION OPTIONSするためにはディレクトリが空である必要があるため、破棄操作は作成と逆の順序で実行されます。 

     FUNCTION OPTIONS(*DIRECT)

...


EXECUTE SUBROUTINE(DIRECT)

...

 WITH_PARMS(MAKE_

...

DIR 'C:\OV_DEMO')

...


EXECUTE SUBROUTINE(DIRECT)

...

 WITH_PARMS(MAKE_

...

DIR 'C:\OV_DEMO\A')

...


EXECUTE SUBROUTINE(DIRECT)

...

 WITH_PARMS(MAKE_

...

DIR 'C:\OV_DEMO\B')

...


EXECUTE SUBROUTINE(DIRECT)

...

 WITH_PARMS(MAKE_

...

DIR 'C:\OV_DEMO\C')

...


EXECUTE SUBROUTINE(DIRECT)

...

 WITH_PARMS(MAKE_

...

DIR 'C:\OV_DEMO\D')

...


MESSAGE MSGTXT('Directories all created ....

...

 use OK to delete them now')
POP_

...

UP FIELDS((

...

#DATE *

...

L3 *P2))

...

 AT_LOC(

...

8 23) WITH_SIZE(

...

55 10) EXIT_KEY(*NO)

...

 MENU_KEY(*NO)

...

 PROMPT_KEY(*NO)

...


EXECUTE SUBROUTINE(DIRECT)

...

 WITH_PARMS(REMOVE_

...

DIR 'C:\OV_DEMO\A')

...


EXECUTE SUBROUTINE(DIRECT)

...

 WITH_PARMS(REMOVE_

...

DIR 'C:\OV_DEMO\B')

...


EXECUTE SUBROUTINE(DIRECT)

...

 WITH_PARMS(REMOVE_

...

DIR 'C:\OV_DEMO\C')

...


EXECUTE SUBROUTINE(DIRECT)

...

 WITH_PARMS(REMOVE_

...

DIR 'C:\OV_DEMO\D')

...


EXECUTE SUBROUTINE(DIRECT)

...

 WITH_PARMS(REMOVE_

...

DIR 'C:\OV_DEMO')

...


MESSAGE MSGTXT('Directories all deleted ....

...

 use OK to end this function')
POP_

...

UP FIELDS((

...

#DATE *

...

L3 *P2))

...

 AT_LOC(

...

8 23) WITH_SIZE(

...

55 10) EXIT_KEY(*NO)

...

 MENU_KEY(*NO)

...

 PROMPT_KEY(*NO)

...



SUBROUTINE NAME(DIRECT)

...

 PARMS((#OV_

...

SERV *RECEIVED)

...

 (#OV_

...

DIRECT *RECEIVED))

...


DEFINE FIELD(#OV_SERV)

...

 TYPE(*CHAR)

...

 LENGTH(20)

...


DEFINE FIELD(#OV_DIRECT)

...

 TYPE(*CHAR)

...

 LENGTH(65)

...


DEFINE FIELD(#OV_RETC)

...

 TYPE(*CHAR)

...

 LENGTH(2)

...


DEFINE FIELD(#OV_ERRNO)

...

 TYPE(*DEC)

...

 LENGTH(7)

...

 DECIMALS(0)

...

 EDIT_CODE(4)

...


USE BUILTIN(OV_FILE_SERVICE)

...

 WITH_ARGS(#OV_

...

SERV #OV_DIRECT)

...

 TO_GET(#OV_

...

RETC #OV_ERRNO)

...


IF COND('#OV_

...

RETC *NE OK')
DISPLAY FIELDS(#OV_

...

SERV (#OV_

...

DIRECT *NOID)

...

 #OV_RETC #OV_ERRNO)

...

 EXIT_KEY(*NO)

...

 MENU_KEY(*NO)

...

 PROMPT_KEY(*NO)
ABORT MSGTXT('Directory Operation failed')
ENDIF
ENDROUTINE

; ABORT MSGTXT('Directory Operation failed'); ENDIF; ENDROUTINE;   以下のRDMLファンクションの例(CS/400の自由形式のファンクション・エディターにコピー/貼り付け可能)は、ディレクトリ名を指定するよう要求します。指定されたディレクトリ名が存在しない場合、そのディレクトリを作成するかどうかを指定するよう指示します。 FUNCTION OPTIONSは、ディレクトリ名を指定するよう要求します。指定されたディレクトリ名が存在しない場合、そのディレクトリを作成するかどうかを指定するよう指示します。 

     FUNCTION OPTIONS(*DIRECT)

...


DEFINE FIELD(#OV_DIRECT)

...

 TYPE(*CHAR)

...

 LENGTH(70)

...


DEFINE FIELD(#OV_RETC)

...

 TYPE(*CHAR)

...

 LENGTH(2)

...


DEFINE FIELD(#OV_MBA)

...

 TYPE(*CHAR)

...

 LENGTH(1)

...


BEGIN_LOOP
REQUEST FIELDS((#OV_

...

DIRECT *NOID))

...


USE BUILTIN(OV_FILE_SERVICE)

...

 WITH_ARGS(CHECK_

...

DIR #OV_DIRECT)

...

 TO_GET(#OV_RETC)

...


IF COND('#OV_

...

RETC =

...

 OK')

...


MESSAGE MSGTXT('This directory already exists')
ELSE
USE BUILTIN(OV_MESSAGE_BOX)

...

 WITH_ARGS('

...

Do you want to create this directory ?'

...

 '

...

Create ?'

...

 YN Q) TO_GET(#OV_MBA)

...


IF COND('#OV_

...

MBA =

...

 Y')

...


USE BUILTIN(OV_FILE_SERVICE)

...

 WITH_ARGS(MAKE_

...

DIR #OV_DIRECT)

...

 TO_GET(#OV_RETC)

...


IF COND('#OV_RETC *NE OK')
MESSAGE MSGTXT('Attempt to create directory failed')
ENDIF
ENDIF
ENDIF
END_LOOP

RETC *NE OK'); MESSAGE MSGTXT('Attempt to create directory failed'); ENDIF; ENDIF; ENDIF; END_LOOP;   以下のRDMLファンクションの例(CS/400の自由形式のファンクション・エディターでコピーして貼り付けることが可能)は、ファイル名を指定するよう要求し、指定されたファイルが存在するかどうかを示します。 FUNCTION OPTIONSは、ファイル名を指定するよう要求し、指定されたファイルが存在するかどうかを示します。 

     FUNCTION OPTIONS(*DIRECT)

...


DEFINE FIELD(#OV_DIRECT)

...

 TYPE(*CHAR)

...

 LENGTH(70)

...


DEFINE FIELD(#OV_RETC)

...

 TYPE(*CHAR)

...

 LENGTH(2)

...


BEGIN_LOOP

...


MESSAGE MSGTXT('Specify name of file whose existence is to be checked for')
REQUEST FIELDS((#OV_DIRECT *NOID))
USE BUILTIN(OV_FILE_SERVICE)

...

 WITH_ARGS(CHECK_

...

FILE #OV_DIRECT)

...

 TO_GET(#OV_RETC)

...


IF COND('#OV_

...

RETC =

...

 OK')
MESSAGE MSGTXT('This file exists')
ELSE
MESSAGE MSGTXT('This file does NOT exist')
ENDIF
DISPLAY FIELDS((#OV_DIRECT *NOID))
END_LOOP

; MESSAGE MSGTXT('This file exists'); ELSE; MESSAGE MSGTXT('This file does NOT exist'); ENDIF; DISPLAY FIELDS((#OV_DIRECT *NOID)); END_LOOP;   以下のRDMLファンクションの例(CS/400の自由形式のファンクション・エディターにコピー/貼り付け可能)は、ファイル名と、そのファイルを読み取り専用に設定するか標準(読み書き可能)に設定するかを指定するよう要求します。 FUNCTION OPTIONSに設定するかを指定するよう要求します。 

     FUNCTION OPTIONS(*DIRECT)

...


DEFINE FIELD(#OV_FILE)

...

 TYPE(*CHAR)

...

 LENGTH(70)

...


DEFINE FIELD(#OV_READ)

...

 TYPE(*CHAR)

...

 LENGTH(1)

...

 LABEL('

...

Read Only')

...

 INPUT_ATR(RB01)

...

 DEFAULT(1)

...


DEFINE FIELD(#OV_NORM)

...

 TYPE(*CHAR)

...

 LENGTH(1)

...

 LABEL('Normal')

...

 INPUT_ATR(RB01)

...

 DEFAULT(0)

...


DEFINE FIELD(#OV_RETC)

...

 TYPE(*CHAR)

...

 LENGTH(2)

...


**********

...


BEGIN_LOOP

...


MESSAGE MSGTXT('Specify name of file whose attribute is to be changed and select attribute')
REQUEST FIELDS((#OV_

...

FILE *

...

L3 *

...

P2 *NOID)

...

 (#OV_

...

READ *

...

L5 *P3)

...

 (#OV_

...

NORM *

...

L7 *P3))

...


IF COND('#ov_

...

read =

...

 ''1''')

...


USE BUILTIN(OV_FILE_SERVICE)

...

 WITH_ARGS(SET_

...

FILE #OV_FILE READ_ONLY)

...

 TO_GET(#OV_RETC)

...


...

   ELSE
USE BUILTIN(OV_FILE_SERVICE)

...

 WITH_ARGS(SET_

...

FILE #OV_FILE NORMAL) TO_GET(#OV_RETC)

...


ENDIF

...


IF COND('#OV_

...

RETC =

...

 OK')
MESSAGE MSGTXT('File attribute successfully changed')
ELSE
MESSAGE MSGTXT('ERROR : File attribute was NOT changed')
ENDIF
END_LOOP

; MESSAGE MSGTXT('File attribute successfully changed'); ELSE; MESSAGE MSGTXT('ERROR : File attribute was NOT changed'); ENDIF; END_LOOP;   以下のRDMLファンクションの例(CS/400の自由形式のファンクション・エディターにコピー/貼り付け可能)は、コピー元ファイル名とコピー先ファイル名を指定するよう要求し、コピー操作を試行します。 FUNCTION OPTIONSは、コピー元ファイル名とコピー先ファイル名を指定するよう要求し、コピー操作を試行します。 

     FUNCTION OPTIONS(*DIRECT)

...


DEFINE FIELD(#OV_FROM)

...

 TYPE(*CHAR)

...

 LENGTH(60)

...

 DEFAULT('C:\CONFIG.SYS')

...


DEFINE FIELD(#OV_TO)

...

 TYPE(*CHAR)

...

 LENGTH(60)

...

 DEFAULT('C:\CONFIG.SAV')

...


DEFINE FIELD(#OV_RETC)

...

 TYPE(*CHAR)

...

 LENGTH(2)

...


**********

...


BEGIN_LOOP

...


MESSAGE MSGTXT('Specify the from and to file names')
REQUEST FIELDS(#OV_FROM #OV_TO)
USE BUILTIN(OV_FILE_SERVICE)

...

 WITH_ARGS(COPY_

...

FILE #OV_FROM #OV_TO)

...

 TO_GET(#OV_RETC)

...


IF COND('#OV_

...

RETC =

...

 OK')

...


MESSAGE MSGTXT('File copied')
ELSE
MESSAGE MSGTXT('ERROR : File was NOT copied correctly')
ENDIF
END_LOOP

以下のRDMLファンクションの例は、ディレクトリ名を指定するよう要求し、指定されたディレクトリの内容を取得して表示します。結果として表示される内容は、さまざまな順序でソートできます。この例は、CS/400の自由形式のエディターにコピーして貼り付けることができますが、長いREQUESTコマンドを「展開」しないと、ファンクションが有効なRDMLコードとして受け入れられない場合があります。 

     FUNCTION OPTIONS(*DIRECT)
DEFINE FIELD(#OV_DIRECT) TYPE(*CHAR) LENGTH(70)
DEFINE FIELD(#OV_FILTER) TYPE(*CHAR) LENGTH(3) LABEL('Optional Filter')
DEFINE FIELD(#OV_BYTES) TYPE(*DEC) LENGTH(9) DECIMALS(0) LABEL('Total of Sizes') EDIT_CODE(3)
DEFINE FIELD(#OV_OBJECT) TYPE(*DEC) LENGTH(7) DECIMALS(0) LABEL('Total Objects') EDIT_CODE(3)
DEF_COND NAME(*OBJECTS) COND('#ov_object *gt 0')
DEFINE FIELD(#OV_RETC) TYPE(*CHAR) LENGTH(2)
DEFINE FIELD(#OV_ERRN) TYPE(*DEC) LENGTH(15) DECIMALS(0)
DEFINE FIELD(#OV_NAME) TYPE(*CHAR) LENGTH(15)
DEFINE FIELD(#OV_PREFIX) TYPE(*CHAR) LENGTH(12)
DEFINE FIELD(#OV_SUFFIX) TYPE(*CHAR) LENGTH(3)
DEFINE FIELD(#OV_DATE) TYPE(*CHAR) LENGTH(8)
DEFINE FIELD(#OV_TIME) TYPE(*CHAR) LENGTH(6)
DEFINE FIELD(#OV_ISDIR) TYPE(*CHAR) LENGTH(1)
DEFINE FIELD(#OV_SIZE) TYPE(*DEC) LENGTH(9) DECIMALS(0) EDIT_CODE(3)
DEFINE FIELD(#OV_PB01) TYPE(*CHAR) LENGTH(30) INPUT_ATR(PB01) DEFAULT('''Order By Name''')
DEFINE FIELD(#OV_PB02) TYPE(*CHAR) LENGTH(30) INPUT_ATR(PB02) DEFAULT('''Order By Suffix''')
DEFINE FIELD(#OV_PB03) TYPE(*CHAR) LENGTH(30) INPUT_ATR(PB03) DEFAULT('''Order By Date/Time''')
DEFINE FIELD(#OV_PB04) TYPE(*CHAR) LENGTH(30) INPUT_ATR(PB04) DEFAULT('''Order By Size''')
DEF_LIST NAME(#WLIST) FIELDS(#OV_NAME #OV_PREFIX #OV_SUFFIX #OV_DATE #OV_TIME #OV_SIZE #OV_ISDIR) TYPE(*WORKING) ENTRYS(5000)
DEF_LIST NAME(#DLIST) FIELDS(#OV_NAME #OV_PREFIX #OV_SUFFIX #OV_DATE #OV_TIME #OV_SIZE #OV_ISDIR) COUNTER(#OV_OBJECT)
**********

...


EXECUTE SUBROUTINE(WTOD)

...


BEGIN_LOOP

...


REQUEST FIELDS((#OV_

...

DIRECT *

...

L3 *

...

P2 *NOID)

...

 (#OV_

...

FILTER *

...

L4 *P2)

...

 (#OV_

...

PB01 *

...

L6 *

...

P2 *

...

NOID *

...

OBJECTS *IOCOND)

...

 (#OV_

...

PB02 *

...

L8 *

...

P2 *

...

NOID *

...

OBJECTS *IOCOND)

...

 (#OV_

...

PB03 *

...

L6 *

...

P38 *

...

NOID *

...

OBJECTS *IOCOND)
              

...

(#OV_

...

PB04 *

...

L8 *

...

P38 *

...

NOID *

...

OBJECTS *IOCOND)

...

 (#OV_

...

BYTES *

...

L4 *

...

P22 *OUT)

...

 (#OV_

...

OBJECT *

...

L4 *

...

P49 *OUT))

...

 BROWSELIST(#DLIST)

...


CASE OF_FIELD(#IO$KEY)

...


WHEN VALUE_IS('=

...

 B1')

...


SORT_

...

LIST NAMED(#WLIST)

...

 BY_FIELDS(#OV_NAME)

...


EXECUTE SUBROUTINE(WTOD)

...


WHEN VALUE_IS('=

...

 B2')

...


SORT_

...

LIST NAMED(#WLIST)

...

 BY_FIELDS(#OV_

...

SUFFIX #OV_PREFIX)

...


EXECUTE SUBROUTINE(WTOD)

...


WHEN VALUE_IS('=

...

 B3')

...


SORT_

...

LIST NAMED(#WLIST)

...

 BY_FIELDS(#OV_

...

DATE #OV_TIME)

...


EXECUTE SUBROUTINE(WTOD)

...


WHEN VALUE_IS('=

...

 B4')

...


SORT_

...

LIST NAMED(#WLIST)

...

 BY_FIELDS(#OV_SIZE)

...


EXECUTE SUBROUTINE(WTOD)

...


OTHERWISE

...


USE BUILTIN(OV_FILE_SERVICE)

...

 WITH_ARGS(GET_

...

DIR #OV_DIRECT #OV_FILTER)

...

 TO_GET(#OV_

...

RETC #OV_ERRN #WLIST)
IF COND('#OV_

...

RETC =  OK')
EXECUTE SUBROUTINE(WTOD)
ELSE
MESSAGE MSGTXT('ERROR: Unable to list specified directory ')
ENDIF
ENDCASE
END_LOOP
**********

...


SUBROUTINE NAME(WTOD)

...


CLR_

...

LIST NAMED(#DLIST)

...


CHANGE FIELD(#OV_BYTES)

...

 TO(0)

...


SELECTLIST NAMED(#WLIST)

...


CHANGE FIELD(#OV_BYTES)

...

 TO('#ov_

...

bytes +

...

 #ov_size')

...


ADD_

...

ENTRY TO_LIST(#DLIST)

...

 WITH_MODE(*DISPLAY)

...


...

 

...

  ENDSELECT
ENDROUTINE

以下のRDMLファンクションの例は、ディレクトリ名を指定するよう要求し、指定されたディレクトリの内容を取得して表示します。結果として表示される内容は、さまざまな順序でソートできます。表示されたファイル名は、ダブルクリックして削除できます。ファイルの削除要求は、メッセージ・ボックスで   以下のRDMLファンクションの例は、ディレクトリ名を指定するよう要求し、指定されたディレクトリの内容を取得して表示します。結果として表示される内容は、さまざまな順序でソートできます。表示されたファイル名は、ダブルクリックして削除できます。ファイルの削除要求は、メッセージ・ボックスで\[はい\]をクリックして確定する必要があります。この例は、CS/400の自由形式のエディターにコピーして貼り付けることができますが、長いREQUESTコマンドを「展開」しないと、ファンクションが有効なRDMLコードとして受け入れられない場合があります。 FUNCTION OPTIONS400の自由形式のエディターにコピーして貼り付けることができますが、長いREQUESTコマンドを「展開」しないと、ファンクションが有効なRDMLコードとして受け入れられない場合があります。 

     FUNCTION OPTIONS(*DIRECT)

...


DEFINE FIELD(#OV_DIRECT)

...

 TYPE(*CHAR)

...

 LENGTH(70)

...


DEFINE FIELD(#OV_PIRECT)

...

 REFFLD(#OV_DIRECT)

...


DEFINE FIELD(#OV_FILTER)

...

 TYPE(*CHAR)

...

 LENGTH(3)

...

 LABEL('

...

Optional Filter')

...


DEFINE FIELD(#OV_BYTES)

...

 TYPE(*DEC)

...

 LENGTH(9)

...

 DECIMALS(0)

...

 LABEL('

...

Total of Sizes')

...

 EDIT_CODE(3)

...


DEFINE FIELD(#OV_OBJECT)

...

 TYPE(*DEC)

...

 LENGTH(7)

...

 DECIMALS(0)

...

 LABEL('

...

Total Objects')

...

 EDIT_CODE(3)

...


DEFINE FIELD(#OV_SELECT)

...

 TYPE(*DEC)

...

 LENGTH(7)

...

 DECIMALS(0)

...


DEF_

...

COND NAME(*OBJECTS)

...

 COND('#ov_

...

object *gt 0')
DEFINE FIELD(#OV_RETC)

...

 TYPE(*CHAR)

...

 LENGTH(2)

...


DEFINE FIELD(#OV_ERRN)

...

 TYPE(*DEC)

...

 LENGTH(15)

...

 DECIMALS(0)

...


DEFINE FIELD(#OV_NAME)

...

 TYPE(*CHAR)

...

 LENGTH(15)

...


DEFINE FIELD(#OV_PREFIX)

...

 TYPE(*CHAR)

...

 LENGTH(12)

...


DEFINE FIELD(#OV_SUFFIX)

...

 TYPE(*CHAR)

...

 LENGTH(3)

...


DEFINE FIELD(#OV_DATE)

...

 TYPE(*CHAR)

...

 LENGTH(8)

...


DEFINE FIELD(#OV_TIME)

...

 TYPE(*CHAR)

...

 LENGTH(6)

...


DEFINE FIELD(#OV_ISDIR)

...

 TYPE(*CHAR)

...

 LENGTH(1)

...


DEFINE FIELD(#OV_SIZE)

...

 TYPE(*DEC)

...

 LENGTH(9)

...

 DECIMALS(0)

...

 EDIT_CODE(3)

...


DEFINE FIELD(#OV_PB01)

...

 TYPE(*CHAR)

...

 LENGTH(30)

...

 INPUT_ATR(PB01)

...

 DEFAULT('''

...

Order By Name''')

...


DEFINE FIELD(#OV_PB02)

...

 TYPE(*CHAR)

...

 LENGTH(30)

...

 INPUT_ATR(PB02)

...

 DEFAULT('''

...

Order By Suffix''')

...


DEFINE FIELD(#OV_PB03)

...

 TYPE(*CHAR)

...

 LENGTH(30)

...

 INPUT_ATR(PB03)

...

 DEFAULT('''

...

Order By Date/Time''')

...


DEFINE FIELD(#OV_PB04)

...

 TYPE(*CHAR)

...

 LENGTH(30)

...

 INPUT_ATR(PB04)

...

 DEFAULT('''

...

Order By Size''')

...


DEF_

...

LIST NAME(#WLIST)

...

 FIELDS(#OV_

...

NAME #OV_PREFIX #OV_SUFFIX #OV_DATE #OV_TIME #OV_SIZE #OV_ISDIR) TYPE(*WORKING)

...

 ENTRYS(5000)

...


DEF_

...

LIST NAME(#DLIST)

...

 FIELDS(#OV_

...

NAME #OV_PREFIX #OV_SUFFIX #OV_DATE #OV_TIME #OV_SIZE #OV_ISDIR) COUNTER(#OV_OBJECT)

...

 SEL_ENTRY(#OV_SELECT)

...


**********

...


BEGIN_LOOP

...


CHANGE FIELD(#OV_PIRECT)

...

 TO(#OV_DIRECT)

...


REQUEST FIELDS((#OV_

...

DIRECT *

...

L3 *

...

P2 *NOID)

...

 (#OV_

...

FILTER *

...

L4 *P2)

...

 (#OV_

...

PB01 *

...

L6 *

...

P2 *

...

NOID *

...

OBJECTS *IOCOND)

...

 (#OV_

...

PB02 *

...

L8 *

...

P2 *

...

NOID *

...

OBJECTS *IOCOND)

...

 (#OV_

...

PB03 *

...

L6 *

...

P38 *

...

NOID *

...

OBJECTS *IOCOND)

...


               (#OV_

...

PB04 *

...

L8 *

...

P38 *

...

NOID *

...

OBJECTS *IOCOND)

...

 (#OV_

...

BYTES *

...

L4 *

...

P22 *OUT)

...

 (#OV_

...

OBJECT *

...

L4 *

...

P49 *OUT))

...

 BROWSELIST(#DLIST)

...


CASE OF_FIELD(#IO$KEY)

...


WHEN VALUE_IS('=

...

 B1')

...


SORT_

...

LIST NAMED(#WLIST)

...

 BY_FIELDS(#OV_NAME)

...


EXECUTE SUBROUTINE(WTOD)

...


WHEN VALUE_IS('=

...

 B2')

...


SORT_

...

LIST NAMED(#WLIST)

...

 BY_FIELDS(#OV_

...

SUFFIX #OV_PREFIX)

...


EXECUTE SUBROUTINE(WTOD)

...


WHEN VALUE_IS('=

...

 B3')

...


SORT_

...

LIST NAMED(#WLIST)

...

 BY_FIELDS(#OV_

...

DATE #OV_TIME)

...


EXECUTE SUBROUTINE(WTOD)

...


WHEN VALUE_IS('=

...

 B4')

...


SORT_

...

LIST NAMED(#WLIST)

...

 BY_FIELDS(#OV_SIZE)

...


EXECUTE SUBROUTINE(WTOD)

...


OTHERWISE

...


IF COND('(#ov_

...

pirect =

...

 #ov_direct)

...

 *

...

and (#ov_

...

select *gt 0) *and (#ov_

...

object *gt 0)')

...


EXECUTE SUBROUTINE(DELETE_FIL)

...


ELSE

...


EXECUTE SUBROUTINE(LOAD_DIR)

...


ENDIF

...


ENDCASE

...


END_LOOP

...


**********

...


SUBROUTINE NAME(LOAD_DIR)

...


USE BUILTIN(OV_FILE_SERVICE)

...

 WITH_ARGS(GET_

...

DIR #OV_DIRECT #OV_FILTER)

...

 TO_GET(#OV_

...

RETC #OV_ERRN #WLIST)
IF COND('#OV_

...

RETC =  OK')
EXECUTE SUBROUTINE(WTOD)
ELSE
MESSAGE MSGTXT('ERROR: Unable to list specified directory ')
ENDIF
ENDROUTINE
*********

...

*
SUBROUTINE NAME(DELETE_FIL)

...


DEFINE FIELD(#OV_MBA)

...

 TYPE(*CHAR)

...

 LENGTH(1)

...


DEFINE FIELD(#OV_MSG)

...

 TYPE(*CHAR)

...

 LENGTH(100)

...


GET_

...

ENTRY NUMBER(#OV_SELECT)

...

 FROM_LIST(#DLIST)

...


IF COND('#ov_

...

isdir =

...

 Y')

...


MESSAGE MSGTXT('Selected object is a directory and cannot be deleted')
ELSE
USE BUILTIN(BCONCAT) WITH_ARGS('Confirm that file' #OV_NAME 'is to deleted') TO_GET(#OV_MSG)

...


USE BUILTIN(OV_MESSAGE_BOX)

...

 WITH_ARGS(#OV_

...

MSG 'Delete File' YN Q) TO_GET(#OV_MBA)

...


IF COND('#OV_

...

MBA =

...

 Y')

...


USE BUILTIN(TCONCAT)

...

 WITH_ARGS(#OV_

...

DIRECT '\'

...

 #OV_NAME)

...

 TO_GET(#OV_MSG)

...


USE BUILTIN(OV_FILE_SERVICE)

...

 WITH_ARGS(REMOVE_

...

FILE #OV_MSG)

...

 TO_GET(#OV_RETC)

...


IF COND('#OV_

...

RETC =  OK')
EXECUTE SUBROUTINE(LOAD_DIR)

...


MESSAGE MSGTXT('File successfully deleted')
ELSE
MESSAGE MSGTXT('ERROR : Attempt to delete file failed')
ENDIF
ENDIF
ENDIF
ENDROUTINE
**********

...


SUBROUTINE NAME(WTOD)

...


CLR_

...

LIST NAMED(#DLIST)

...


CHANGE FIELD(#OV_BYTES)

...

 TO(0)

...


SELECTLIST NAMED(#WLIST)

...


CHANGE FIELD(#OV_BYTES)

...

 TO('#ov_

...

bytes +

...

 #ov_size')

...


ADD_

...

ENTRY TO_LIST(#DLIST)

...

 WITH_MODE(*DISPLAY)

...


ENDSELECT

...


...

 

...

 ENDROUTINE