サブ・ファイルに関しては「101. サブファイルの誤解と使用方法 (1)」 から(7)まで解説したが
未だに十分、理解されていないようなので、ここで追加として「もう一度サブ・ファイル」シリーズを
開講したいと思う。
サブ・ファイルの機能の詳細は「サブファイルの誤解と使用方法」シリーズをじっくり読んで頂きたい。
このシリーズではサブ・ファイルのポイントだけを紹介していく。
初めは、
サブ・ファイルは出力フィールドであっても入力できる
である。
これはどういうことかというと、一般の(サブ・ファイル・レコードではない)表示レコードでは
DDSソースで下記のように出力として指定されたフィールドは、当然、READ 命令や EXFMT 命令でも
読み取ることはできない。
A DSPMOD 6A O 1 72DSPATR(HI)
読者はフィールド DSPMOD は O として出力フィールドとして定義しているので
READ や EXFMT で読み取ることはできない、のは当たり前と思うかもしれない。
確かにその通りである。
ではサブ・ファイル・レコードで検証してみよう。
次は TONAKAI のサンプルとして使われているSMP006:商品マスターの照会画面である。

これは照会画面なのでサブ・ファイル・レコードのフィールドは次のようにすべて
出力フィールドとして定義されている。
A R SFREC01 SFL
A TEXT(' SFL明細行 ')
A*%%TS SD 19930612 144015 QUATTRO REL-V3R2M0 5738-PW1
A*------------------------------------------------*
A 20
AO 99 SFLNXTCHG
A GYO 4A O 8 2TEXT(' ')
A 03 DSPATR(UL)
A SHCODE 10A O 8 7TEXT(' 商品コード ')
A SHNAME 24O O 8 20TEXT(' 商品名 ')
A SHTANK 7Y 0O 8 45TEXT(' 単価 ')
A EDTCDE(K)
A SHSCOD 4A O 8 58TEXT(' 品種コード ')
A HNSNAM 14A O 8 63TEXT(' 品種名 ')
これに対するRPG : SMP006 のコンパイル・リストの一部を次に紹介する。
B000000 INPUT レコード SFREC01 ファイル SMP006FM 様式 SFREC01 のフィールド
B000000 SFL明細行
B000001 1 4 GYO
B000002 5 14 SHCODE
B000003 15 38 SHNAME
B000004 39 450SHTANK
B000005 46 49 SHSCOD
B000006 50 63 HNSNAM
どうだろうか ?
出力として定義したはずのサブ・ファイル・レコードのすべてが入力として定義されている。
これはサブ・ファイル・レコードである性格上、サブ・ファイル・レコードはたとえ出力であっても
サブ・ファイルの RRN による CHAIN 命令や READC 命令によって読み込むことができるように
するため IBM によって入力フィールドとして扱われているのである。
従ってサブ・ファイル・レコードのフィールドはすべてプログラムから
読み取ることができる。
※ EnterpriseServer では TONAKAI で DSPF を HTML に変換することができるが
同じように上記のことが考慮されており、SFLの出力フィールドは変換すると
<input type="text" .... readonly> となる読取り専用の input タグに変換される。
これによって TONAKAI で変換された HTML でも SFL の読取り機能が再現されている。