マスタ検索フレームワーク - Printable Version +- Curl Global Community (https://communities.curl.com) +-- Forum: Blogs (https://communities.curl.com/forumdisplay.php?fid=17) +--- Forum: Tech blog (https://communities.curl.com/forumdisplay.php?fid=18) +---- Forum: Baison log (https://communities.curl.com/forumdisplay.php?fid=27) +---- Thread: マスタ検索フレームワーク (/showthread.php?tid=1088) |
マスタ検索フレームワーク - umemura - 05-23-2014 ★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 |