動的なコンボボックス

見出しのアイコン

Web化や GUI化において最も多い要望のひとつが動的なコンボボックスの実現です。
コンボボックスとは選択候補をプル・ダウンして表示して選択することができるコントロールです。
( プル・ダウンメニューという呼び方はありません。)

通常はいくつかの固定情報の中から選択するという方法で表示しますが、
中には候補を特定のデータ・ベースの内容から表示したい場合があります。
例えば担当者をコンボボックスとして表示して、その中から選択する場合があります。
担当者は配置転換、人事異動や退職などの変化がありますので、つねに最新の状態に維持された
担当者マスター・ファイルを読んでコンボボックスの候補として表示することが適切です。

このように変化のある情報に対処するようにデータ・ベースを読んで候補を表示する
コンボボックスのことを 動的なコンボボックス と呼びます。
これに対していつも同じ固定情報としての静的な情報を選択するコンボボックスを
静的なコンボボックスと呼びます。

ここでは動的なコンボボックスの作成方法を解説します。

DSPF の DDS の参照フィールドの TEXT に *COMBO *KEY *DATA
記述しておくと動的なコンボボックスで検索することができるようになります

コンボボックスは選択値(KEY) の部分と表示値(DATA) の2つの部分で構成されています。
表示値(DATA) の部分が候補としてプル・ダウンして表示されますが、
そのうちのひとつを選択すると(複数を選択することはできません)
選択した候補の選択値(KEY)の部分がサーバーに渡されます。

※ストアド・プロシージャーが動作する条件とは ?

ストアド・プロシージャーが動作するためには *LOCAL と定義されている
RDBディレクトリーが登録されている必要があります。

くわしくはこちらで。

DDSソースの記述

ストアド・プロシージャーによるコンボボックスの記述

ストアド・プロシージャー(リンク)とは SQL による検索機能のことです。
あらかじめ作成しておいたストアド・プロシージャーを使って動的なコンボボックスを
生成することができます。

【例】 PGM101:得意先マスターの登録の担当者コード(TKTNCD) を
   ストアド・プロシージャー QTROBJ/P1 で検索して表示する。

解説

DDSソース
        A            TKTNCD    R        B 12 25REFFLD(@TANTOM/TACODE QTRFIL/TANTOM)
        A                                      TEXT('*COMBO *KEY PROC="QTROBJ/P1")
        A            TTNAMJ    R        O    +2REFFLD(@TANTOM/TTNAMJ QTRFIL/TANTOM)
        A                                      TEXT('*COMBO *DATA')

この例のようにストアド・プロシージャー(リンク)は TEXTキー・ワードに

*COMBO *KEY PROC="ライブラリー名/プロシージャー名"

の形式で記述します。
ストアド・プロシージャーで動的コンボボックスを作成する理由は対象レコードの選択を
柔軟にするためです。
複雑な選択条件もプログラマブルなストアド・プロシージャーであれば可能になります。
またストアド・プロシージャーは、次のように多種多様なブログラム言語で作成することが
できますので用途やプログラマーの資質に応じて言語を選択することができます。

  • SQLストアド・プロシージャー
  • RPG, COBOL または C/400 によるストアド・プロシージャー
  • QUERY/400によるストアド・プロシージャー

SFL レコード上の動的コンボボックス

SFL レコード上にも動的コンボボックスを定義することができます。
記述の方法は通常の動的コンボボックスです。

【例】
  A            TKTNCD    R    4A  B  6 59REFFLD(TANTOMR/TACODE QTRFIL/TANTO)
  A*                                     TEXT(' 担当者 ')
  A                                      TEXT('*COMBO *KEY')
  A            TTNAM     R    8O  O  6 65REFFLD(TANTOMR/TTNAM QTRFIL/TANTO)
  A*                                     TEXT(' 担当者略名 ')
  A                                      TEXT('*COMBO *DATA')
【 SFL レコード上のコンボボックス】