intra-mart Accel Platform IM-共通マスタ スマートフォン拡張プログラミングガイド 初版 2012-10-01

3. 汎用検索画面の拡張

汎用検索画面はIM-共通マスタの検索処理をアプリケーションから共用できるよう実装された検索機能です。

スマートフォン版の汎用検索画面は画面処理基盤、プラグインの2つの要素で構成されています。
検索機能をプラグインとして追加することで、汎用検索画面に統合された検索処理を作成することが出来ます。

3.1. 動作の概要

汎用検索画面の基盤とプラグインのインタフェースを中心に、実装の構成と動作の概要を説明します。

3.1.1. 汎用検索画面タブの動作概要

汎用検索画面は、検索画面のウィンドウを作成し、プラグインの呼び出しや、検索結果の受け渡しをする基盤部分と、実際に検索処理を行い、基盤に対してユーザの選択値を渡すプラグインという構成で成り立っています。
検索条件の受付、検索、結果の返却までをすべてプラグインの処理として実装します。
基盤部分では、初期表示、基本となる条件(検索基準日、ロケール、削除情報を含めるか否かなど)の管理と、検索結果の表示、受け渡し、取りまとめを行います。
汎用検索画面の構成の概要を以下の【図:汎用検索画面タブの動作概要】に示します。
../../_images/general_purpose_search_screen.png

【図:汎用検索画面タブの動作概要】

3.1.1.1. 単一選択モードと複数選択モード

画面基盤は起動時のパラメータにより、検索画面で結果を複数選択するか、単一で選択するか処理を切り変えることが出来ます。
単一選択の場合、検索結果一覧で選択された項目が選択結果として使用されますが、複数選択の場合、検索結果一覧の下部に選択内容一覧が表示され、そこに選択項目を貯めておくことができます。
../../_images/single_selection.png
../../_images/multiple_selection.png

【図:単一選択モードと複数選択モード】

PC版と異なり、選択した項目の決定・取り消しはすべて基盤側で制御します。

3.1.1.2. 基盤部分から発生するイベントのハンドリング

スマートフォン版汎用検索画面では、4種類の画面テンプレートがあります。
検索処理、返却内容をもとにどのテンプレートを使用するかを決定します。
使用するテンプレートごとに基盤から発生するイベントが変わります。
基盤側から呼び出されるイベントは、使用するテンプレートによって異なります。
使用するテンプレートごとに、プラグインではそれぞれの要求に応えられるように実装する必要があります。
3.1.1.2.1. キーワード
  1. search
    「検索」をタップした時に呼び出されます。
3.1.1.2.2. 階層
  1. search
    「検索」をタップした時に呼び出されます。
  2. searchTreeAll
    初期処理時に呼び出されます。大量データモードがOFFの時に呼び出されます。
  3. searchTreeInclusion
    初期処理、階層移動時に呼び出されます。大量データモードがONの時に呼び出されます。
3.1.1.2.3. キーワード+追加条件一覧
  1. search
    一次検索結果一覧で項目をタップしたとき、追加条件一覧で項目を選択したときに呼び出されます。
  2. preSearch
    「検索」をタップした時に呼び出されます。
  3. searchAdditionalCondition
    一次検索結果一覧で項目をタップしたときに呼び出されます。
3.1.1.2.4. 階層+追加条件一覧
  1. search
    「検索」をタップした時に呼び出されます。
  2. searchTreeAll
    初期処理時に呼び出されます。大量データモードがOFFの時に呼び出されます。
  3. searchTreeInclusion
    初期処理、階層移動時に呼び出されます。大量データモードがONの時に呼び出されます。
  4. 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 オブジェクトを画面に表示する際に使用する表示文字列です。