サブ・ファイルに関しては「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 の読取り機能が再現されている。