intra-mart Accel Platform IM-LogicDesigner チュートリアルガイド 第7版 2018-04-01

5.4.6.2. ユーザ定義(Database Fetch)の詳細

この章では、Database Fetchを利用したユーザ定義の作成方法とその詳細について説明します。

コラム

ユーザ定義(Database Fetch)の詳細を進める上での留意点

ユーザ定義(Database Fetch)の作成方法は、多くの点で「ユーザ定義 - SQL(2WaySQL)」-「SELECTを用いたユーザ定義(SQL)の作成」と内容が共通しています。
そのため、本章で行う説明の多くは「SELECTを用いたユーザ定義(SQL)の作成」と類似していることに留意してください。

なお、ユーザ定義(SQL)との相違点はコラムにて追記しています。
ユーザ定義(SQL)の説明を読了済みの開発者の方は、コラムを中心に確認していただくことで効率よく要点を理解いただけます。

5.4.6.2.1. 本チュートリアルで作成するユーザ定義の概要

本チュートリアルでは、
「IM-共通マスタ上のユーザのうち、タスクの入力値として与えられた半角英数で始まるユーザコードを持つユーザを取得する」
というタスクの処理の実装を通して、ユーザ定義(Database Fetch)の作成方法とその詳細を説明します。
作成するユーザ定義の処理イメージは以下の通りです。
../../../../_images/select_task_overview_dbf.png

図: 処理イメージ

図の例では、入力値として「dbf_user」を与えた場合、IM-共通マスタのユーザ内で該当する以下のようなユーザ情報(ユーザコード)が出力値として取得されます
  • dbf_user_00001
  • dbf_user_00002
  • dbf_user_00003
なお、今回の取得処理では処理内容の簡略化のため、期間情報や多言語情報を加味しません。

5.4.6.2.2. データベース種別の選択

はじめに、今回作成するユーザ定義(Database Fetch)が対象とするデータベース種別を設定します。
本チュートリアルでは以下の値を設定します。
  • データ種別 - 「TENANT

コラム

ユーザ定義(SQL)との相違点 その1

ユーザ定義(Database Fetch)では必ずSELECT文を定義するため、「クエリ種別」の設定項目はありません。

5.4.6.2.3. 入力値/出力値

次に、作成するユーザ定義を呼び出す際の入力値と、呼び出しが完了した際に返却する出力値を定義します。
ユーザ定義(Database Fetch)の入力値/出力値の初期値は以下の通りです。
../../../../_images/autoset_input_and_output2.png

図:ユーザ定義(Database Fetch)の入力値/出力値の初期値

5.4.6.2.3.1. 入力値

ユーザ定義(Database Fetch)の入力値は開発者が決定する必要があります。
本チュートリアルでは、入力値として「ユーザ検索用の文字列」を以下のように定義します。
入力値 説明
search_word<string> ユーザ検索用の文字列を格納します。

5.4.6.2.3.2. 出力値

ユーザ定義(Database Fetch)の出力値はシステムによって固定です。
IM-LogicDesignerではユーザ定義(Database Fetch)の出力値を後述するクエリ設定の内容を元に自動で決定します。
詳細は「データ定義取得と、出力値への反映」を参照してください。

コラム

ユーザ定義(SQL)との相違点 その2

ユーザ定義(Database Fetch)では以下の出力値は提供されません。
  • count<integer> - 取得された値の総数。
  • query<string> - 実行されたクエリ。

5.4.6.2.4. クエリ設定

次に、実際に取得処理を行うクエリ(SELECT文)の設定を行います。

5.4.6.2.4.1. 想定するSELECT文

本チュートリアルで想定する処理は、以下のSQLによって表現されます。
SELECT
  user_cd
FROM
  imm_user
/*BEGIN*/
WHERE
  /*IF search_word != null*/
  user_cd LIKE /*search_word*/'dbf_user%'
  /*END*/
/*END*/

コラム

重複を除去する場合

今回利用するSELECT文では、多言語情報や期間情報を加味しないため、一人の該当ユーザに対して複数の結果(ユーザコード)が返る場合があります。
本チュートリアルのユーザ定義を実際に作成、動作確認を行う場合、必要に応じてdistinctなどの重複を除外する指定を行ってください。
以下は指定例です。
SELECT
  distinct user_cd -- distinctの指定
FROM
/* 以降は同様 */

5.4.6.2.4.2. データ定義取得と、出力値への反映

想定するSELECT文」の定義に合わせて、出力値の設定を行います。
IM-LogicDesignerでは、設定されたクエリを検証し、クエリの記述内容にあった出力値を自動で設定する機能を提供しています。
  1. 「Database Fetch定義編集」画面の「クエリ」にSQLを定義します。

    ../../../../_images/output_update1.png

    図:クエリへSELECT文の定義

  2. 「クエリ」入力欄の上部にある「データ定義を取得する」をクリックします。

    ../../../../_images/output_update2.png

    図:データ定義を取得

  3. 「クエリ」に定義されたSQLの検証結果が、「出力値」に反映されます。

    ../../../../_images/output_update3.png

    図:クエリをもとに出力値へ反映

注意

出力値を反映される場合の注意点

定義されたSQLがシンタックスエラー等実行不可なものであった場合、以下のエラーメッセージが表示され、出力値への反映は行われません。
../../../../_images/error_sql_message.png

図:SQLが実行不可であった場合のエラーメッセージ

コラム

ワイルドカード(アスタリスク)使用時の出力値

定義されたSQLが、取得対象にワイルドカード(アスタリスク)を利用した場合、IM-LogicDesignerは出力値として対象テーブルに定義された全てのカラムを出力値対象とします。

5.4.6.2.5. 取得範囲の指定

次に、取得範囲の指定を必要に応じて行います。
本チュートリアルで作成したユーザ定義は、検索条件に合致するユーザを全て取得します。
取得処理には問題はありませんが、実際の要件や課題の解決において検索条件に合致するユーザの一部を取得したい場合が多く存在します。
ユーザ定義(Database Fetch)では、これに対して取得範囲を指定したSQLの定義をサポートしています。
取得範囲の指定を行うSQLを定義するには、Database Fetch定義編集の項目を以下のとおりに設定します。
  • 範囲を指定する - チェックボックス:オン
../../../../_images/select_duration_check.png

図:取得範囲の設定

取得範囲の指定を行うことによって、ユーザ定義(Database Fetch)は自動的に以下の設定を行います。
  • 「入力値」へ、範囲を指定するために必要なパラメータの追加
  • 「クエリ」に定義されたSQLへ、取得範囲を指定する構文の追加
../../../../_images/select_duration_add_parameter.png

図:追加されたパラメータ

範囲指定を行うパラメータの詳細は「IM-LogicDesigner仕様書」 - 「ユーザ定義タスク」 - 「Database Fetch」を参照してください。

注意

追加される取得範囲を指定する構文について

取得範囲の指定を行うことによって追加される構文は、暗黙的に行われます。
ユーザ定義(Database Fetch)は取得範囲の指定がされていた場合、定義された「クエリ」に取得範囲の指定を行う構文を追加したうえで最終的な処理を行います。

そのため、取得範囲の指定を行った場合でも、「Database Fetch定義編集」画面の「クエリ」に定義されたSQLは変更されません。
また、「クエリ」に直接取得範囲の指定を行う構文を定義していた場合はSQL不正でエラーが発生します。

5.4.6.2.6. フェッチサイズの指定

次に、フェッチサイズの指定を行います。

コラム

ユーザ定義(SQL)との相違点 その3

フェッチサイズの指定はユーザ定義(Database Fetch)でだけ設定可能な項目です。
パフォーマンス向上などを目的とした実際の要件や課題に合わせてフェッチサイズの変更を行う場合、この値を変更してください。
なお、ユーザ定義(Database Fetch)では、デフォルトのフェッチサイズを10としています。
../../../../_images/fetch_size_default.png

図:フェッチサイズの指定(デフォルト値)

本チュートリアルではフェッチサイズにデフォルト値である10をそのまま指定します。

注意

適切なフェッチサイズの指定について

フェッチサイズを大きく設定すると、データベースサーバとの通信回数が削減され、パフォーマンス向上が期待できますが、メモリ使用量が増大します。
フェッチサイズの最適値は、サーバ環境や取得対象となるテーブルのレコード件数、または、カラムサイズ等によって異なることに留意してください。

5.4.6.2.7. ユーザ定義(Database Fetch)を作成する。

最後に、これまでの内容を踏まえてユーザ定義(Database Fetch)を作成します。
  1. 「Database Fetch定義編集」画面を表示します。

  2. ユーザ定義の基本情報となる各項目に以下の値を入力します。

    • ユーザ定義ID「tutorial_ud_db_fetch

    • バージョン「1」(固定)

    • ユーザ定義名
      • 標準 - 「ユーザ定義[Database Fetch]
      • 日本語、英語、中国語(中華人民共和国) - 入力なし
    • カテゴリ
      • カテゴリID - 「tutorial_user_category
    • ソート番号「4001

    ../../../../_images/implement_ud_db_fetch1.png

    図:基本情報の定義

  3. データベース種別を「データベース種別の選択」をもとに設定します。

    ../../../../_images/implement_ud_db_fetch2.png

    図:データベース種別の定義

  4. 入力値を「入力値/出力値」をもとに値を設定します。

    ../../../../_images/implement_ud_db_fetch3.png

    図:入力値の定義

  5. クエリに「想定するSELECT文」で提示したSQLを設定します。

    ../../../../_images/implement_ud_db_fetch4.png

    図:クエリの定義

  6. データ定義取得と、出力値への反映」をもとに、出力値を設定します。

    ../../../../_images/implement_ud_db_fetch5.png

    図:出力値の反映

  7. 取得範囲の指定」をもとに、取得範囲の指定を行います。

    ../../../../_images/implement_ud_db_fetch6.png

    図:取得範囲の指定

  8. フェッチサイズの指定」をもとに、フェッチサイズの指定を行います。

    ../../../../_images/implement_ud_db_fetch7.png

    図:フェッチサイズの指定

  9. 登録」をクリックします。

    ../../../../_images/implement_ud_db_fetch8.png

    図:登録

以上で、ユーザ定義(Database Fetch)の作成が完了しました。