Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
マスタ検索フレームワーク
05-23-2014, 07:41 PM,
#1
マスタ検索フレームワーク
★point
 開発工数の削減には、汎用的なマスタ検索機能の提供が効果的、かも



「某マスタから、入力したコードを条件にして検索する」というような処理は、
業務システムであれば避けることはできない頻出機能です。

開発方針によっては、マスタ検索も含めて、業務画面の実装に任せる、
という考え方もありえると思いますが、
共通部品として提供できれば、システム開発全体の工数を抑えることができるかもしれません。

そんなわけで、これまでの経験をもとに、シンプルな「マスタ検索フレームワーク」を作成してみました。
アプリケーション基盤として足りない機能などあれば、
アドバイスいただけると嬉しいです。


【基本機能】
テキストフィールドと、カラム(グリッド)の両方で下記の機能を提供する

・入力されたコードが対象のマスタに存在する場合、その一致するレコード情報を取得する
   コードと名称が1対1で存在するような一般的なマスタテーブルを前提に、
   フィールドに、マスタに存在するコードが入力されたら、名称を補完表示する機能を実装しています。
・上記補完処理が成功した場合、コードを含む全カラムの情報を付属情報として保持する
・補完処理実行後、補完に成功したかどうかをイベントでハンドリング可能
   補完成功時は、イベントから付属情報を取得可能です
・コード一致以外にも固定検索条件を追加設定可能
・「マスタ検索ダイアログ」を表示して、一覧からコードを選択することが可能
    マスタ検索ダイアログは、反映先のフィールドの検索条件を引き継ぎます

【グリッド用追加機能】
カラム(グリッド)の場合は下記機能が追加されます
・カラム単位での一括補完処理
・固定検索条件以外に、レコード単位での検索条件が設定可能


■サンプルの内容説明
・「...」と表記されているボタンを押すと、社員マスタのコード検索ダイアログが表示されます
  一覧から任意のレコードを選択すると、フィールドにコードと名称が反映されます
  
・「社員コードテキストフィールド」に U0001 と入力すると、
  社員マスタテーブルから、対応する社員情報を取得し、名称を補完表示します
  同時に、その社員が退職している(RSG_DT!=99999999)場合は、退職と表示します
  
・テキストフィールドと同様に、「社員コードカラム」のいずれかのセルに U0001 と入力すると、
  同レコードの名称セルに名称を補完表示します
  退職判断についてもテキストフィールドと同様です
  
・チェックボタンの「固定条件 「等級=A1」」をチェックすると、
  テキストフィールド、グリッドともに、
  役職等級(GRD_CD)がA1の社員のみ検索されるようになります
  
・グリッドでは、チェックボタンの「レコードごとの条件 「部門=SCT_CDフィールドの値」」をチェックすると、
  レコードごとに「部門(条件)」カラムに入力された値を、
  部門コード(SCT_CD)の検索条件として利用します
  (DBでは、各社員に、123, 234, 999という3つの部門コードを設定しています)

・「補完」ボタンを押すと、グリッドにU0001からU0013までのコードを反映し、
  全レコードに対して補完処理を一括で行います

・「フィールドの付属情報取得」ボタンを押すと、「社員コードテキストフィールド」
  社員コードに関連して保持されている付属情報を一覧表示します
・「選択レコードの付属情報取得」ボタンを押すと、グリッドで選択されているレコードを対象に、
  社員コードに関連して保持されている付属情報を一覧表示します

・画面下部の「社員マスタテーブル全件取得」ボタンを押すと、
  社員マスタテーブルに登録されている全レコードを取得、表示します。
  カラム名は、テーブルに設定されている物理名となります


サンプルでは、DBにSQLite を利用しているので、面倒なサーバ、DBの設定等は不要ですが、
実際には、環境に合わせてアプリケーションサーバ、DBサーバを利用することになると思います。
私が担当したプロジェクトは、サーバ側をJavaで実装し、クライアント・サーバ間の接続はCurl ORBを利用、
サーバからDBへの接続はO/Rマッパの「iBatis(MyBatis)」を利用する、
という環境が多かったため、同等の環境構成での利用を想定したプレームワークとなっています。

今回のサンプルではチェック機能を実装してませんが、
過去に投稿した、入力チェックのフレームワークと組み合わせれば、
「入力したコードが、マスタに存在しなければエラーとする」といった振る舞いを実装することも可能です。

  ■入力チェックのフレームワーク
  http://communities.curl.com/showthread.php?tid=1078


また、今回のサンプルでは、マスタテーブル内の値と一致させる単純検索条件のみですが、
SQLのフォーマットを変更することで、
たとえば、部門Aもしくは部門Bに所属する社員を検索する、
といった複合的な条件も利用可能です。
この辺りは、iBatis(MyBatis)などのO/Rマッパを利用することで効率よく開発できると思います。


なお、サンプル内で利用しているSQLiteでの「社員マスタ」の操作については、
前回の投稿と同じプログラムを利用しています。
「社員マスタ」のテーブル情報などは、そちらを参照してください。

  ■CurlでSQLite を使ってみよう
   http://communities.curl.com/showthread.php?tid=1086



Attached Files
.zip   マスタ検索.zip (Size: 103.53 KB / Downloads: 602)

Forum Jump:


Users browsing this thread:
1 Guest(s)

MyBB SQL Error

MyBB has experienced an internal SQL error and cannot continue.

SQL Error:
1017 - Can't find file: 'mybb_threadviews' (errno: 2)
Query:
INSERT INTO mybb_threadviews (tid) VALUES('1088')