Sample : SQLを動的に作成する必要がある場合

通常、Server Application Management Consoleで実行するSQLはData Management Consoleで定義されたSQLマッパーの定義内容で決定されます。 しかし「受け取ったパラメータの数に応じて実行時にWhere句を切り替えたい」 などの要件のときはSQLをData Management ConsoleのSQLマッパーで定義する事はできません。
そういった場合は「動的SQL」という機能を使用することにより、 実行時に状態に応じたSQLを作成してそれを実行することができます。

■Point
ここでは受け取ったパラメータに応じて 「Sqlの条件を動的に変更する」 方法について記述しています。 これとは別に「Sqlから返る項目を動的に変更する」ような要件の場合は 「SQL実行時に返ってくる値とOutItemの数が違ってもエラーにならない」 という様な仕様のマッパークラスを別途作成する必要があります。 ただ、要件としては頻度が少ないのでここではそれについての記述は行いません。

1.Data Management ConsoleにSQLマッパーを作成
2.Sqlを生成するロジッククラスを作成
3.作成したロジッククラスをOperation Management Consoleに登録
4.Server Application Management Consoleロジッククラスで定義
5.Server Application Management ConsoleSQLマッパーで定義

Data Management ConsoleにSQLマッパーを作成↑top

動的SQLの機能を使用する場合でもData Management ConsoleのSQLマッパーの定義は必要なので、 Data Management ConsoleSQLマッパーに「動的SQL用のSQLマッパー」を定義しておきます。 Sqlは実行時に生成されるので中身は必要ありません。 ただし、マッパークラスはQuery系のものが設定される必要があります。

マッパークラスについての詳細は[公式Document] マッパークラス / 設定を参考にしてください。

./images/01.jpg

Sqlを生成するロジッククラスを作成↑top

[製品LogicClass] jp.ne.mki.wedge.rule.base.AbstractServerDC source を継承したClassを作成します。 通常のロジッククラスと同じようにInやOutを利用できますが、 execute()メソッドの最後で 「setSql」メソッドで実行するSqlの設定を行う点が違います。

今回のSampleで作成したSampleでは以下の仕様で作成しています。

  • Inに設定されたアイテムに値が設定されていればWhere句にLike条件として使用する。
  • Outに設定されたアイテムをSelectするFieldとして使用する。
  • Parameterに設定された文字列をTable名として使用する。

作成したロジッククラスをOperation Management Consoleに登録↑top

動的SQL用のロジッククラスも、通常のロジッククラスと同様にOperation Management Consoleに登録する必要がありますので、 Operation Management Consoleへの登録作業を行います。

./images/02.jpg

Server Application Management Consoleロジッククラスで定義↑top

作成したロジッククラスを使用するServer Application Management Consoleでロジッククラスとして定義をします。 In/Out/Parameterは作成したロジッククラスの仕様に合わせて設定します。 このあたりは通常のロジッククラスと変わりません。

./images/03.jpg

このSample画像ですと、Sampleロジッククラスの仕様に合わせて 「Inにフィルタ用の名称項目」「OutにSelectする項目」「ParameterにTable名称」 を設定しています。

■Point
ここで設定しているIn/Outは「動的Sql作成用ロジッククラスが使用するIn/Out」であり、 実際にSqlを発行するIn/Outとは何の関連もありません。 例えば、動的Sql作成用ロジッククラスが「Inに設定されたアイテムを使用してWhere句を作成」するものであれば、 Outにアイテムを設定する必要は無いかもしれません。

Server Application Management ConsoleSQLマッパーで定義↑top

通常通り、Server Application Management ConsoleでSQLマッパーを定義します。この時使用するData Management ConsoleSQLマッパーは先の手順で作成した 「動的SQL用のSQLマッパー」を使用します。 Sqlはロジッククラスで作成するため、Inの設定は必要ありません。 Sqlの結果返されるOutの項目は設定が必要です。 Data Management ConsoleSQLマッパーではOutの設定はされていないため動的Sql用ロジッククラスで作成されるSqlの Select項目の数に依存します。

動的Sql機能を使用する場合に通常のSQLマッパーの定義と違う点として、 SQLマッパーのロジッククラスの設定が必要となる点です。ここに、Sqlを作成するロジッククラスを設定します。

./images/04.jpg

ここまでの設定ができれば、 後は通常のSQLマッパーと同じように実行リストに配置すればOKです。

Valid XHTML 1.1