4.1. 抽出条件の設定¶
「クエリ編集」画面、およびリスト集計の「データ参照編集」画面では、レコードの抽出条件を設定できます。リスト集計の「検索設定」は、データ参照を閲覧するユーザが目的の情報に素早く辿り着くための機能ですがそれに対して「抽出条件」は、ユーザに見せたくない情報を設定者側であらかじめ絞っておくための機能です。
4.1.1. クエリ作成時に抽出条件を設定する¶
項目名 説明 WHERE句直接入力 抽出条件を設定する代わりに適用するWHERE句を入力します。動的パラメータを埋め込むことも可能です。OR検索 複数の抽出条件が設定された場合に OR 条件でデータ抽出を行います。チェックが外されている場合は AND 条件が適用されます。上へ下へ 抽出条件の順序を入れ替えます。 テーブル/ビュー/リソース デザイナに追加されているエンティティを選択可能です。 カラム/フィールド 抽出条件の対象とするカラムを選択します。「テーブル/ビュー/リソース」で選択されたエンティティが持つカラムを選択可能です。抽出方法 部分一致、範囲指定などの抽出方法を指定します。 条件値 固定の条件値だけでなく、カレントのユーザコードなどの動的に変化する値を指定することも可能です。 削除 抽出条件一覧からカラムを削除します。
4.1.1.1. 抽出条件を直接入力する¶
注意
直接入力を使用する場合は、テーブルやレコードを壊すことの無いように細心の注意を払ってください。
4.1.2. データ参照作成時に抽出条件を設定する¶
項目名 説明 追加 抽出条件を追加します。 「削除」アイコン 抽出条件一覧からカラムを削除します。 「上へ下へ」アイコン 抽出条件の順序を入れ替えます。 集合関数 抽出パターンを指定します。リスト集計で設定可能なのは「1レコード単位」のみです。対象カラム 抽出条件の対象とするカラムを選択します。選択可能なカラムが表示されます。抽出方法 部分一致、範囲指定などの抽出方法を指定します。 条件値 固定の条件値だけでなく、カレントのユーザコードなどの動的に変化する値を指定することも可能です。
コラム
「1レコード単位」以外の抽出パターンは、サマリ集計を選択している場合のみ設定可能です。SQL上では、下記のように適用されます。1レコード単位 : WHERE句集合関数 : HAVING句注意
リスト集計の「抽出条件」では、OR検索は設定できません。
4.1.3. データ参照時のSQL¶
SELECT [データ参照編集画面で表示されているカラム一覧] FROM ( SELECT [クエリに追加されたカラム一覧] FROM [クエリに追加されたテーブル] WHERE [クエリで設定された抽出条件] ) IM__QUERY__ WHERE [データ参照で設定された抽出条件]
4.1.4. 動的パラメータ¶
4.1.4.1. <%DYNAMIC_PARAMETER%>¶
API経由でパラメータ値をセットする場合に使用します。
このパラメータが設定された抽出条件が1つでも存在するクエリからは、データ参照を作成できません。
詳しくは、jp.co.intra_mart.foundation.viewcreator.model.Query#executeを参照してください。
4.1.4.2. <%ENCODING%>¶
SQL実行時のログインユーザに関連づけられたエンコーディング文字列がセットされます。
4.1.4.3. <%LOCALE%>¶
SQL実行時のログインユーザに関連づけられたロケール文字列がセットされます。
4.1.4.6. <%SYSTEM_DATE(*)%>¶
SQL実行時のシステム日付がセットされます。
システム日付データを指定されたフォーマットに従った、文字列がセットされます。
文字列で生成された日付データは、データベースごとに用意された型変換関数に渡されます。
※このパラメータは、必ず日付型またはタイムスタンプ型のカラムに対してセットしてください。
コラム
- <%SYSTEM_DATE%>で、1時間前、前日などの指定をする
パラメータ<%SYSTEM_DATE(yyyy/MM/dd HH:mm)%>は、実行時のシステム日付がセットされますがフォーマット文字列部分に、+演算子や-演算子を用いた記述が可能です。
- システム日付の1時間前をセットしたい場合
<%SYSTEM_DATE(yyyy/MM/dd HH-1:mm)%>
- システム日付の前日をセットしたい場合
<%SYSTEM_DATE(yyyy/MM/dd-1 HH:mm)%>※演算子には、+と-のみ使用できます。※演算子の前後にスペースは入れないようにしてください。
4.1.4.7. <%USER_ID%>¶
SQL実行時のログインユーザコードがセットされます。
4.1.4.8. <%REQUEST_PARAMETER(KEY_NAME)%>¶
HttpServletRequest(リクエスト)、または、RenderRequest(ポートレットのリクエスト)から取得した値がセットされます。取得される優先順位は、HttpServletRequestが優先されて取得されます。
「KEY_NAME」にはパラメータ名を指定します。
コラム
- <%REQUEST_PARAMETER(KEY_NAME)%>の使用例
検索設定の場合
タグが受け取る引数として、リクエストパラメータのキー名を任意に指定します。ここでは例として「都道府県名」の検索値として渡す値のリクエストパラメータのキー名を param としています。
データ参照を表示した際に指定したリクエストパラメータを受け取ることができます。例では、以下のようなURLにアクセスすることで「都道府県名」の検索値として「島」を指定した際と同じ結果を表示しています。.../viewcreator/dataview/list/{dataview_cd}?param=島![]()
抽出条件の場合
タグが受け取る引数として、リクエストパラメータのキー名を任意に指定します。ここでは例として「地域名」の抽出条件値として渡す値のリクエストパラメータのキー名を region 、「都道府県名」のキー名を pref としています。
データ参照を表示した際に指定したリクエストパラメータを受け取ることができます。例では、以下のようなURLにアクセスすることで「地域名」の抽出条件値として「関東」、「都道府県名」の抽出条件値として「東京」を指定した際と同じ結果を表示しています。.../viewcreator/dataview/list/{dataview_cd}?region=関東&pref=東京![]()
ポートレットで利用する場合
メニューから「サイトマップ」→「ポータル - ポートレット一覧」を選択します。編集アイコンをクリックし、「ポートレット編集」画面を開きます。基本設定のページ引数に抽出条件で設定したタグのキー名を指定します。
「ポートレット編集」画面のページ引数で指定したリクエストパラメータを受け取ることができます。![]()
4.1.4.9. <%REQUEST_PARAMETER_VALUES(KEY_NAME)%>¶
HttpServletRequest(リクエスト)、または、RenderRequest(ポートレットのリクエスト)から取得した同名の複数パラメータを配列として取得し、カンマ区切りの値としてセットされます。取得される優先順位は、HttpServletRequestが優先されて取得されます。
「KEY_NAME」にはパラメータ名を指定します。
複数選択のチェックボックスや複数選択リストなどで送信される値を一括でIN句に利用する場合に使用します。
コラム
- クエリビルダのWHERE句直接入力と抽出方法「直接入力」、SQLビルダで利用可能です
- 該当するリクエストパラメータが存在しない場合は「NULL」に変換されます
- 最大1000個までの要素を処理します
コラム
<%REQUEST_PARAMETER_VALUES(KEY_NAME)%> は2025 Autumn(Lilac)から利用可能です。コラム
使用例
基本的な使用例
複数の文字列値をIN句で指定する場合:
SELECT * FROM imm_user WHERE user_cd IN (<%REQUEST_PARAMETER_VALUES(userCdList)%>)リクエストパラメータとSQL変換
リクエストパラメータ「userCdList=aoyagi&userCdList=ueda&userCdList=harada」が送信されると、以下のSQLが実行されます:
SELECT * FROM imm_user WHERE user_cd IN ('aoyagi', 'ueda', 'harada')空文字の処理
空文字は無視されます。
リクエストパラメータ「userCdList=aoyagi&userCdList=&userCdList=ueda」が送信された場合:
SELECT * FROM imm_user WHERE user_cd IN ('aoyagi', 'ueda')
4.1.4.10. <%REQUEST_PARAMETER_NUMBER_VALUES(KEY_NAME)%>¶
HttpServletRequest(リクエスト)、または、RenderRequest(ポートレットのリクエスト)から取得した同名の複数パラメータを数値配列として取得し、カンマ区切りの数値としてセットされます。取得される優先順位は、HttpServletRequestが優先されて取得されます。
「KEY_NAME」にはパラメータ名を指定します。
数値の複数選択や範囲指定などで送信される値を一括でIN句に利用する場合に使用します。
コラム
- クエリビルダのWHERE句直接入力と抽出方法「直接入力」、SQLビルダで利用可能です
- 該当するリクエストパラメータが存在しない場合や、数値変換できる値がない場合は「NULL」に変換されます
- 数値変換できない値は無視され、警告ログが出力されます
- 最大1000個までの要素を処理します
コラム
<%REQUEST_PARAMETER_NUMBER_VALUES(KEY_NAME)%> は2025 Autumn(Lilac)から利用可能です。
コラム
使用例
基本的な使用例
複数の数値をIN句で指定する場合:
SELECT * FROM imm_user WHERE sort_key IN (<%REQUEST_PARAMETER_NUMBER_VALUES(sortKeys)%>)リクエストパラメータとSQL変換
リクエストパラメータ「sortKeys=1&sortKeys=2&sortKeys=3」が送信されると、以下のSQLが実行されます:
SELECT * FROM imm_user WHERE sort_key IN (1, 2, 3)データ変換の処理
数値変換できない値や空文字は無視されます。
リクエストパラメータ「sortKeys=1&sortKeys=&sortKeys=abc&sortKeys=2」が送信された場合:
SELECT * FROM imm_user WHERE sort_key IN (1, 2)
4.1.4.11. <%TIME_ZONE_ID%>¶
ログインユーザのタイムゾーンIDがセットされます。下記の様にパラメータを追加することで、他の種類のタイムゾーンIDのセットもできます。<%TIME_ZONE_ID(SYSTEM)%> : システムのタイムゾーンIDがセットされます。<%TIME_ZONE_ID(TENANT)%> : テナントのタイムゾーンIDがセットされます。<%TIME_ZONE_ID(USER)%> : ログインユーザのタイムゾーンIDがセットされます。パラメータ省略時と同じです。コラム
<%TIME_ZONE_ID%>は2024 Autumn(Jasmine)から利用可能です。
4.1.4.12. オリジナルの動的パラメータ作成¶
下記の設定ファイルでオリジナルの動的パラメータを追加できます。
設定ファイル: WEB-INF/conf/viewcreator-config.xml
パラメータ名の制約: <param-name>タグの値には半角大文字の英字とアンダースコアのみを使用します。
4.1.4.12.1. 単一値パラメータの設定と実装¶
単一の値を返すパラメータを作成する場合は、jp.co.intra_mart.foundation.viewcreator.SystemParameterインタフェースを実装します。
設定例(ログインユーザのロケール情報を取得するパラメータ):
<param>
<param-name>LOCALE</param-name>
<class-name>jp.co.intra_mart.foundation.viewcreator.params.SystemParameterLocale</class-name>
</param>
実装例(ログインユーザのロケール文字列を返す実装):
public class SystemParameterLocale implements jp.co.intra_mart.foundation.viewcreator.SystemParameter {
@Override
public String get(final String syskey) {
final AccountContext context = Contexts.get(AccountContext.class);
return context.getLocale().toString();
}
}
4.1.4.12.2. 配列型パラメータの設定と実装¶
複数の値を配列として返すパラメータを作成する場合は、jp.co.intra_mart.foundation.viewcreator.ArraySystemParameterインタフェースを実装します。
設定例(ログインユーザが所属するロールIDの配列を取得するパラメータ):
<param>
<param-name>SAMPLE_PARAM_ROLE_IDS</param-name>
<class-name>sample.SampleParameterRoleIds</class-name>
</param>
実装例(ログインユーザのロールIDの配列を返す実装):
public class SampleParameterRoleIds implements jp.co.intra_mart.foundation.viewcreator.ArraySystemParameter {
@Override
public Object[] getArray(final String syskey) {
final AccountContext context = Contexts.get(AccountContext.class);
return context.getRoleIds().toArray(new String[0]);
}
}
使用例:
-- ログインユーザのロールIDを使った抽出条件
SELECT * FROM b_m_role_b WHERE role_id IN (<%SAMPLE_PARAM_ROLE_IDS%>);
-- 実行時変換後(例)
SELECT * FROM b_m_role_b WHERE role_id IN ('tenant_manager', 'im_workflow_user');
追加したパラメータを反映するにはサーバの再起動が必要です。
4.1.4.13. 動的パラメータを利用可能な個所¶
定義の種類 画面・設定項目 データの扱い 配列型パラメータ クエリ クエリビルダ 抽出条件(抽出方法が直接入力のとき) そのまま利用 利用可能 抽出条件(抽出方法が直接入力以外のとき) 自動変換 利用不可 WHERE句直接入力 そのまま利用 利用可能 Viewの作成 利用不可 利用不可 SQLビルダ SQL そのまま利用 利用可能 データ参照 抽出条件 自動変換 利用不可 検索設定 自動変換 利用不可
コラム
シングルクォーテーションの自動エスケープ
すべての動的パラメータについて、受け取ったデータの中に ‘ (シングルクォーテーション)が含まれている場合、’’ (シングルクォーテーションを2つ連続して記述)に自動変換されます。
例:
- 単一値の場合:受け取ったデータが「user’s」の場合は 「user’’s」として処理
- 配列値の場合:受け取ったデータが「user’s」「o’connor」の場合は 「’user’’s’, ‘o’‘connor’」として処理