RPG

278. SFLによる POPUPウィンドウの開発

WINDOW キー・ワードを使う POPUP ウィンドウを定義すると
WINDOW 指定の表示レコードは SFL レコードは使うことができない。
CRTDSPF で DSPF 作成のエラーとなってまうからである。
そこで泣く々 WINDOW レコードでは配列型の記述をしている
人も多いのではないだろうか ?

実はちょっとした記述をするだけで WINDOW レコードも
SFL レコードを記述することができる。
その記述も簡単で、

1.

境界だけを持つ空の WINDOW レコードを定義する

2.

SFLCTL レコードでレコード・レベルで WINDOW キー・ワードを使って
1. で定義した WINDOW レコードを指定する。

3.

RPG での EXFMT では WINDOW レコードを WRITE で出力してから
SFLCTL レコードを EXFMT で入出力する。
【 例 】 DSPF ソースのサンプル
 
   *    ---------------------------                            
  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 の開発では重要な機能である。