3. 汎用検索画面の拡張¶
汎用検索画面はIM-共通マスタの検索処理をアプリケーションから共用できるよう実装された検索機能です。
スマートフォン版の汎用検索画面は画面処理基盤、プラグインの2つの要素で構成されています。検索機能をプラグインとして追加することで、汎用検索画面に統合された検索処理を作成することが出来ます。
3.1. 動作の概要¶
汎用検索画面の基盤とプラグインのインタフェースを中心に、実装の構成と動作の概要を説明します。
3.1.1. 汎用検索画面タブの動作概要¶
3.1.1.1. 単一選択モードと複数選択モード¶
3.1.1.2. 基盤部分から発生するイベントのハンドリング¶
スマートフォン版汎用検索画面では、4種類の画面テンプレートがあります。検索処理、返却内容をもとにどのテンプレートを使用するかを決定します。使用するテンプレートごとに基盤から発生するイベントが変わります。基盤側から呼び出されるイベントは、使用するテンプレートによって異なります。使用するテンプレートごとに、プラグインではそれぞれの要求に応えられるように実装する必要があります。
3.1.1.2.1. キーワード¶
search「検索」をタップした時に呼び出されます。
3.1.1.2.2. 階層¶
search「検索」をタップした時に呼び出されます。 searchTreeAll初期処理時に呼び出されます。大量データモードがOFFの時に呼び出されます。 searchTreeInclusion初期処理、階層移動時に呼び出されます。大量データモードがONの時に呼び出されます。
3.1.1.2.3. キーワード+追加条件一覧¶
search一次検索結果一覧で項目をタップしたとき、追加条件一覧で項目を選択したときに呼び出されます。 preSearch「検索」をタップした時に呼び出されます。 searchAdditionalCondition一次検索結果一覧で項目をタップしたときに呼び出されます。
3.1.1.2.4. 階層+追加条件一覧¶
search「検索」をタップした時に呼び出されます。 searchTreeAll初期処理時に呼び出されます。大量データモードがOFFの時に呼び出されます。 searchTreeInclusion初期処理、階層移動時に呼び出されます。大量データモードがONの時に呼び出されます。 searchAdditionalCondition階層一覧で階層項目をタップした時に呼び出されます。これらの処理をサーバサイドJavaScriptとして実装し、適切にハンドリングしなければなりません。
3.1.1.3. 大量データモードにおける階層移動¶
階層テンプレート、階層+追加条件一覧テンプレートでは、「階層移動」アイコンが階層項目に表示されます。大量データモードの状態によって、表示の仕方と基盤から発生するイベントが異なります。
- 大量データモードOFF(デフォルト)
階層の情報は、初期処理でsearchTreeAllが呼び出され全ての階層情報を取得します。 階層ごとに配下の階層が存在する場合に、「階層移動」アイコンが表示されます。 階層移動によってサーバへ通信することはありません。
- 大量データモードON
階層の情報は、初期処理や階層移動時にsearchTreeInclusionが呼び出され、1階層ずつ情報を取得します。
配下の階層の存在有無に関わらず、「階層移動」アイコンが表示されます。
「階層移動」アイコンをタップした時、配下の階層が存在した場合は、配下の階層情報が表示されます。
配下の階層が存在しない場合は「階層移動」アイコンが表示されません。
配下の階層の存在有無は記憶していません。そのため別の階層へ移動後に元の階層に戻った場合「階層移動」アイコンは全階層表示されます。
3.2. 実装の詳細¶
3.2.1. 汎用検索画面タブの実装¶
汎用検索画面で使用するプラグインを追加するためには次のものを準備する必要があります。
- プラグインの構成情報を記述するplugin.xml
- 基盤部分からのイベントに応答するためのjs (ssjs)
3.2.1.1. プラグインの構成情報を記述するplugin.xmlの作成¶
ここではユーザ検索(キーワード)プラグインのplugin.xmlを例に説明します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 <?xml version="1.0" encoding="utf-8"?> <plugin> <extension point="jp.co.intra_mart.common.search.tabs.smartphone"> <search name="standard" id="jp.co.intra_mart.im_master.app.search.tabs.department.tree.smartphone" version="8.0.0" rank="1"> <content title="%tabtitle" template="tree" page="im_master_smartphone/plugins/department/tree_plugin" large_data_mode="false"> </content> </search> </extension> </plugin>【リスト:ユーザ検索(キーワード)タブのplugin.xml】
- extensionタグ
point属性 :汎用検索画面のプラグインを指定します。スマートフォン版では「jp.co.intra_mart.common.search.tabs.smartphone」固定です。
- searchタグ
name、version、rank などの属性はPlugin Managerによって依存関係の管理などに使用されます。詳細はPlugin Managerのドキュメントを参照してください。 id属性 :Plugin Managerによって依存関係の管理などに使用されます。スマートフォン用であることを識別するため末尾に「.smartphone」を付けます。
- content タグ
title属性:汎用検索画面のプラグインを切り替えるコンボに表示される名称を設定します。%表記は国際化メッセージキーを表します。国際化に関してはPlugin Managerのマニュアルを参照してください。template属性:利用するテンプレート種類を設定します。
page属性:プラグイン処理を実装したSSJSのページパス(拡張子なし)を設定します。
large_data_mode属性:大量データモードのON/OFFを指定します。未設定時はOFFとして動作します。“false”:大量データモードOFFとして動作します。初期表示時に階層情報をすべて取得します。“true”:大量データモードONとして動作します。階層移動するたびに検索処理が行われます。検索件数の打ち切りなどはプラグイン側で実装します。content タグでは、さらに以下のタグを記述することで、基盤側から呼び出されるイベントごとに関数の呼び出しファイルを変更できます。基盤から呼び出されるメソッド名を変更できません。
- searchタグ
- page属性:関数「検索」を実装したSSJSのページパス(拡張子なし)を設定します。
- search_tree_allタグ
- page属性:関数「全階層情報検索」を実装したSSJSのページパス(拡張子なし)を設定します。
- search_tree_inclusionタグ
- page属性:関数「配下の階層情報検索」を実装したSSJSのページパス(拡張子なし)を設定します。
- pre_searchタグ
- page属性:関数「一次検索」を実装したSSJSのページパス(拡張子なし)を設定します。
- search_additional_conditionタグ
- page属性:関数「一次検索」を実装したSSJSのページパス(拡張子なし)を設定します。
このxmlファイルをPlugin Managerの管理するフォルダに配置します。具体的には以下のパスです。なお、%plugin_id%にはスマートフォンであることがわかるように「smartphone」を入れることを推奨します。<(展開したwar)/WEB-INF/plugin/%plugin_id%/plugin.xml>plugin.xmlを変更した場合は、intra-martの再起動が必要です。
3.2.1.2. 基盤からのイベントに応答するためのjsの作成¶
基盤からは特定のタイミングでプラグインの特定のメソッドを呼び出します。呼び出されるメソッドは使用するテンプレートで異なります。テンプレートごとに実装する処理を示します。各メソッドのインタフェース詳細は、「IM-共通マスタ スマートフォン拡張インタフェース定義一覧」を参照してください。このファイルは「プラグインの構成情報を記述するplugin.xmlの作成 」でcontentタグのpageプロパティと一致する場所に配置します。
3.2.1.2.1. キーワード¶
メソッド名 戻り値 説明 1 search(Object, Boolean, String) Object 「検索」をタップしたときに呼び出されます。検索結果を所定の形式で返却します。引数の説明:Object: 起動パラメータBoolean: 大量データモードString: 検索キーワード【表:キーワードテンプレートに必要なメソッドの一覧】
3.2.1.2.2. 階層¶
メソッド名 戻り値 説明 1 searchTreeAll(Object, Boolean) Object 基盤の初期処理時に呼び出されます。このメソッドは大量データモードがOFFのときに呼び出されます。すべての階層を含んだ検索結果を所定の形式で返却します。引数の説明:Object: 起動パラメータBoolean: 大量データモード2 searchTreeInclusion(Object, Boolean, Object) Object 基盤の初期処理時、および階層移動時に呼び出されます。このメソッドは大量データモードがONのときに呼び出されます。該当の階層のみを含んだ検索結果を所定の形式で返却します。引数の説明:Object: 起動パラメータBoolean: 大量データモードObject: 移動先の階層3 search(Object, Boolean, Object) Object 階層一覧で階層項目をタップしたときに呼び出されます。検索結果を所定の形式で返却します。引数の説明:Object: 起動パラメータBoolean: 大量データモードObject: 階層一覧で選択した階層【表:階層テンプレートに必要なメソッドの一覧】
3.2.1.2.3. キーワード+追加条件一覧¶
メソッド名 戻り値 説明 1 preSearch(Object, Boolean, String) Object 「検索」をタップしたときに呼び出されます。検索結果を所定の形式で返却します。引数の説明:Object: 起動パラメータBoolean: 大量データモードString: 検索キーワード2 searchAdditionalCondition(Object, Boolean, Object) Object 一次検索結果一覧で項目をタップしたときに呼び出されます。検索結果を所定の形式で返却します。引数の説明:Object: 起動パラメータBoolean: 大量データモードObject: 一次検索結果一覧で選択した項目3 search(Object, Boolean, Object, Object) Object 一次検索結果一覧で項目をタップしたとき、および追加条件一覧で項目を選択したときに呼び出されます。検索結果を所定の形式で返却します。引数の説明:Object: 起動パラメータBoolean: 大量データモードObject: 一次検索結果一覧で選択した項目Object: 追加条件一覧で選択した項目【表:キーワード+追加条件一覧テンプレートに必要なメソッドの一覧】
3.2.1.2.4. 階層+追加条件一覧¶
メソッド名 戻り値 説明 1 searchTreeAll(Object, Boolean) Object 基盤の初期処理時に呼び出されます。このメソッドは大量データモードがOFFのときに呼び出されます。すべての階層を含んだ検索結果を所定の形式で返却します。引数の説明:Object: 起動パラメータBoolean: 大量データモード2 searchTreeInclusion(Object, Boolean, Object) Object 基盤の初期処理時、および階層移動時に呼び出されます。このメソッドは大量データモードがONのときに呼び出されます。該当の階層のみを含んだ検索結果を所定の形式で返却します。引数の説明:Object: 起動パラメータBoolean: 大量データモードObject: 移動先の階層3 searchAdditionalCondition(Object, Boolean, Object) Object 階層一覧で階層項目をタップした時に呼び出されます。検索結果を所定の形式で返却します。引数の説明:Object: 起動パラメータBoolean: 大量データモードObject: 階層一覧で選択した項目4 search(Object, Boolean, Object, Object) Object 階層一覧で項目をタップしたとき、および追加条件一覧で項目を選択したときに呼び出されます。検索結果を所定の形式で返却します。引数の説明:Object: 起動パラメータBoolean: 大量データモードObject: 階層一覧で選択した項目Object: 追加条件一覧で選択した項目【表:階層+追加条件一覧テンプレートに必要なメソッドの一覧】
3.2.1.2.5. 結果の形式について¶
結果は以下の形式のオブジェクトを配列にして返してください。
プロパティ名 型 説明 data Object 実際にデータベースから取得したレコードの内容をオブジェクトとして設定します。プロパティ名をカラム名として、値にそのカラムの値を設定します。type string データの種類を表す文字列です。取得した情報元のテーブル物理名を設定します。keyFields Array 文字列の配列。data 内で一意性を表すキーとなるプロパティのプロパティ名を配列として設定してください。画面処理基盤側で重複選択を避ける為の情報として使用します。具体的にはdataからkeyFieldsに設定された名前のプロパティを取得し、それら全ての値とタイプが一致するものは同一データであると判断しています。displayName string オブジェクトを画面に表示する際に使用する表示文字列です。