Migaro. 技術Tips

                       

ミガロ. 製品の技術情報
IBMiの活用に役立つ情報を掲載!


SmartPad4i 大容量の画面項目を扱う方法

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が制限となる場合があります。

サンプルのHTML
<!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ファイルが作成されます。

レコード長が9,999byteを超える

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が表示される

再度、DesignerでHTMLを読込むと、フォーマットが追加されます。
この状態で「IBMiへプロジェクトを配布」または、「IBMiへファイルを配布」を実施してください。

ファイルが複数に分割される


フォーマット(I/Oファイル)が2つに分かれて、8,000byteと4,000byteのレコード長を持つファイルとなるため、RPG側で外部データ構造として扱うことが可能となります。
RPGⅢプログラムを使用してアプリケーションを作成する際、9,999byteの制限が発生する場合には本Tipsの内容を参考に実装いただけますでしょうか。