5250ハンドラー

見出しのアイコン

5250ハンドラーを使うと 24*80 および 27*132の画面サイズの制約から完全に解放されます。

RPG OpenAccess とハンドラー

5250ハンドラーとは ILE-RPG ソースの F-仕様書に挿入する
RPG OpenAccess ( RPG OA )と呼ばれる機能によるプログラムであり、
AutoWeb の追加オプションです。

RPG OpenAccess は IBM によって OS Ver6.1 2008年に発表され
当初は ICFF にしかハンドラーは使うことはできませんでしたが
RPG OA Ver1.1 になってWORKSTNファイルでも RPG OA が使用可能になりました。

5250ハンドラーが使用可能となるのは i5/OS Ver 6.1〜です。
ただし OS Ver6.1 では PTFが必要となります。詳細は最寄の特約店にお問い合わせください。

COBOL とハンドラー

COBOL には RPG OpenAccess のようなハンドラー機能はありませんが
( IBM によって提供されていません) 5250ハンドラーは COBOL でも
使用することができます。

    COPY QRNOPENACC OF 'ASNET.USR-QCBLLESRC'.

のように COBOL の COPY句を使って ASNET.USR/QCBLLESRC のメンバー
QRNOPENACC をインクルードすれば

    CALL 5250HLR IN LIBRARY ASNETCOM USING
             BY CONTENT "OPEN" "CBL116FM  QTROBJ    ".

のように COBOL の CALL命令によって 5250ハンドラーを呼び出して
使うことができます。
これによって COBOL であっても世界で初めて24*80の画面サイズの制約を
打ち破ることに成功しています。

ハンドラーの動作

ハンドラーとはファイルに対する入出力を OS に代わってハンドラーが行う仕組みのことです。
例えばここでは画面ファイルに対するRPGによる入出力命令:

WRITE, READ, EXFMT, CHAIN, READC, UPDATE

を実行すると、その都度、制御が指定されたハンドラーというプログラムに渡されます。
ハンドラーはその入出力命令に対応する処理を行った後、制御をユーザー・プログラムに戻します。

ハンドラーの種類

潟Iフィスクアトロが提供する RPG OpenAccess ハンドラーには
次の二つの種類のハンドラーがあります。

HTMLハンドラー

HTML ハンドラーは RPG の入出力バッファーを HTML に変換してブラウザへ出力します。
TONAKAI/3.0 によって CGI に変換された ILE-RPG プログラムによって
HTML ハンドラーを使えば入出力バッファーは HTML として出力されますので
既存の RPG を CGI として利用することができます。

5250ハンドラー

5250 ハンドラーは RPG の入出力バッファーを
拡張 5250 ストリームに変換して 5250 エミュレータに送出します。
拡張 5250 ストリームとはグラフィカル・ストリーム(GS)とも呼ばれる
5250 ストリームにグラフィカル機能を加えた拡張された 5250 ストリームのことです。

5250エミュレータではグラフィカル・ストリーム(GS)はこれまで同様の表示に留まりますが
AutoWeb で表示すると表示領域は制限なく拡張されて表示することができます。
ここでは 5250 ハンドラーについて解説します。

5250ハンドラーと拡張表示装置ファイル作成(CRTEXDSPF)コマンド

5250 ハンドラーは 24*80 域を超えて記述されている
DSPF の実行を行うことを目的としています。
従って 5250 ハンドラーで使用する DSPF は潟Iフィスクアトロで提供されている
CRTEXDSPF (拡張表示装置ファイル作成) コマンドを使って作成してください。

CRTEXDSPF コマンドは IBM提供の CRTDSPF コマンドと操作もパラメータも同じです。
CRTEXDSPF では、いくつかの点において CRTDSPFの機能を拡張しています。
CRTEXDSPF の使い方の DDSの記述については後に解説します。

【5250ハンドラーの使用例】 ILE-RPG
FPGM116FM  CF   E             WORKSTN
F                                     EXTFILE('QTROBJ/PGM116FM')
F                                     HANDLER(HANDLER:HPARM)
F                                     SFILE(SFREC01:RRN1)
F                                     INFDS(INFDS)
  :
 *( 2017/02/21 11:36:45 ) 5250 ハンドラーを組み込みました。
D HANDLER         S             20A   INZ('ASNET.COM/P5250HLR')
  :
 * ハンドラーに渡すパラメータの定義 *
D HPARM           DS                  QUALIFIED
D   STATUS                       1A
D   HTMTYPE                     10A   INZ('TONAKAI   ')
D   HTM_DIR                    128A   INZ('/AS400-NET.USR/PROJECT/-
D                                     PGM116')
D   INFDSF_PTR                    *   INZ(%ADDR(INFDS))
D   INFDSP_PTR                    *   INZ(%ADDR(INFDSP))
D   INGID_PTR                     *   INZ(%ADDR(*IN))
D   CFKEY_PTR                     *   INZ(%ADDR(CFKEYS))
 * 現在の SFL コントロール・レコード名
D   SFLCTL                      10A
 *[ 注意 ] - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 * SFL の表示行数を拡張するには DSPF の SFLSIZ を拡張して
 * この行数 (HPARM.GYOSU) の分だけ SFL レコードを出力してください。
D   GYOSU                       10I 0
D   EOF                          1N
 * 現在の DSPF の SFLPAG, SFLSIZ を取出します。
D   SFLPAG                       4S 0
D   SFLSIZ                       4S 0
 /COPY ASNET.USR/QRPGLESRC,CFKEYS
【5250ハンドラーの使用例】 COBOL

COBOL の場合も ADD5250HLR コマンドによって既存の COBOL または ILE-COBOLに対して
5250ハンドラー使用の COBOL ソースを生成することができます。

       IDENTIFICATION DIVISION       .   
       PROGRAM-ID. CBL116R.              
       AUTHOR. (C) OFFICE QUATTRO CO,.LTD
          :
      ***  次のステートメントを 5250 ハンドラー用に追加しました *** 
       COPY QRNOPENACC OF 'ASNET.USR-QCBLLESRC'.         . . . . . . . . . . . . 1
       77 DSPEND01        PIC  X(10) VALUE "DSPEND01  ".            
       77 SFCTL01         PIC  X(10) VALUE "SFCTL01   ".            
       77 SFREC01         PIC  X(10) VALUE "SFREC01   ".            
          :
      ***************************************************************** 
       MAIN-PROGRAM    SECTION.                                         
      ***************************************************************** 
       MAINLINE.                                                        
           OPEN  INPUT JAPANL01                                         
                 I-O   CBL116FM.                                        
      * 5250 ハンドラー OPEN  *                                         
           CALL 5250HLR IN LIBRARY ASNETCOM USING    . . . . . . . . . . . . . . 2
                        BY CONTENT "OPEN" "CBL116FM  QTROBJ    ".       
      *    ACCEPT OPEN-FEEDBACK FROM OPNFBK FOR CBL116FM.               
      * 5250 ハンドラー ACCEPT *                                        
           CALL 5250HLR IN LIBRARY ASNETCOM USING  BY CONTENT "ACCEPT" . . . . . 3
                        "OPEN-FEEDBACK" BY REFERENCE OPEN-FEEDBACK.     
          :
      *    WRITE DISP-REC FROM SFCTL01-O FORMAT IS "SFCTL01"  
      *             INDICATORS SFCTL01-O-INDIC.               
      * 5250 ハンドラー WRITE *                               
           CALL 5250HLR IN LIBRARY ASNETCOM USING    . . . . . . . . . . . . . . 4
                        BY CONTENT "WRITE" "SFCTL01   "       
                        BY REFERENCE INDIC-AREA  SFCTL01-O    
                        BY CONTENT LENGTH OF SFCTL01-O.       
                                                              
      *    READ  CBL116FM INTO SFCTL01-I FORMAT IS "SFCTL01"  
      *             INDICATORS SFCTL01-I-INDIC                
      *    END-READ.                                          
      * 5250 ハンドラー READ  *                               
           CALL 5250HLR IN LIBRARY ASNETCOM USING      . . . . . . . . . . . . . 5
                        BY CONTENT "READ"  "SFCTL01   "       
                        BY REFERENCE INDIC-AREA  SFCTL01-I    
                        BY CONTENT LENGTH OF SFCTL01-I.       
            :
【解説】
  1. ASNET.USR/QCBLLESRC のメンバー QRNOPENACC をインクルードするための
    COPY 句が追加されます。
  2. DSPF の OPEN 命令に対して 5250ハンドラー(5250HLR)による OPEN 命令として
         CALL 5250HLR  USING BY CONTENT "OPEN" ... 
    
    が追加されます。
    • 5250ハンドラー OPEN 命令
               CALL 5250HLR IN LIBRARY ASNETCOM USING                
                      BY CONTENT "OPEN" "".
    
  3. DSPF の ACCEPT 命令は 5250ハンドラー(5250HLR)による ACCEPT 命令として
        CALL 5250HLR  USING BY CONTENT "ACCEPT" ...
    
    に置換えられます。
    • 5250ハンドラー ACCEPT 命令
         CALL 5250HLR IN LIBRARY ASNETCOM USING  BY CONTENT "ACCEPT"
                      "OPEN-FEEDBACK" BY REFERENCE OPEN-FEEDBACK.   
    
  4. DSPF に対する WRITE 命令は 5250ハンドラー(5250HLR)による WRITE 命令として
       CALL 5250HLR  USING BY CONTENT "WRITE" ...
    
    に置換えられます。
    • 5250ハンドラー WRITE命令
          CALL 5250HLR IN LIBRARY ASNETCOM USING         
                 BY CONTENT "WRITE" "<表示レコード名>"   
                 BY REFERENCE INDIC-AREA  <表示レコード名>-O
                 BY CONTENT LENGTH OF <表示レコード名>-O.   
    
  5. DSPF に対する READ 命令は 5250ハンドラー(5250HLR)による READ 命令として
       CALL 5250HLR  USING BY CONTENT "READ" ...
    
    に置換えられます。
    • 5250ハンドラー READ 命令
           CALL 5250HLR IN LIBRARY ASNETCOM USING          
                 BY CONTENT "READ"  "<表示レコード名>"    
                 BY REFERENCE INDIC-AREA  <表示レコード名>-I 
                 BY CONTENT LENGTH OF <表示レコード名>-I.   
    
  6. DSPF に対する CLOSE 命令は 5250ハンドラーによる CLOSE 命令として
        CALL 5250HLR IN LIBRARY ASNETCOM USING
                 BY CONTENT "CLOSE"       
    
    に置換えられます。

ユーザーは手動でこのような置換えを行うこともできますが
ヒューマン・エラーによるコンパイル・エラーを誘発することを考えると
ADD5250HLR によって変換したほうがミスの発生を無くすことができます。

【注意】 COBOL で 5250ハンドラーを使用するには

COBOL で 5250ハンドラーを使用するには COBOL では DSPF が外部記述されている
必要があります。
既存の COBOL に5250ハンドラーを組み込むには ADD5250HLR コマンドを
使用してください。
また DSPF への入出力命令が 5250ハンドラーに ADD5250HLR で置換えられるためには
既存の COBOL では DSPF への入出力が

            WRITE DISP-REC FORMAT IS "XXXXXXXXXX"

または

            READ  YYYYYYYYYY INTO XXXXXXXXXX-I FORMAT IS "XXXXXXXXXX"

のように WRITE DISP-REC または READ INTO ... によって FORMAT 句を
伴って記述されていなければなりません。
これ以外の特殊な記述を行っていいる場合は弊社ヘルブ・デスクまで
ご相談ください。

F-仕様書に 5250ハンドラーを記述する

F-仕様書には WORKSTN ファイルの継続行として
ハンドラー : HANDLER(HANDLER:HPARM) と記述します。
HANDLER という変数は

  D HANDLER         S             20A   INZ('ASNET.COM/P5250HDR')

として定義されているプログラムの名前です。

次に HPARM とはハンドラーに渡すパラメータです。
ハンドラーには基本的な情報は i5/OS によって渡されますが、それだけでは不足です。
HPARM は次のように定義されています。

 * ハンドラーに渡すパラメータの定義 *
D HPARM           DS                  QUALIFIED
D   STATUS                       1A
D   HTMTYPE                     10A   INZ('TONAKAI   ')
D   HTM_DIR                    128A   INZ('/AS400-NET.USR/PROJECT/-
D                                     PGM116')
D   INFDSF_PTR                    *   INZ(%ADDR(INFDS))
D   INFDSP_PTR                    *   INZ(%ADDR(INFDSP))
D   INGID_PTR                     *   INZ(%ADDR(*IN))
D   CFKEY_PTR                     *   INZ(%ADDR(CFKEYS))
 * 現在の SFL コントロール・レコード名
D   SFLCTL                      10A
 *[ 注意 ] - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 * SFL の表示行数を拡張するには DSPF の SFLSIZ を拡張して
 * この行数 (HPARM.GYOSU) の分だけ SFL レコードを出力してください。
D   GYOSU                       10I 0
D   EOF                          1N
 * 現在の DSPF の SFLPAG, SFLSIZ を取出します
D   SFLPAG                       4S 0
D   SFLSIZ                       4S 0
 /COPY ASNET.USR/QRPGLESRC,CFKEYS

HPARM は様々な必要な情報を 5250 ハンドラーに渡します。

INFDSF_PTRINFDSF(ファイル・フィードバック域) のポインター
INFDSP_PTRINFDSP(プログラム情報域) のポインター
INGID_PTR標識域(*IN01〜*IN99)のポインター
CFKEY_PTR機能キー域(CF01〜CF24)のポインター
SFLCTL現在、活動中のSFLコントロール・レコードの名前
GYOSU PGM が表示する行数の値。
5250 エミュレータで実行したときには、この値には
SFLPAG の値が入ります。
AutoWeb で実行したときには、この値には
SFLSIZ の値が入ります。
PGM では常にこの GYOSU の分だけ LOOP して
SFL レコードが表示されるようにすると
SFLSIZ の値を拡張すれば AutoWeb による表示行数も
拡張されます。
EOF現在は使用していません。
SFLPAGDSPF の SFLPAG の値が入ります。
SFLSIZ DSPF の SFLSIZ の値が入ります。
従来、 RPG プログラムで動的に SFLPAG や SFLSIZ の
値を取得することは困難でした。
従って DSPF の SFLPAG の値を変更すると RPG ソース
に記述されている SFL の行数もまた手動で変更する必要がありました。
しかし 5250 ハンドラーを使用するときは HPARM DS
に SFLPAG と SFLSIZ の値が入りますので PGM は
GYOSU の分だけ LOOP して SFL レコードを出力する
ようにさえしておけば DSPF の SFLPAG や SFLSIZ の
変更があっても RPG を修正する必要はなくなりました。

... 従ってユーザー・プログラムには INFDS と INFDSP (SDS)が
    必ず INFDSF と INFDSP という名前で登録されていなければなりません。
    ADD5250HLR を使用すれば、これらの DS の存在も検査されて
    必要な DS記述が自動的に追加されます。

手動による追加の誤りがあれば予測できない結果を生じます。
ADD5250HLR 以外の手動による追加の誤りは
保守サポートの範囲外となりますのでお客様の責任において修正してください。

【プログラム状況データ構造の例】
  D*( プログラム状況データ構造 )
  D INFDSP         SDS
  D  PGM                    1     10
  D                              512A

サブ・ファイル表示レコード数の考慮点

5250 エミュレータの表示レコード数SFLPAG
AutoWeb での SFL 表示レコード数SFLSIZ

...この違いを予め考慮しておく必要があります。
5250エミュレータで表示されるSFLレコード数は SFLPAG として設定した値ですが
AutoWeb で表示される SFLレコード数は SFLSIZ として設定されている値です。

なぜこの違いがあるかというと AutoWeb で表示行数を大きく拡張しようとすると
SFLPAG の値を拡張したのでは CRTDSPF のコンパイル・エラーとなってしまいます。
ところが SFLSIZ であれば、いくら拡張しても CRTDSPF コマンドのエラーにはなりません。
SFLSIZ の値は SFL レコードをメモリ中で保管するレコード数のことです。
SFLSIZ の値が SFLPAG の値より大きな値(必ずしも +1ではない)として設定されていれば
SFLSIZ の値を超えて SFL レコードの追加が行われると SFLのサイズ(SFLSIZ)は自動的に
i5/OS によって拡張します。
つまり SFLSIZ は、SFLPAG より大きな値であればいくらでも SFL を拡張することが
できるので任意の値(SFLPAG)に設定してこれを AutoWeb の SFL レコード出力数とすれば
よいということになります。

SFLPAG と SFLSIZ の値を同じ値に設定していた場合

PGM が SFLPAG と SFLSIZ が同じ値として開発されていた場合も 5250 ハンドラーを
挿入して SFLSIZ の値を任意の値(SFLPAG)に拡張しても問題ありません。
SFLPAG と SFLSIZ が同じ値である場合はロール・ダウン・キーが押されると
制御が PGM に戻って PGM が用意していたロール・ダウンの処理のルーチンを通ることになります。
しかし 5250 ハンドラーを挿入して SFLSIZ の値を SFLPAG より大きく設定すると
ロール・ダウン処理は i5/OS によって行われますので PGM には制御は戻りませんが
ロール・ダウン表示は正しく行われます。
それより以降は PGM 内に書かれたロール・ダウン・ルーチンを通ることは
二度とありません。

HPARM.GYOSU の分だけ LOOP するように PGM を修正する

5250 ハンドラーへのパラメータ HPARM には
GYOSU という名前の SFL 表示行数を示すフィールドが定義されています。
5250 ハンドラーが挿入された PGM が 5250 エミュレータ上で実行されたときは
GYOSU には SFLPAG の値が入り、AutoWeb として実行されたときには
GYOSU には SFLSIZ の値が入ります。
ユーザー PGM は、この GYOSU の分だけ LOOP してSFL レコード数を出力するように
しておけば 5250 エミュレータ上で PGM が実行されるときは SFLPAG 数だけ
SFL レコードが表示され、AutoWeb として実行されたときには SGLSIZ の分の
SFL レコードを出力するようにすることができます。
つまりユーザー PGM では 先に解説した HPARM.GYOSU 分だけ LOOP するように
しておけば SFLPAG と SFLSIZ の違い(条件分岐)を考慮する必要がなくなります。

  C******************************************************
  C     READ          BEGSR
  C******************************************************
  C                   MOVE      *BLANKS       EOF                  1
  C                   SETOFF                                       5945
  C*( データ・ベースの検索 )
  C                   EVAL      GYOSU = HPARM.GYOSU        ← この行のみを追加した
  C     RTNRED        TAG
  C*
  C     TOPRRN        ADD       GYOSU         ENDRRN               40
  C                   SUB       1             ENDRRN
  C*
  C     TOPRRN        DO        ENDRRN        RRN1                 40
  C     AGAIN         TAG
  C                   SETOFF                                       50
  C                   READP     JAPANL01                           50
  C   50              MOVE      'E'           EOF                  1
  C   50              GOTO      REDEND
  C*( 行 NO に入れる )
  C                   MOVE      RRN1          GYO
  C*( マイナス温度は赤色で表示 )
  C     AVMIN         COMP      0                                  61
  C*( サブファイル へ更新 )
  C*----------------------------------------------------+
  C                   WRITE     SFREC01
  C*----------------------------------------------------+
  C  N59              Z-ADD     RRN1          DSPREC
  C  N59              SETON                                        59
  C                   Z-ADD     RRN1          LSTRRN               40
  C                   END
  C     REDEND        ENDSR

可変開始行: SLNO(*VAR)

5250 ハンドラーを使うと横方向(列)だけでなく縦方向(行)の制限もありません。
SFL レコードも SFLSIZ の分だけ表示することができますので
SFL を標示する場合、上下に可変長に広がる可能性があります。
このとき最下部のメッセージや機能キーの表示も SFL のデータ量に応じて
上下に表示位置を変化させることができる機能があります。
それが可変開始行( SLNO(*VAR) )です。

IBM の仕様では SLNO(*VAR) は F-仕様書で制御され、
サブ・ファイルを含む DSPF では両方を指定することはできない仕様です。
しかし 5250 ハンドラーは SLNO(*VAR)は使用することができ、
しかも F-仕様書で記述する必要はありません。
5250 ハンドラーでは SLNO(*NO)
レコード・レベルのキー・ワードとして定義されますので
SLNO(*VAR) の開始行を示す変数として
2桁数字の SLNO という名前のフィールドを最初に定義しておいて
プログラムの中よりこの値を変更したりセットするものです。
SLNO という名前のフィールド以降に定義されているフィールドは
SLNO で与えられた数の分の行数が加算されて表示されます。

【例】
  A          R DSPEND01
  A                                      TEXT(' 機能キーの表示 ')
  A                                      OVERLAY
  A                                      CF03(03 ' 終了 ')
  A                                      SLNO(*VAR)
  A            SLNO           2Y 0H
  A                                 17  2'F3= 終了 '
  A                                       COLOR(BLU)
  A                                 17 19'F12= 前画面 '
  A                                      COLOR(BLU)
【解説】

SLNO(*VAR) によってこのレコードは可変開始行による表示であることを示しています。
SLNO (可変開始行)は 非表示(H)で定義されていて
ユーザー・プログラムによってその値がセットされます。
SLNO が 1 とセットされたときは

  A                                 17  2'F3= 終了 '
  A                                       COLOR(BLU)
  A                                 17 19'F12= 前画面 '
  A                                      COLOR(BLU)

17+1 = 18 行目に表示されます。
この DSPF を表示する RPG プログラムは
*INZSR(=最初だけに実行されるSUBSR)には次のように記述されています。

  C******************************************************
  C     *INZSR        BEGSR
  C******************************************************
  C*  初期 サイクル のみの実行
        :
   * U8: AutoWeb 上での実行
  C     *INU8         IFEQ      *ON
  C                   Z-ADD     10            SLNO
   * 5250 エミュレータ上での実行
  C                   ELSE
  C                   Z-ADD     1             SLNO
  C                   ENDIF
                       :
  C                   ENDSR

つまり AutoWeb で実行されるときは
先のレコード : DSPEND01 は 17+10=27 行目に機能キーが表示され、
5250エミュレータで表示されるときには 17+1 = 18 行目に機能キーが表示されることになります。
このようにして可変行の SFLSIZ 表示のサブ・ファイルと
可変開始行 SLNO(*VAR)指定のレコードを組み合わせて
表示するようにすれば適切な表示を実現することができます。

MSGLOC (エラー・メッセージ表示行)

ファイル・レベルのキー・ワードとして MSGLOC が定義されています。
多くの MSGLOC キー・ワードは

  A                             MSGLOC(24)

として 24行目にエラー・メッセージを出力するように定義されています。
ところが機能キーの表示と同じように SFLレコードの表示が可変行である場合、
MSGLOC も 24行目に指示したのではデータ部分と重なってしまいます。
かといって SFLSIZ を超えた固定値に設定したのでは、エラー・メッセージの出力は
画面のはるか下の方になってエラーとして目立たなくなるのでは? という懸念があります。

しかしこの問題はありません。
MSGLOC の値は、どのような値を指定してもコンパイル・エラーにはなりませんが
その指定された値が認められたわけではなく、たとえ MSGLOC(99) と指定したとしても
DSPF *FILE オブジェクトの内部では MSGLOC(24)として保管されています。
従って5250エミュレータ上でエラー・メッセージが表示される場合は、
やはり 24行目にこれまでどおりに表示されます。
次に AutoWeb で画面が拡大されて表示される場合は、
AutoWeb はエラー・メッセージを検索してエラーが発生すればエラー・メッセージを
JavaScript の alert メッセージとして POPUP 表示しますので
MSGLOC の位置は無視され、データとメッセージが重なることはありません。

CRTEXDSPF (拡張表示装置ファイル作成)の使用方法

新しいDSPSIZ : *FREE

DSPF の DDS 記述では *DS3 (24*80) および *DS4 (27*132) が提供されていますが
CRTEXDSPF では DDSソースにさらに次のように *FREE を定義することができます。

  A                                DSPSIZ(*FREE)

これは 99*255 つまり最大 99 行、 255 列の画面表示を記述することができます。
99*255 サイズに特別な技術的な制約や制限、理由などがあるわけではありません。
記述的には無制限でも問題はありませんが、表示に使用されている機能などだけの問題です。
とりあえずは 99*255 あれば十分ではないかと思われます。
この記述さえファイル・レベルでしておけば、その範囲内で自由に記述することができます。

【例】
  A                                      DSPSIZ(*FREE)
  A                                      MSGLOC(28)
  A                                      PRINT
   * サブ・ファイル・レコード
  A          R SFREC01                   SFL
  A                                      TEXT(' SFL明細行 ')
                :
  A            NHSU11         4Y 0O  6125TEXT('11 月売上高 ')
  A                                      EDTCDE(J)
  A            NHSU12         4Y 0O  6132TEXT('12 月売上高 ')
  A                                      EDTCDE(J)
【解説】

このようにサブ・ファイル・レコードであっても
横方向には 80 桁や 132 桁を超えても自由に記述することができます。

CRTEXDSPF で作成した DSPF を 5250ハンドラーをバインドした RPG で表示すると

  • 従来の 5250 エミュレータで表示すると
    従来通りに 24*80 域の部分だけが表示されます。
  • AutoWeb で表示すると 24*80 域を超えたすべての項目が表示されます。

*FREE による位置の変更

AutoWeb で表示するときだけ表示位置を変更させることができます。

【例】
  A                                  1 61' システム
  A  *FREE                           1104
  A                                  1 72SYSNAME
  A  *FREE                           1115
【解説】

*FREE の文字列は 9 桁目から指定します。これは DDS仕様の *DS3 や *DS4 の
指定の方法と同じです。( 詳細は IBM DDS解説書をご参照ください。)

通常の 5250 エミュレータでは「システム」という文字列は 61 桁目から
表示され、SYSNAME というフィールドは 72 桁目から表示されますが
AutoWeb で表示したときは「システム」は 104 桁目から表示され、
SYSNAME は 115 桁目から表示されます。

CRTEXDSPF によって生成される作業 DSPFソースとユーザー定義属性

CRTEXDSPF は最終的には CRTDSPFコマンドによって DSPF を生成しますが
CRTDSPF の生成の基となる DSPFソースは
ライブラリー ASNET.USR の QDSPSRC に保管されています。
このことは特に意識する必要はありませんが
内部処理をより深く理解したい方のためにここで解説します。

CRTEXDSPF による DSPF の作成

ユーザーが作成した DSPFソースは IBM CRTDSPF の文法に準拠するように
変換されたDSPFソースが ASNET.USR/QDSPSRC に一時的に保存されます。
どのように変換されたのかは SEU を使って参照することができます。

【 変換ソースの例 】 ASNET.USR/QDSPSRC(PGM116FM)

CRTEXDSPF によって変換された行は白色によってハイライト表示されますので
どのように変換されたのかを確認することができます。

オブジェクトの登録ソース情報

上記のように DSPF は実際は ASNET.USR/QDSPSRC から生成されたオブジェクトですが
DSPOBJD で参照するオブジェクトのソース登録情報は次のように
最初のソース・ファイルから生成された登録として記録されます。

 ソース・ファイル . . . . . . . . . . :   QDSPSRC
   ライブラリー . . . . . . . . . . . :     QTRSRC
 メンバー . . . . . . . . . . . . . . :   PGM116FM
 属性 . . . . . . . . . . . . . . . . :   DSPF
 ユーザー定義の属性 . . . . . . . . . :   CRTEXDSPF

ただし「ユーザー定義の属性」は CRTEXDSPF として記録されて
このオブジェクト(DSPF)が CRTEXDSPF によって生成されたことが記録されています。
したがって開発者は DSPOBJD の「8= 保守属性の表示」を調べることによって
この DSPFオブジェクトが CRTEXDSPF によって生成されたものかどうかを
調べることができます。

【 サンプル・ソース 】 ASNET.USR/QDSPSRC(PGM116FM)

次は ASNET.USR/QDSPSRC に保管されている DSPFソースのサンプルです。

  • CRTEXDSPF による実行コマンドが保管されています。
  • CRTEXDSPF による変更箇所が白色の高輝度で表示されています。

5250ハンドラーを使用した実際の使用例

【例】 年間売上ヒストリー

... 5250ハンドラーと CRTEXDSPF を組み合わせることによって
    長年の歴史的課題であった 24*80 域の制約はここに終わりを告げました。
    5250ハンドラー + CRTEXDSPF は今までの DSPF ソースと同じ記述方法と
    ほとんど変わりがないことに意味があります。
    しかも AutoWeb によってWeb化されるのですから
    CGI や JSP&Servlet,PHP や海外輸入パッケージに比べて
    はるかに簡単で最も効率のよい Web 化であることは間違いありません。

5250 エミュレータの登場によって IBM i の Web 化手法で最も効率的で
既存のソフトウェアや開発技術を生かせるのは AutoWeb において他なりません。
IBM i には IBM iに適した最も開発効率のよい方法があるはず。
それは DSPF の DDSソース + RPG による開発なのです。

【例】 気象データ・ランキング

「PGM116:気象データ・ランキング」は全国の平均気温の高い順に気象庁発表のデータを
並べて表示したものです。

気象データ・ランキングの DSPFソース

0001.00       *  名前 :  PGM116FM
0002.00       *  ソース :   QTRSRC/QDSPSRC(PGM116FM)
0003.00       *  作成   :   CRTEXDSPF FILE(QTROBJ/PGM116FM) SRCFILE(QTRSRC/Q
0004.00       *                   LVLCHK(*NO) AUT(*ALL)
0005.00       *  説明   : 5250 ハンドラー用に拡張された DSPF ソース
0006.00       *      ADD= 追加 , CHG= 変更箇所
0007.00
0008.00       *  DSPSIZ(*FREE) を宣言
0009.00 CHG  A                                      DSPSIZ(*FREE)
0010.00      A                                      MSGLOC(24)
0011.00      A                                      PRINT
0012.00      A                                      INDARA
0013.00      A          R SFREC01                   SFL
0014.00      A                                      TEXT(' SFLレコード ')
0015.00      A  20
0016.00      AO 99                                  SFLNXTCHG
0017.00      A            GYO            4A  O  7  2TEXT('  ')
0018.00      A  03                                  DSPATR(UL)
0019.00      A            JPCODE         2A  O  7  7
0020.00      A            JPNAME        10O  O  7 11
                           :
0026.00      A            AVHUM          4Y 0O  7 72EDTCDE(K)
0027.00      A*( ここからは 80 桁オーバー↓ )
0028.00 ADD  A            AVSUN          4Y 0O  7 84EDTCDE(K)
0029.00 ADD  A            AVRAN          4Y 0O  7 96EDTCDE(K)
0030.00 ADD  A            AVFIN          3Y 0O  7108EDTCDE(K)
0031.00 ADD  A            AVAME          3Y 0O  7120EDTCDE(K)
0032.00 ADD  A            AVSNW          3Y 0O  7132EDTCDE(K)
0033.00      A          R SFCTL01                   SFLCTL(SFREC01)
0034.00      A*%%TS  SD  20170215  134547  QTR         REL-V6R1M0  5761-WDS
0035.00      A                                      SFLSIZ(0030)
0036.00      A                                      SFLPAG(0014)
0037.00      A                                      TEXT(' SFLコントロール ')
0038.00      A N49                                  ROLLUP(14 ' 次頁 ')
0039.00      A                                      CF03(03 ' 終了 ')
0040.00      A                                      OVERLAY
0041.00      A                                      SETOF(99)
0042.00      A  42                                  SFLDSP
0043.00      A  41                                  SFLDSPCTL
0044.00      A  43                                  SFLINZ
0045.00      A  46                                  SFLDLT
0046.00      A  44                                  SFLCLR
                       :
                       :
0060.00      A                                  1 27' 気象データ・ランキング '
0061.00      A                                      DSPATR(HI)
0062.00       *( *FREEE によって表示位置を変更する )
0063.00      A                                  1 61' システム '
0064.00 ADD  A  *FREE                           1115
0065.00      A                                  1 72SYSNAME
0066.00 ADD  A  *FREE                           1126
0067.00      A                                  2 61' 日付 '
0068.00 ADD  A  *FREE                           2115
0069.00      A                                  2 70DATE(*JOB *YY)
0070.00      A                                      EDTCDE(W)
0071.00 ADD  A  *FREE                           2124
0072.00      A                                  3 61' 時刻 '
0073.00 ADD  A  *FREE                           3115
0074.00      A                                  3 72TIME
0075.00 ADD  A  *FREE                           3126
0076.00      A                                  4 61' ユーザー '
0077.00 ADD  A  *FREE                           4115
0078.00      A                                  4 72USER
0079.00 ADD  A  *FREE                           4126
0080.00      A                                  6  2'  '
0082.00      A                                  6  7'CODE'
0083.00      A                                      DSPATR(HI)
0084.00      A                                  6 12' 都道府県 '
0085.00      A                                      DSPATR(HI)
                 :
0096.00      A*( ここからは 80 桁オーバー↓ )
0097.00 ADD  A                                  6 83' 日照時間 '
0098.00      A                                      DSPATR(HI)
0099.00 ADD  A                                  6 95' 年降水量 '
0100.00      A                                      DSPATR(HI)
0101.00 ADD  A                                  6107' 年快晴日 '
0102.00      A                                      DSPATR(HI)
0103.00 ADD  A                                  6119' 年降水日 '
0104.00      A                                      DSPATR(HI)
0105.00 ADD  A                                  6131' 年降雪日 '
0106.00      A                                      DSPATR(HI)

SFLSIZ と SFLPAG の留意点

SFLPAG とは画面の1ページ当たりに表示される行数のことであり
SFLSIZ とはプログラムが SFLレコードを保存する容量のことです。
SFLSIZ の値を SFLPAG の数より大きくしておくと RPG/COBOL で SFLレコードを
追加したときに SFLSIZが満杯になったとしても SFLSIZ の値は自動拡張されます。

5250ハンドラーを組み込んだRPGプログラムでは 1画面に表示されるのは
SFLPAG ではなく SFLSIZ の行数分のレコードが表示されます。
CRTDSPFコマンドによる DSPF作成では SFLPAGが大きな値の場合では
画面サイズ・オーバーのエラーとなりますが SFLSIZ の値は拡大しても
CRTDSPFの文法エラーにはなりません。
5250ハンドラーはこのことを利用して SFLSIZの分のSFLレコードを表示することによって
表示行数を拡大しています。

CRTEXDSPF による DSPFの作成

CRTEXDSPF FILE(QTROBJ/SMP111FM) SRCFILE(QTRSRC/QDSPSRC) LVLCHK(*NO) AUT(*ALL)

のようにして DSPFを作成します。
このとき必ず LVLCHK(*NO) AUT(*ALL) も指定してください。

LVLCHK(*NO) とは

LVLCHK(*NO)とは「レコード様式レベルの検査」を行わないことを意味します。
「レコード様式レベルの検査」とは DSPF 作成の後で
RPG/COBOL がコンパイルされているかの後/先の検査を行うことを意味します。
DSPF を作成した後で RPG/COBOLを作成することが通例ですが
I/Oバッファーの位置に変更のない
DSPF の再作成が行われたときも検査が行われますので LVLCHK(*YES)で作成すると
つねに余計な検査のために不要な実行エラーが頻出する可能性があります。
LVLCHK(*NO)で作成しておけばこのような余計な実行エラーを避けることができます。

気象データ・ランキングの RPGソース

拡張する前の「PGM116:気象データ・ランキング」の RPGソースを最初に紹介します。
元の「PGM116:気象データ・ランキング」は意図的に RPG III によって書かれています。

0001.00      H            Y/                                                      PGM116
0002.00      F********** 気象データ・ランキング *******************************
0003.00      FPGM116FMCF  E                    WORKSTN
0004.00      F                                        RRN1  KSFILE SFREC01
0005.00      F                                              KINFDS INFDS
0006.00      FJAPANL01IF  E           K        DISK
0007.00      F*****************************************************************
0008.00      E                    DSPDTA   1024  1                入力 データ
0009.00      E                    SAVDTA   1024  1                SAVE-データ
0010.00      I*       読み取り ファイル の FORMAT を外部 DS として READ
0011.00      IDATADS    E DSJAPANL01
0012.00      I                                        11024 DSPDTA
            :
                        :
0046.00      C*   : ファイルの読み取り
0047.00      C                     Z-ADD1         TOPRRN
0048.00      C                     EXSR READ
0049.00      C                     Z-ADD1         DSPREC
0050.00      C*( サブ・ファイルの表示 )
0051.00      C                     WRITEDSPEND01
0052.00      C*----------------------------------------------------+
0053.00      C           DSPLY     TAG                             |
0054.00      C                     SETON                     4142  |SFL-DSPLY
0055.00      C                     EXFMTSFCTL01                    |
0056.00      C                     SETOF                     4142  |
0057.00      C*----------------------------------------------------+
                         :
0083.00      C******************************************************
0084.00      C           READ      BEGSR
0085.00      C******************************************************
0086.00      C                     MOVE *BLANKS   EOF     1
0087.00      C                     SETOF                     5945
0088.00      C*( データ・ベースの検索 )
0089.00      C           RTNRED    TAG
0090.00      C*
0091.00      C           TOPRRN    ADD  GYOSU     ENDRRN  40
0092.00      C                     SUB  1         ENDRRN
0093.00      C*
0094.00      C           TOPRRN    DO   ENDRRN    RRN1    40       READ
0095.00      C           AGAIN     TAG
0096.00      C                     SETOF                     50
0097.00      C                     READPJAPANL01                 50
0098.00      C   50                MOVE 'E'       EOF     1
0099.00      C   50                GOTO REDEND
0100.00      C*( 行 NO に入れる )
0101.00      C                     MOVE RRN1      GYO
0102.00      C*( マイナス温度は赤色で表示 )
0103.00      C           AVMIN     COMP 0                      61
0104.00      C*( サブファイル へ更新 )
0105.00      C*----------------------------------------------------+
0106.00      C                     WRITESFREC01                    |
0107.00      C*----------------------------------------------------+
0108.00      C  N59                Z-ADDRRN1      DSPREC
0109.00      C  N59                SETON                     59
0110.00      C                     Z-ADDRRN1      LSTRRN  40
0111.00      C                     END                             READ
0112.00      C           REDEND    ENDSR

変換後のILE-RPGソース・ファイル

0001.00 H DFTNAME(PGM116) DATEDIT(*YMD/)
0002.00 F********** 気象データ・ランキング *******************************
0003.00 FPGM116FM  CF   E             WORKSTN
0004.00 F                                     EXTFILE('QTROBJ/PGM116FM')
0005.00 F                                     HANDLER(HANDLER:HPARM)
0006.00 F                                     SFILE(SFREC01:RRN1)
0007.00 F                                     INFDS(INFDS)
0008.00 FJAPANL01  IF   E           K DISK
0009.00 F*****************************************************************
0010.00  *( 2017/02/24 13:45:29 ) 5250 ハンドラーを組み込みました。
0011.00 D HANDLER         S             20A   INZ('ASNET.COM/P5250HLR')
0012.00
0013.00  * ハンドラーに渡すパラメータの定義 *
0014.00 D HPARM           DS                  QUALIFIED
0015.00 D   HSIZE                        4S 0 INZ(%SIZE(HPARM))
0016.00 D   STATUS                       1A
0017.00 D   HTMTYPE                     10A   INZ('TONAKAI   ')
0018.00 D   HTM_DIR                    128A   INZ('/AS400-NET.USR/PROJECT/-
0019.00 D                                     PGM116')
0020.00 D   INFDSF_PTR                    *   INZ(%ADDR(INFDS))
0021.00 D   INFDSP_PTR                    *   INZ(%ADDR(INFDSP))
0022.00 D   INGID_PTR                     *   INZ(%ADDR(*IN))
0023.00 D   CFKEY_PTR                     *   INZ(%ADDR(CFKEYS))
0024.00  * 現在の SFL コントロール・レコード名
0025.00 D   SFLCTL                      10A
0026.00  *[ 注意 ] - - - - - - - - - - - - - - - - - - - - - - - - - - - -
0027.00  * SFL の表示行数を拡張するには DSPF の SFLSIZ を拡張して
0028.00  * この行数 (HPARM.GYOSU) の分だけ SFL レコードを出力してください。
0029.00 D   GYOSU                       10I 0
0030.00 D   EOF                          1N
0031.00  * 現在の DSPF の SFLPAG, SFLSIZ を取出します。
0032.00 D   SFLPAG                       4S 0
0033.00 D   SFLSIZ                       4S 0
0034.00  /COPY ASNET.USR/QRPGLESRC,CFKEYS
0035.00
0036.00 D*( プログラム状況データ構造 )
0037.00 D INFDSP         SDS
0038.00 D  PROC_NAM         *PROC
0039.00 D  ROUTINE          *ROUTINE
0040.00 D  PGM                    1     10
0041.00 D                              512A
0042.00 D  PGMINFO                1    512
0043.00 D  LINE_NUM              21     28
0044.00 D  ERRMSGID              46     51
0045.00 D  JOB                  244    253
0046.00 D  USER                 254    263
0047.00 D  NBR                  264    269
0048.00 D  RUN_DATE             276    281S 0
0049.00
             :
             :
0125.00 C******************************************************
0126.00 C     READ          BEGSR
0127.00 C******************************************************
0128.00 C                   MOVE      *BLANKS       EOF               1
0129.00 C                   SETOFF                                       5945
0130.00 C*( データ・ベースの検索 )
0131.00 C                   EVAL      GYOSU = HPARM.GYOSU
0132.00 C     RTNRED        TAG
0133.00 C*
0134.00 C     TOPRRN        ADD       GYOSU         ENDRRN            4 0
0135.00 C                   SUB       1             ENDRRN
0136.00 C*
0137.00 C     TOPRRN        DO        ENDRRN        RRN1              4 0          READ
0138.00 C     AGAIN         TAG
0139.00 C                   SETOFF                                       50
0140.00 C                   READP     JAPANL01                               50
0141.00 C   50              MOVE      'E'           EOF               1
0142.00 C   50              GOTO      REDEND
0143.00 C*( 行 NO に入れる )
0144.00 C                   MOVE      RRN1          GYO
0145.00 C*( マイナス温度は赤色で表示 )
0146.00 C     AVMIN         COMP      0                                    61
0147.00 C*( サブファイル へ更新 )
0148.00 C*----------------------------------------------------+
0149.00 C                   WRITE     SFREC01                                      |
0150.00 C*----------------------------------------------------+
0151.00 C  N59              Z-ADD     RRN1          DSPREC
0152.00 C  N59              SETON                                        59
0153.00 C                   Z-ADD     RRN1          LSTRRN            4 0
0154.00 C                   END                                                    READ
0155.00 C     REDEND        ENDSR

変換後のILE-RPGソースには次の追加が行われます。

@ファイル仕様書への追加
  • 5250ハンドラーの追加 ..... HANDLER(HANDLER:HPARM) が追加されます。
  • EXTFILEの追加 ............... EXTFILE('QTROBJ/PGM116FM') が追加されます。
Aデータ記述慮への追加
  • 5250ハンドラーの追加 ..... D HANDLER S 20A INZ('ASNET.COM/P5250HLR')
  • ハンドラーに渡すパラメータの定義
  • /COPY ASNET.USR/QRPGLESRC,CFKEYS
  • プログラム状況データ構造 (SDS)
B演算記述慮への追加
  • EVAL GYOSU = HPARM.GYOSU

    ....HPARM.GYOSU とは 5250エミュレータ上では SFLPAG と同じ値であり
    AutoWeb で表示されるときは SFLSIZ の値となります。
    つまり SFLレコード出力のための LOOP演算を ADD5250HLR が探し出して
    LOOP回数が HPARM.GYOSU となるように自動的にこの演算行を追加します。

ADD5250HLR によって 5250ハンドラーを追加する

AUTOWEBメニューには ADD5250HLR: 5250ハンドラーの追加の項目が用意されています。

31.5250 ハンドラーの追加 (ADD5250HLR)を選択して次のように指定します。

  • 元の RPGソースは RPG V であるため
    ソース・ファイルとして QRPGSRC を指定します。
    これによって RPG V から ILE-RPGソースへの移行(CVTRPGSRC)も同時に行われます。
  • ADD5250HLR コマンドは FROMソース・ファイルの FROMメンバーを
    TOソース・ファイルの TOメンバーに置き換えて追加します。

拡大画面罫線

画面罫線も5250ハンドラーを使えば24*80オーバーの拡大された画面罫線を
指定することができます。
24*80オーバーの拡張された画面での画面罫線の利用方法について
説明します。

5250ハンドラーで設定する画面罫線は ToolBox で設定する罫線を
利用することはできません。
必ず DDS 仕様の GRDBOX 罫線によって記述してください。

GRDBOX 罫線の指定の方法

1. グリッド・レコードを定義する

レコード・レベルで GRDRCD キー・ワードを指定して グリッド・レコードを定義します。

      A           R KEISEN                GRDRCD

グリッド・レコードには他のフィールドや固定情報を 記述することはできません。
GRDBOX, GRDLIN, GRDATR, GRDCLR または GRDLINキー・ワードのみを記述します。
これらのキー・ワードの詳細は IBM DDS表示装置ファイルの定義 マニュアル(PDFリンク)を
必ず参照してください。

2. GRDBOX (罫線ボックス) キー・ワードを定義する

GRDBOX(開始行 開始桁 深さ行数 横幅桁数)

として GRDBOX キー・ワードによって矩形の罫線を定義します。

【例】
       *   枠線                                                           
      A                                      GRDBOX((*POS (5 2 20 137)) + 
      A                                      (*TYPE PLAIN) (*LINTYP THK)) 

3. GRDLIN (罫線)キー・ワードを定義する

GRDLIN(開始行 開始桁 長さ)

によってGRXLIN (罫線)を定義します。

【例】
      *   横線(項目名)                                                 
     A                                      GRDLIN((*POS (5 2 137)) +    
     A                                      (*TYPE LOWER) (*LINTYP THK))

4. CRTEXDSPF によって表示装置ファイルを作成する

IBM CRTDSPFA コマンドの代わりに CRTEXDSPF コマンドによって
表示装置ファイルを作成します。

   CRTEXDSPF FILE(QTROBJ/PGM004FM) SRCFILE(QTRSRC/QDSPSRC) LVLCHK(*NO) AUT(*ALL)  

   >QTROBJ/PGM118FM が作成されました。 ASNET.USR/QDSPSRC.PGM118FM を参照してください。
  • 「ASNET.USR/QDSPSRC.xxxxxx を参照してください。」というメッセージは
    CRTEXDSPF によってDDSソースが修正された重要な修正があることを意味しています。
      A          R KEISEN                      GRDRCD
                    :
       *   枠線                                                            
      A                                      GRDBOX((*POS (5 2 20 &P137)) +
      A                                      (*TYPE PLAIN) (*LINTYP THK))  

      A* ***************************************************************  
      A* * CRTEXDSPF:  次のフィールドを追加しました。                     
      A* *             プログラムでこれらの値を初期設定してください。     
      A* ***************************************************************  
      A            P137           3S 0P                                   
      A     	   P67            3S 0P                                   
      A            P68            3S 0P                                   
      A            P69            3S 0P                                   
      A            P20            3S 0P                                   
      A            P12            3S 0P                                   
      A            P87            3S 0P                                   
      A            P100           3S 0P                                   
      A            P108           3S 0P                                   
      A            P121           3S 0P                                   
      A            P129           3S 0P                                   
  • GRDBOX(*POS (5 2 20 137)) とされていた GRDBOX の記述は
    137桁が 80桁オーバーのため CRTDSPF のコンパイル・エラーとなってしまいます。
    そこで CRTEXDSPF は 137 --> P137 というプログラム・フィールドに変更して
    最後には
       A            P137           3S 0P 

というプログラム・フィールドを追加しています。
P137 とは元々 137の値であったので、この DSPF を実行する RPG/COBOL では
始めに P137 = 137 として値を設定する必要があります。

5. プログラムでプログラム・フィールドの設定を追加する

CRTEXDSPF が追加したプログラム・フィールドの値を設定する演算命令を
追加してください。

【例】
    C******************************************************
    C     *INZSR        BEGSR                              
    C******************************************************
    C*  初期 CYCLE のみの実行                              
    C                   Z-ADD     137           P137       
    C                   Z-ADD     67            P67        
    C                   Z-ADD     68            P68        
    C                   Z-ADD     69            P69        
    C                   Z-ADD     20            P20        
    C                   Z-ADD     12            P12        
    C                   Z-ADD     87            P87        
    C                   Z-ADD     100           P100       
    C                   Z-ADD     108           P108       
    C                   Z-ADD     121           P121       
    C                   Z-ADD     129           P129       
    C                   ENDSR         

6. 拡大画面罫線の表示

次のように拡大された画面罫線を表示することができます。

PGM118FM

入力フィールドを持つ複数の表示レコードの
同時入出力についての注意点

入力フィールドを持つ複数の表示レコードを同時に入出力を行う場合についての考慮点について解説します。
表示レコード RCDA と、表示レコード RCDB はどちらも入力フィールドを保有しているものとします。

入力フィールドがどちらにも記述されている場合が問題であり、
入力フィールドがひとつの表示レコードのみに記述されている場合は
この問題は発生しません。

これらの二つの表示レコードは OVERLAY キー・ワードを使って次のように
表示されるものとします。

表示レコード: RCDA

表示レコード: RCDB

つまり表示レコード RCDA は表示レコード RCDB の上部に配置されています。
このとき出力の順序は上部からの表示レコードの順序に従って

WRITE RCDA

WRITE RCDB

の順で記述するようにしてください。 実際の表示とは逆の順序で

WRITE RCDB

WRITE RCDA

のように記述すると AutoWeb 上で表示されるときは問題ありませんが
5250エミュレータ上で表示されるときに障害が発生する可能性があります。
入力フィールドが RCDA または RCDB の一方にだけ記述されている場合は
この問題は発生しません。
表示の順序どおりに WRITE が行われているのであれば
READ 命令はどのような順序で行われていてもかまいません。

   WRITE RCDA
   WRITE RCDB      
   READ  RCDA
   READ  RCDB    --------------->(可)
   WRITE RCDA
   WRITE RCDB
   READ   RCDB
   READ   RCDA ----------------->(可)

SEU強制終了

@ DSPF の SEU でのエラー・メッセージの警告を次のように追加する

GRDBOX (罫線ボックス)キー・ワードを定義する

【例】

注意GRDBOXの記述が 132桁を超えると「値 'xxx' が正しい桁番号でない 」などの
SEU のエラーが発生する場合がありますが SEU を

                              終了

メンバーの変更/作成 ............. Y
    :
編集に戻る ....................... N  <--(この値を YからNに変更してください。)

にして強制保管して終了してください。



A RPG の SEU でのエラー・メッセージの警告を次のように追加する

5250 ハンドラーと拡張表示装置ファイル作成( CRTEXDSPF )コマンド

【 5250ハンドラーの使用例 】ILE-RPG

SEU では F-仕様書の HANDLER キー・ワードは「キーワードは認識されない。
キーワードは無視されます 」とのエラーとなりますが、これはエラーではありません。
( IBM も HANDLERキー・ワードが SEU 未対応のためエラーになることを認めています)
SEU を次のように強制終了して保管してください。

                              終了
                              
メンバーの変更/作成 ............. Y
    :
編集に戻る ....................... N  <--(この値を YからNに変更してください。)

表示可能領域と入出力情報量

表示可能領域

5250 ハンドラーを使って表示できる表示可能領域とは
DDS 仕様書で指定できる 999 行 x 999 桁 = 998001 バイトの領域です。

A                                           (行3桁)(桁3桁)

これは従来の 5250 エミュレータ 24 x 80 = 1920 バイトの約 520 倍に拡張されたことになります。



入出力情報量

表示可能領域は 999 行 x 999 桁すべての領域に項目を配置することができますが
999 行 x 999 桁のすべての範囲で同時に入出力が可能となるわけではありません。
入出力フィールドすべてを併せた総量として32767 バイト以下でなければならないという
制限があります。

つまり

のようにして 999 行 x 999 桁 の範囲に任意にフィールドを配置することはできますが
(フィールド1の長さ) + (フィールド2の長さ) + .... + (フィールドNの長さ) = 入出力総情報量

は 32767 バイト以下でなくてはなりません、
この 32767 バイトは IBM i のヒープ・サイズと呼ばれ IBM i の CPU が連続して記憶できる
定義可能な最大の長さを表しています。

  5250 エミュレータ 5250 ハンドラー 拡張比率
表示可能領域 24 x 80 = 1920 バイト 999 x 999 = 998001 バイト 519 倍
入出力情報量 24 x 80 = 1920 バイト 32767 バイト 17 倍
最大入力フィールド数 253 個 2048 個(拡張可能) 8 倍
最大 SFL レコード数 9999 個 1024 個(拡張可能) ******

コンパイル

5250ハンドラーを組み込んだ ILE-RPG のコンパイルは、CRTBNDRPG コマンドによって
活動化グループを必ず *NEW と指定して作成してください。

IBM コマンドの省略値のままでは、活動化グループは QILE という名前で作成されてしまいます。
これではプログラムが LR 終了しても、活動化グループ QILE としてメモリに残ったままに
なります。2回目の実行では予想外の動作になってしまい、正しく動作できなくなってしまいます。

5250ハンドラーでなくても、ILE-RPG プログラムのコンパイルは必ず *NEW として
作成して下さい。

  > CRTBNDRPG PGM(OBJLIB/MYPGM) SRCFILE(MYSRCLIB/QRPGLESRC)
      DFTACTGRP(*NO) ACTGRP(*NEW) DBGVIEW(*SOURCE) AUT(*ALL)

今まで*NEWを指定せずに動作していたとしても、それは誤りです。
たまたま動作していたに過ぎません。

ILE-RPGプログラムのコンパイル時は、必ず活動化グループは *NEWで コンパイル
して下さい。