開発Blog

e Builder Application ProducerでDAO開発♪

投稿日:2010-09-27 更新日:

こんにちは、開発本部の江本です。

前回の記事「e Builder Application ProducerでDB設計♪」で、DB設計を紹介しました。
今回は、設計したDBに対して検索用DAOの作成方法を紹介します。
※e Builder Application Producer って何?という方は「過去の記事」をご覧ください。
※Application Producer、名前が長いので、「AppPro」と略します!

AppProで検索用DAOを作成する

ここでは、商品コードから売上伝票情報を取得するDAOを作成します。
このとき、以下のような検索条件を指定できるようにします。

  • 商品コード ※必須条件
  • 売上日以降 ※オプション条件
  • 売上日以前 ※オプション条件

AppProのDAOでは、オプション条件を含むDAOを効率よく作成できます。

その前に、、前回の記事「e Builder Application ProducerでDB設計♪」で作成したDB設計は、致命的な設計ミス(伝票テーブルがなかった...)があったため更新しました。最新のAppProプロジェクトは下部よりダウンロードしてください。

このようにテーブル設計はシステム開発における設計時、場合によっては開発時にも変更が発生するものですねぇ。。
テーブル構造が変更する場合、どこに影響するか、影響範囲を分析する必要があります。
AppProでは、テーブル構造を変更したり、テーブル名を変更するなどのリファクタリングを行なう場合、それを利用しているCTR/BIZなどのコンポーネントをバリデーションし、問題がリストアップされるので、楽にリファクタリングを行なえます!

さて、商品コードから売上伝票情報を取得するDAOを作成する場合、どのような実装方法あるでしょうか?
オプション条件があるため、指定された条件に応じたSQLが実行されるようなDAOを開発しなければなりません。
具体的には、以下のように4パターンがあります。

  1. 商品コードのみ
  2. 商品コード+売上日以降
  3. 商品コード+売上日以前
  4. 商品コード+売上日以降+売上日以前

それぞれSQLで表現すると、以下のようになります。
[code:sql]
/* 商品コードのみ /
SELECT
*
FROM
eb_s_sales_slip
WHERE
sales_slip_cd IN (
SELECT
DISTINCT sales_slip_cd
FROM
eb_s_sales_slip_detail
WHERE
product_cd = ?
)
[/code]
[code:sql]
/
商品コード+売上日以降 /
SELECT
*
FROM
eb_s_sales_slip
WHERE
sales_slip_cd IN (
SELECT
DISTINCT sales_slip_cd
FROM
eb_s_sales_slip_detail
WHERE
product_cd = ?
)
AND
sales_date >= ?
[/code]
[code:sql]
/
商品コード+売上日以前 */
SELECT
*
FROM
eb_s_sales_slip
WHERE
sales_slip_cd IN (
SELECT
DISTINCT sales_slip_cd
FROM
eb_s_sales_slip_detail
WHERE
product_cd = ?
)
AND
sales_date = ?
AND
sales_date <= ?
[/code]

AppProではどのようにして作るか?

AppProでは、上記のような場合、4つ目のすべての条件を含んだSQL(商品コード+売上日以降+売上日以前)を利用して、DAOを作ります。
そして、DAOエディタの「DAOインターフェース設定」で各条件の「実行時null時」に対して、それぞれ「必須項目」「is null置換」「条件削除」「固定値指定」から以下のように設定します。

  • productCd:「必須項目」
  • startSalesDate:「条件削除」
  • endSalesDate:「条件削除」

set_runtime_null_option.png

「条件削除」とは、実行時の値が null の場合に条件を削除することを意味します。
たとえば、このDAOが実行されたときにendSalesDateの実行時の値がnullのとき、以下のSQLが実行されます。
[code:sql]
/* 商品コード+売上日以降 */
SELECT
*
FROM
eb_s_sales_slip
WHERE
sales_slip_cd IN (
SELECT
DISTINCT sales_slip_cd
FROM
eb_s_sales_slip_detail
WHERE
product_cd = ?
)
AND
sales_date >= ?
[/code]
このように、すべての条件を含むSQLを開発し、各条件に対して「実行時null時」の動作を設定するだけで、以下のような検索条件を指定できるDAOを作ることができます。

  • 商品コード ※必須条件
  • 売上日以降 ※オプション条件
  • 売上日以前 ※オプション条件

[参考] AppProプロジェクト「シンプル売上管理」のダウンロード

AppProプロジェクト「シンプル売上管理」です。

simplesales_apppro.zip

ダウンロード後、以下の手順でe Builder(eclipse)のワークスペースにインポートしてご利用ください。

  1. ウィンドウメニュー[ファイル]-[インポート]をクリック
  2. 表示されたウィザードのメニュー[一般]-[既存プロジェクトをワークスペースへ]を選択し、[次へ]ボタンをクリック
  3. ラジオボタン[アーカイブ・ファイルの選択]をクリックし、[参照]ボタンをクリックし、ダウンロードしたZIPファイルを選択
  4. [完了]ボタンをクリック。※プロジェクトのインポートが開始されます。

ZIPファイルを解凍ツールで解凍すると、文字化けたファイルやフォルダが生成されます。。
必ず上記方法でワークスペースにインポートしてください。

-開発Blog
-,

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

no image

iWP7.2.4で追加されたファイルダウンロード用API

iWP7.2.4において、SAStrutsフレームワークで利用できるファイルダウンロード用のAPIを追加しました。 イメージとしてはスクリプト開発モデルの Module.dowonload. …

no image

iWP Ver7.xでのチューニング

開発本部の大西です。 開発は半期末とかあまり関係ないと思いきや、諸般の事情でいろいろと大変な今日この頃です。 江本さんがebuilderのネタばかり書くので、傷食気味にならないように、季節柄、チューニ …

no image

intra-martの提供するセッション管理機能と他のアプリケーションサーバのセッション管理機能との違い

※下記内容は、過去のintra-mart(Ver4.3以前)に関する内容です。最新のintra-martでは、異なる情報であることがありますので、ご注意ください。 intra-martの提供するセッシ …

no image

IM-Workflow パラメータチューニング

IM-Workflowは、パッチにより様々なパラメータが追加されています。 特にパッチ4と先日リリースしたパッチ5での効果が大きいので、以下にご紹介致します。 XMLキャッシュ パッチ4からの機能です …

no image

ワークフロー関連APIのver4.3/ver5.0対比表

ワークフロー関連のAPIがver5.0になり一部変更されています。 以下の添付資料はver4.3とver5.0のAPIの変更リストです。 参考にしてください。 →workflowAPI 対比表(ZIP …