RPG

241. もう一度サブ・ファイル (6)

最後にサブ・ファイルの正しい使い方と誤った使い方とをまとめてみよう。

正しい サブ・ファイルの出力方法

正しいSFLレコードの出力適用業務とは、

■ SFLSIZ の大きさを SFLPAG の大きさ + 1 の値で DSPFソースを記述する。

 【例】
   A                                      SFLSIZ(0014)
   A                                      SFLPAG(0013)

■ 最初に SFLCLR を行って最初のSFLページを出力したら後は
  ROLLUPキーが押されたときの記述だけを行う。
  ( ROLLDWNの処理は記述する必要はない。)

-------------------------------------------------------------------------------
    C     SETKEY        SETLL     SHOHIN                     
    C                   EXSR      SFLCLR                     
    C*   : ファイルの読み取り                                
    C                   Z-ADD     1             TOPRRN       
    C                   EXSR      READ                       
    C                   Z-ADD     1             DSPREC       
    C*( サブ・ファイルの表示 )  
    C*----------------------------------------------------+               
    C     DSPLY         TAG                                               
    C                   SETON                                        4142 
    C                   EXFMT  SFCTL01                           
    C                   SETOFF                                       4142 
    C*----------------------------------------------------+               
                          :
    C*( ROLL UP )- 次ページ              
    C     *IN14         IFEQ      *ON    
    C                   EXSR      ROLLUP 
    C                   GOTO      DSPLY  
    C                   END              
------------------------------------------------------------------------------------

■ 正しい SFLレコード処理の記述をしていれば
  ROLLUPで SFLを追加する記述さえしていればよい。

ROLLUPキーによってSFLレコードが追加されれば、その後に ROLLDWNキーが押されたとしても
SFLレコードの表示をスクロールして戻すのは i5/OS が行うのでプログラムは何もする必要はない。
事実、ROLLUP した後に ROLLDWNキーを押してもプログラムに制御は戻らない。

■ 正しい SFLレコードの処理

SFLCLR で消去
SFLレコードを
1ページ分だけ
追加する
ROLLUPが押されたら
SFLレコードを追加

たったこれだけの処理だけで SFLレコードの表示を実現することができる。
サブ・ファイルの仕組みは我々開発者が非常に楽になるように仕組まれているのであって
特殊なテクニックを理解したり、あれこれと策を労じる必要はない。
もし特殊なテクニックを使っているのであれば、それは間違いである。
サブ・ファイルは開発をやさしくするための仕組みであって難しくするための仕組みではないのだ。