WINDOW キー・ワードを使う POPUP ウィンドウを定義すると
WINDOW 指定の表示レコードは SFL レコードは使うことができない。
CRTDSPF で DSPF 作成のエラーとなってまうからである。
そこで泣く々 WINDOW レコードでは配列型の記述をしている
人も多いのではないだろうか ?
実はちょっとした記述をするだけで WINDOW レコードも
SFL レコードを記述することができる。
その記述も簡単で、
EXFMT では WINDOW レコードを WRITE で出力してからEXFMT で入出力する。
* ---------------------------
A R WINDOW
* ---------------------------
A TEXT(' ウィンドウ枠 ')
A OVERLAY
A WINDOW(2 2 13 60)
A RMVWDW
A USRRSTDSP
A WDWTITLE((*TEXT -
A '商品コード照会'))
* ---------------------------
A R SFREC01 SFL
* ---------------------------
A TEXT(' SFL明細行 ')
A OPT 1A B 7 3TEXT('OPT')
A VALUES('1' ' ')
:
* ---------------------------
A R SFCTL01 SFLCTL(SFREC01)
* ---------------------------
A SFLSIZ(0006)
A SFLPAG(0005)
A WINDOW(WINDOW)
A TEXT(' SFL制御見出 ')
A OVERLAY
A 41 SFLDSPCTL
A 42 SFLDSP
A 43 SFLINZ
A WINDOW(2 2 13 60)
によって WINDOW の矩形のサイズを指定しているが WINDOW ボーダー、つまり
境界線は記述せずに省略値の OS が示す境界線に任せている。
よく反転イメージなどの強烈な境界線を指定する人がいるが
好みの問題かも知れないが IBM i のユーティリティ(例えば F1-ヘルプ) と
合わせることを意識すればあまり強烈な印象の境界線はいかがなものかと
思ってしまう。
次に RPG での出力も簡単で
:
C*( サブ・ファイルの表示 )
C*----------------------------------------------------+
C DSPLY TAG
C WRITE WINDOW
C SETON 4142
C EXFMT SFCTL01
C SETOFF 4142
C*----------------------------------------------------+
:
のようにウィンドウ・レコード WINDOW を WRITE 命令で出力したら
後はいつものように EXFMT するだけである。
...以上の方法で WINDOW レコードであっても SFL レコードとして記述して
表示することができる。
SFL レコードは学習すると大変、便利で重宝する機能であることがわかる。
IBM i の開発においては、明細表示ではできるだけ SFL レコードによる
記述をお勧めする。
SFL レコード自体の記述は特殊な技術やテクニックは必要としない。
SFL レコードの記述で特殊な処理をしているとすれば
どこかに誤解があるはずなので、このサイトで調べて欲しい。
SFL レコード処理の便利さを実感すると海外輸入 Web 化製品などや
国内 Web 化製品でも SFL レコードが使えないものは
IBM i の持つ非常に大切な開発効率を損ねているといえる。
それほど SFL は IBM i の開発では重要な機能である。