コンテンツにスキップ

view.SearchTypes

概要

viewオブジェクトの「SearchTypes」です。サーバスクリプトで部分一致や完全一致など項目の検索方法を指定する際に使用します。

使用方法

SearchTypesに指定できる値は以下のとおりです。分類項目の形式によって指定するSearchTypesが異なりますので、詳細は下記の「分類項目の形式ごとの指定について」を参照してください。

No SearchTypes 説明
1 PartialMatch 部分一致でフィルタします。
2 ExactMatch 完全一致でフィルタします。
3 ForwardMatch 前方一致でフィルタします。
4 PartialMatchMultiple 配列指定の場合、部分一致でフィルタします。
5 ExactMatchMultiple 配列指定の場合、完全一致でフィルタします。
6 ForwardMatchMultiple 配列指定の場合、前方一致でフィルタします。

分類項目の形式ごとの指定について

下表は分類項目の形式ごとに、指定すべきSearchTypesを表しています。フリーテキストは、自由入力欄として分類項目を使用しているケースを指します。選択肢一覧は、選択肢一覧に選択肢を入力して設定しているケースを指します。リンク設定は、リンクしたテーブルからデータを読み込んで選択肢としているケースを指します。意図通り検索できるものは「◯」となります。

SearchTypes フリーテキスト 選択肢一覧 リンク設定
PartialMatch 〇 × ×
ExactMatch 〇 × ×
ForwardMatch 〇 × ×
PartialMatchMultiple 〇 〇 ×
ExactMatchMultiple 〇 〇 〇
ForwardMatchMultiple 〇 〇 ×

分類項目がフリーテキストの場合、MatchMultipleフィルタは配列指定した場合のみ正常に表示されます。

サンプルデータ

以下の使用例では下記のテーブル、レコード情報をもとに記述しております。

社員テーブル(クリックすると詳細が表示されます)
レコードID 社員名(タイトル) 最寄り駅(分類A) 所属 連絡先
10 阿部一馬 新中野 総務部 123-123-123
11 安藤桜 北千住 総務部 111-111-111
12 加藤美緒 町田 総務部 456-456-456
13 斎藤和正 目黒 経理部 789-789-789
14 佐藤優樹 新宿 営業部 999-999-999
15 三浦裕子 葛西 経理部 333-333-333
16 山崎史郎 高田馬場 営業部 555-555-555
17 山田太郎 中野 営業部 258-258-258

使用例①

以下の例では、分類Aの形式がフリーテキストで、値が「中野」を含む文字列のレコードを表示します。

JavaScript
view.Filters.ClassA = '中野';
view.SearchTypes.ClassA = 'PartialMatch';
フィルタ結果
社員テーブル(クリックすると詳細が表示されます)
レコードID 社員名(タイトル) 最寄り駅(分類A) 所属 連絡先
10 阿部一馬 新中野 総務部 123-123-123
17 山田太郎 中野 営業部 258-258-258

使用例②

以下の例では、分類Aの形式がフリーテキストで、値が「中野」または「目黒」を含む文字列のレコードを表示します。

JavaScript
view.Filters.ClassA = '["中野","目黒"]';
view.SearchTypes.ClassA = 'PartialMatchMultiple';
フィルタ結果
社員テーブル(クリックすると詳細が表示されます)
レコードID 社員名(タイトル) 最寄り駅(分類A) 所属 連絡先
10 阿部一馬 新中野 総務部 123-123-123
13 斎藤和正 目黒 経理部 789-789-789
17 山田太郎 中野 営業部 258-258-258

使用例③

以下の例では、分類Aの選択肢一覧にリストを設定しており、「中野」の文字列が含まれる選択肢を設定しているレコードを表示します。

JavaScript
view.Filters.ClassA = '["中野"]';
view.SearchTypes.ClassA = 'PartialMatchMultiple';
フィルタ結果
社員テーブル(クリックすると詳細が表示されます)
レコードID 社員名(タイトル) 最寄り駅(分類A) 所属 連絡先
10 阿部一馬 新中野 総務部 123-123-123
17 山田太郎 中野 営業部 258-258-258

使用例④

以下の例では、分類Aが下記「社員テーブル」へのリンクが設定されており、「中野」もしくは「目黒」のレコードを表示します。

親テーブル 子テーブル
社員テーブル 最寄り駅テーブル
子テーブル
駅テーブル(クリックすると詳細が表示されます)
レコードID 社員名(タイトル) 最寄り駅(分類A) 交通費 電車通勤の有無
20 阿部一馬 新中野 ¥680 〇
21 安藤桜 北千住 ¥890 〇
22 加藤美緒 町田 ¥720 〇
23 斎藤和正 目黒 ¥680 〇
24 佐藤優樹 新宿 ¥580 〇
25 三浦裕子 葛西 ¥0 ×
26 山崎史郎 高田馬場 ¥0 ×
27 山田太郎 中野 ¥0 ×

下記のサンプルコードは「最寄り駅テーブル(子)」に設定します。
フィルタの設定値には「社員テーブル(親)」の対象レコードのID(配列形式)を指定します。
ここでは、13(目黒)と17(中野)を指定しております。
また、リンクしたレコードIDでのフィルタは完全一致するレコードのみ表示される仕様となっております。

JavaScript
1
2
3
let list = ["13","17"]
view.SearchTypes.ClassA = 'ExactMatchMultiple';
view.Filters.ClassA = JSON.stringify(list);
フィルタ結果
駅テーブル(クリックすると詳細が表示されます)
レコードID 社員名(タイトル) 最寄り駅(分類A) 交通費 電車通勤の有無
20 阿部一馬 新中野 ¥680 〇
23 斎藤和正 目黒 ¥680 〇
27 山田太郎 中野 ¥0 ×

サンプルコード

1. フィルタに入力したコードの形で、完全一致と前方一致を切り替える

機器マスタの一覧で、フィルタの「機器コード」に入力した値の形に応じて、検索方法を切り替えます。4桁ちょうどの数字(コードとして完全な形)が入力されたときは完全一致、それ未満のときは前方一致で絞り込みます。「ビュー処理時」にview.Filtersから入力値を読み、view.SearchTypesに検索方法を設定します。

実務での使いどころ

桁数の違うコードが混ざるマスタでは、部分一致で検索すると、コード「100」の検索に「1001」や「2100」が混ざります。テーブルの管理の「検索の種類」で完全一致にすると、コードの一部しか覚えていないときに検索できません。このサンプルでは、コードを正確に入れたときは1件に絞り、一部を入れたときは候補を出します。社員番号・型番・伝票番号など、ほかのコード体系にも使えます。

事前準備

1:「機器マスタ」テーブルで、以下の項目を有効化し、フィルタに表示してください。

項目コード 内容
分類A(ClassA) 機器コード(4桁の数字。選択肢一覧は設定せず、自由入力)

2:スクリプトを登録します。

2-1:「テーブルの管理 > サーバスクリプト」タブで「新規作成」を選択する。
 2-2:タイトル: 任意の名前(例:switchSearchTypeByInput)
 2-3:スクリプト: 下記サンプルコードを貼り付け
 2-4:条件: 「ビュー処理時」にチェック

JavaScript
// 検索方法を切り替える項目(機器コード)
const TARGET_COLUMN = 'ClassA';
// コードとして完全な形(4桁ちょうどの数字)
const CODE_PATTERN = /^[0-9]{4}$/;
const LOG_TAG = '[switchSearchTypeByInput]';

// 一覧のフィルタに入力された機器コードの形で、検索方法を切り替える
function switchSearchType() {
    // view.Filters は読むのみ(書き換えると、画面のフィルタの入力が効かなくなる)
    const input = view.Filters[TARGET_COLUMN];
    if (input === undefined || input === null || input === '') {
        return;
    }
    const searchType = CODE_PATTERN.test(String(input)) ? 'ExactMatch' : 'ForwardMatch';
    view.SearchTypes[TARGET_COLUMN] = searchType;
    logs.LogInfo(`${LOG_TAG} ${TARGET_COLUMN}「${input}」を ${searchType} で検索`, 'switchSearchType');
}

switchSearchType();

注記

  • view.Filtersは読むのみで、書き換えていません。view.Filtersを設定すると、画面のフィルタの入力が効かなくなります。view.SearchTypesのみを設定した場合は、入力した値はそのまま、検索方法のみが変わります。
  • フィルタの入力の有無は、Object.keys()ではなく、項目を直接参照して判定します。view.Filtersはプリザンターの内部のオブジェクトで、Object.keys()では項目の一覧が取れません。
  • 選択肢一覧やリンクを設定した分類項目は、フィルタがドロップダウンになり、コードの一部を入れる使い方ができないため、このサンプルの対象外です。

関連情報