SmartPad4iはDesignerでHTMLで定義した入出力項目に対してデータ長や型などの定義を行います。
データ長は1つのフォーマット(I/Oファイル)に対して32766byteまで設定ができます。(物理ファイルの最大レコード長です)
しかし、RPGⅢプログラムでバックエンド側のプログラムを記述する場合にはデータ長に制限が発生します。
今回のTipsでは、その制限を回避する方法についてご紹介します。
RPGⅢプログラムによる制限
RPGⅢ(旧来のRPG)では、データ構造(DS)の最大サイズは9,999byteに制限されています。
RPGⅢが登場した1970~1980年代のコンピュータシステムのメモリやアドレス空間、ファイルシステムの制限などからプログラムで扱えるデータ長に限界があったためです。
RPG Ⅳ (ILE RPG)の場合
1990年代に登場したILE RPG(RPG Ⅳ)では、データ構造(DS)の最大サイズは32,767byteに拡張されています。
そのため、ILE RPGでバックエンドのプログラムを作成頂く場合には9,999byteの制限はございません。
SmartPad4i (Cobos4i)で制限を回避する方法
通常RPGⅢプログラムで作成する場合でも、通常 9,999byteの制限がSmartPad4iプログラム作成の障害となることはありません。
しかし、1つのフォーマット内で大量の項目を持つComboBoxやRadio Button またTextArea(テキスト領域)を定義する場合に、9,999byteが制限となる場合があります。
<!doctype html>
<html lang="ja">
<head>
<meta charset="shift_jis">
<title>Tips202410</title>
<meta name="description" content="The HTML5 Herald">
<link rel="stylesheet" href="css/styles.css?v=1.0">
</head>
<body>
<form method="POST">
<h1>Tips 2024年10月</h1>
<div>
<textarea id="TXT01"></textarea>
</div>
<div>
<textarea id="TXT02"></textarea>
</div>
<div>
<textarea id="TXT03"></textarea>
</div>
<div>
<input id="BTN01" type="button" value="更新">
</div>
</form>
</body>
</html>
例えば、上記画像のようなHTML(TIPS010.html)を定義しており、Designerにて、TextAreaの入力サイズをそれぞれ4000byteで定義した場合には、IBMi上に 「TIPS01001I」、「TIPS01001O」のI/Oファイルが作成されます。
I/Oファイルはレコード長 32,766byte まで定義できるため問題はありませんが、RPGⅢプログラム側の「外部データ構造」として使用することができません。
そのため、RPGⅢを使用して9,999byte以上の入出力項目を定義する際には、明示的にフォーマット(I/Oファイル)を分割することで制限を回避します。
HTML側の定義
HTMLを開き、9,999byteに到達するフィールドの前に
非表示に設定した空のテーブル項目を挿入します。
※赤太文字の箇所
<!doctype html>
<html lang="ja">
<head>
<meta charset="shift_jis">
<title>Tips202410</title>
<meta name="description" content="The HTML5 Herald">
<link rel="stylesheet" href="css/styles.css?v=1.0">
</head>
<body>
<form method="POST">
<h1>Tips 2024年10月</h1>
<div>
<textarea id="TXT01"></textarea>
</div>
<div>
<textarea id="TXT02"></textarea>
</div>
<table id="SFL01" style="display:none"></table>
<div>
<textarea id="TXT03"></textarea>
</div>
<div>
<input id="BTN01" type="button" value="更新">
</div>
</form>
</body>
</html>
Designerで再配布
空のテーブルタグを挿入するとDesignerはそのテーブル以降を別のフォーマット(I/Oファイル)として定義します。
再度、DesignerでHTMLを読込むと、フォーマットが追加されます。
この状態で「IBMiへプロジェクトを配布」または、「IBMiへファイルを配布」を実施してください。
フォーマット(I/Oファイル)が2つに分かれて、8,000byteと4,000byteのレコード長を持つファイルとなるため、RPG側で外部データ構造として扱うことが可能となります。
RPGⅢプログラムを使用してアプリケーションを作成する際、9,999byteの制限が発生する場合には本Tipsの内容を参考に実装いただけますでしょうか。