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. :
【解説】
-
ASNET.USR/QCBLLESRC のメンバー QRNOPENACC をインクルードするための
COPY 句が追加されます。 -
DSPF の OPEN 命令に対して 5250ハンドラー(5250HLR)による OPEN 命令として
CALL 5250HLR USING BY CONTENT "OPEN" ...
が追加されます。- 5250ハンドラー OPEN 命令
CALL 5250HLR IN LIBRARY ASNETCOM USING BY CONTENT "OPEN" "
". -
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.
-
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.
-
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.
-
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_PTR | INFDSF(ファイル・フィードバック域) のポインター |
---|---|
INFDSP_PTR | INFDSP(プログラム情報域) のポインター |
INGID_PTR | 標識域(*IN01〜*IN99)のポインター |
CFKEY_PTR | 機能キー域(CF01〜CF24)のポインター | SFLCTL | 現在、活動中のSFLコントロール・レコードの名前 | GYOSU |
PGM が表示する行数の値。 5250 エミュレータで実行したときには、この値には SFLPAG の値が入ります。 AutoWeb で実行したときには、この値には SFLSIZ の値が入ります。 PGM では常にこの GYOSU の分だけ LOOP して SFL レコードが表示されるようにすると SFLSIZ の値を拡張すれば AutoWeb による表示行数も 拡張されます。 |
EOF | 現在は使用していません。 | SFLPAG | DSPF の 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
罫線の指定の方法
-
IBM DDS 表示装置ファイルの定義 マニュアル(PDFリンク)の
に
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. 拡大画面罫線の表示
入力フィールドを持つ複数の表示レコードの
同時入出力についての注意点
入力フィールドを持つ複数の表示レコードを同時に入出力を行う場合についての考慮点について解説します。
表示レコード 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
で
コンパイル
して下さい。