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

5.4.3.2. SELECTを用いたユーザ定義(SQL)の作成

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

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

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

図: 処理イメージ

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

5.4.3.2.2. データベース種別とクエリ種別

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

5.4.3.2.3. 入力値/出力値

次に、作成するユーザ定義を呼び出す際の入力値と、呼び出しが完了した際に返却する出力値を定義します。
ユーザ定義(SQL)の作成において入力値/出力値は、クエリ種別を選択したタイミングで自動的に初期値が設定されます。
クエリ種別「SELECT」設定時の入力値/出力値の初期値は以下の通りです。
../../../../_images/autoset_input_and_output3.png

図:クエリ種別「SELECT」選択時の入力値/出力値の初期値

ここで留意すべき点は、出力値がシステムによって固定であることです。
IM-LogicDesignerではクエリ種別、および、後述するクエリ設定の内容を元に出力値を自動で決定します。
クエリ種別「SELECT」選択時に設定される出力値の詳細は以下の通りです。
出力値 説明
records<object[]>
定義したSELECT文によって取得された値が格納されます。
格納される値の詳細は「データ定義取得と、出力値への反映」によって決定されます。
count<integer> 取得された値の総数が格納されます。
query<string> 実行されたクエリが格納されます。
なお出力値とは違い、入力値は開発者が決定する必要があります。
本チュートリアルでは、入力値として「ユーザ検索用の文字列」を以下のように定義します。
入力値 説明
search_word<string> ユーザ検索用の文字列を格納します。

5.4.3.2.4. クエリ設定

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

5.4.3.2.4.1. 想定するSELECT文

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

コラム

重複を除去する場合

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

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

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

    ../../../../_images/output_update11.png

    図:クエリへSELECT文の定義

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

    ../../../../_images/output_update21.png

    図:データ定義を取得

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

    ../../../../_images/output_update31.png

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

注意

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

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

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

コラム

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

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

5.4.3.2.5. ユーザ定義(SQL)を作成する。

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

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

    • ユーザ定義ID「tutorial_ud_sql_select

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

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

    ../../../../_images/implement_ud_select1.png

    図:基本情報の定義

  3. データベース種別とクエリ種別を「データベース種別とクエリ種別」をもとに設定します。

    ../../../../_images/implement_ud_select2.png

    図:データベース種別、および、クエリ種別の定義

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

    ../../../../_images/implement_ud_select3.png

    図:入力値の定義

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

    ../../../../_images/implement_ud_select4.png

    図:クエリの定義

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

    ../../../../_images/implement_ud_select5.png

    図:出力値の反映

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

    ../../../../_images/implement_ud_select6.png

    図:登録

以上で、SELECTを用いたユーザ定義(SQL)の作成が完了しました。

5.4.3.2.6. 応用:取得範囲を指定したユーザ定義(SQL)の作成

ここでは本チュートリアルで作成したユーザ定義(SQL)をベースとして、取得範囲を指定する方法を説明します。

5.4.3.2.6.1. 取得範囲の指定

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

図:取得範囲の設定

取得範囲の指定を行うことによって、ユーザ定義(SQL)は自動的に以下の設定を行います。
  • 「入力値」へ、範囲を指定するために必要なパラメータの追加
  • 「クエリ」に定義されたSQLへ、取得範囲を指定する構文の追加
範囲指定を行うパラメータの詳細は「IM-LogicDesigner仕様書」 - 「ユーザ定義タスク」 - 「SQL(2WaySQL)」を参照してください。

注意

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

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

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

5.4.3.2.6.2. 範囲指定を元に、ユーザ定義(SQL)を更新する。

上記の内容を踏まえてユーザ定義(SQL)を更新します。
  1. 「サイトマップ」- 「LogicDesigner」-「ユーザ定義一覧」から、ユーザ定義一覧を開きます。
    一覧の中から、ユーザ定義ID「tutorial_ud_sql_select」の行の編集アイコンをクリックします。
    ../../../../_images/select_duration1.png

    図:「tutorial_ud_sql_select」編集アイコン

  2. 取得範囲を指定するため、「取得範囲の指定」をもとに設定します。
    ../../../../_images/select_duration2.png

    図:取得範囲の設定

  3. 入力値に以下のパラメータが自動で追加されることを確認してください。
    • 取得数(限定度) - limit<integer>
    • 取得位置 - offset<integer>
    ../../../../_images/select_duration3.png

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

  4. 新バージョン登録」をクリックします。
    ../../../../_images/select_duration4.png

    図:新バージョン登録

以上で、取得範囲を指定したユーザ定義(SQL)の作成が完了しました。