開発者向け機能:サーバスクリプト:view.Filters
## 概要
「viewオブジェクト」の「Filters」です。[サーバスクリプト](/ja/manual/table-management-server-script)で[一覧画面](/ja/manual/table-grid)や[エディタ](/ja/manual/table-editor)に表示する「レコード」を[フィルタ](/ja/manual/table-record-search)することで、ユーザに閲覧させるレコードを制限することができます。[レコードのアクセス制御](/ja/manual/table-record-access-control)と異なり「レコード」1件1件にアクセス権を設定する必要がありません。[JSONデータレイアウト:View](/ja/manual/api-view)が使用できます。
## 制限事項
1. 「ビュー処理時」の条件のみ使用できます。
1. [添付ファイル項目](/ja/manual/table-management-attachments)、[コメント項目](/ja/manual/table-management-comments)は使用できません。
1. [サーバスクリプト](/ja/manual/table-management-server-script)により[フィルタ](/ja/manual/table-record-search)を設定した項目は[一覧画面](/ja/manual/table-grid)の[フィルタ](/ja/manual/table-record-search)操作が動作しません。[サーバスクリプト](/ja/manual/table-management-server-script)により上書きされます。
1. SQL Serverを使用する場合とPostgreSQLを使用する場合では検索結果が異なる場合がございます。SQL ServerではLIKE句またはフルテキスト検索が使用されるのに対し、PostgreSQLではILIKE句またはpg_trgmによるフルテキスト検索が行われます。
## 注意事項
1. view.Filtersの機能で、一覧画面でレコードを抽出されないようにフィルタした場合であっても、[横断検索](/ja/manual/crosssearch)では検索結果リストに表示されます。これを防ぐにはテーブルの管理の設定[横断検索を無効化](/ja/manual/table-management-disable-cross-search)で横断検索を無効化する必要があります。
## プロパティ
|No|プロパティ名|変更|説明|
|:--|:--|:--|:--|
|1|[カラム名]|○|[フィルタ](/ja/manual/table-record-search)をかける[カラム名](/ja/manual/dev-column-name)を指定しフィルタ文字列を設定。|
## メソッド
メソッドはありません。
## 使用例
① 下記の例では[状況項目](/ja/manual/table-management-status)が 900 (完了) または 910 (保留) のレコードを抽出して表示します。
##### JavaScript
```
view.Filters.Status = '["900","910"]';
```
下記の例では[担当者項目](/ja/manual/table-management-owner)にセットされた[ユーザ](/ja/manual/table-management-choices-text-users)のユーザIDが 215 と 319 のレコードを抽出して表示します。
##### JavaScript
```
view.Filters.Owner = '["215","319"]';
```
下記の例では[数値項目](/ja/manual/table-management-num)にセットされた数値が 600000 ~ 700000 のレコードを抽出して表示します。カンマより前を省略すると 700000 以下、カンマより後を省略すると 600000 以上がセットされたレコードを抽出して表示します。複数の範囲を検索する場合は '["100000,200000","600000,700000"]' のように指定します。
##### JavaScript
```
view.Filters.NumA = '["600000,700000"]'
```
下記の例では[日付項目](/ja/manual/table-management-date)にセットされた日付が本日のレコードを抽出して表示します。'["Today"]'は本日、'["ThisMonth"]'は今月、'["ThisYear"]'は今年を抽出します。
##### JavaScript
```
view.Filters.DateA = '["Today"]';
```
下記の例では[日付項目](/ja/manual/table-management-date)にセットされた日付が 2021/5/1 00:00:00 ~ 2021/5/31 23:59:59.997 のレコードを抽出して表示します。カンマより前を省略すると 2021/5/31 23:59:59.997以前、カンマより後を省略すると 2021/5/1 00:00:00以降がセットされたレコードを抽出して表示します。複数の範囲を検索する場合は '["2021/1/1,2021/1/31 23:59:59.997","2021/5/1,2021/5/31 23:59:59.997"]' のように指定します。
##### JavaScript
```
view.Filters.DateB = '["2021/5/1,2021/5/31 23:59:59.997"]'
```
下記の例では[チェック項目](/ja/manual/table-management-check)がオンになっているレコードを抽出して表示します。false を代入するとオフのレコードを抽出します。
##### JavaScript
```
view.Filters.CheckA = true;
```
下記の例では[内容項目](/ja/manual/table-management-body)に ソフトウェア の文字を含むレコードを抽出して表示します。[テーブルの管理](/ja/manual/table-management)の[フィルタ](/ja/manual/table-record-search)で[検索の種類](/ja/manual/table-management-filter-search-types)を設定すると「部分一致検索」だけでなく「前方一致検索」や「完全一致検索」も行えます。[タイトル項目](/ja/manual/table-management-title)、「「説明項目」及び選択肢の無い[分類項目](/ja/manual/table-management-class)でも同様の検索が行えます。
##### JavaScript
```
view.Filters.Body = 'ソフトウェア';
```
下記の例では[状況項目](/ja/manual/table-management-status)が 900 (完了) 且つ[日付項目](/ja/manual/table-management-date)にセットされた日付が本日のレコードを抽出して表示します。異なる項目を複数セットした場合には AND 条件で[フィルタ](/ja/manual/table-record-search)されます。
##### JavaScript
```
view.Filters.Status = '["900"]';
view.Filters.DateA = '["Today"]';
```
下記の例では[状況項目](/ja/manual/table-management-status)が 900 (完了) または[分類項目](/ja/manual/table-management-class)の選択肢に 設計 がセットされたレコードを抽出して表示します。or_で始まる任意のプロパティにJSON形式のフィルタ条件を代入することで、OR条件による[フィルタ](/ja/manual/table-record-search)を行うことができます。画面からの[フィルタ](/ja/manual/table-record-search)操作は明示的に無効化する必要があります。
##### JavaScript
```
// 画面からのフィルタ操作を無効化
view.Filters.ClassA = '';
view.Filters.Status = '';
// OR条件の設定
let data = {};
data.Status = '["900"]';
data.ClassA = '["設計"]';
view.Filters.or_MyFilterName = JSON.stringify(data);
```
下記の例では組織IDが 3 のユーザがアクセスした場合[分類項目](/ja/manual/table-management-class)の選択肢に 人事 がセットされたレコードを抽出して表示します。組織IDが 7 のユーザが使用した場合[分類項目](/ja/manual/table-management-class)の選択肢に 開発 がセットされたレコードを抽出して表示します。それ以外の組織のユーザがアクセスした場合には全てのレコードを抽出して表示します。
##### JavaScript
```
context.Log(context.DeptId);
switch (context.DeptId) {
case 3:
view.Filters.ClassA = '["人事"]'
break;
case 7:
view.Filters.ClassA = '["開発"]'
break;
default:
break;
}
```
下記の例ではユーザIDが 2 以外のユーザがアクセスした場合 分類A が 設計 且つ 分類D が 3 のレコード、または 分類B が テスト 且つ 分類D が 7 のレコードを抽出して表示します。ユーザIDが 2 のユーザがアクセスした場合には全てのレコードを抽出して表示します。and_で始まる任意のプロパティにJSON形式のフィルタ条件を代入することで、OR条件と条件をAND条件を組み合わせた[フィルタ](/ja/manual/table-record-search)を行うことができます。
##### JavaScript
```
if (context.UserId !== 2) {
let data1 = {};
data1.ClassA = '["設計"]';
data1.ClassD = '["3"]';
let data2 = {};
data2.ClassA = '["テスト"]';
data2.ClassD = '["7"]';
let data = {};
data.and_Filter1 = JSON.stringify(data1);
data.and_Filter2 = JSON.stringify(data2);
view.Filters.or_Filter = JSON.stringify(data);
}
```
下記の例では 分類A でリンクした サイトID 6 のレコードの分類B に 東京都中野区 がセットされているレコードを抽出して表示します。下記の記述によりマスタレコードの項目でフィルタする事ができます。
```
view.Filters['ClassA~6,ClassB'] = '東京都中野区';
```
下記の例では 分類A でリンクされた サイトID 7 の子レコードの 分類B に システム開発 がセットされているレコードを抽出して表示します。下記の記述により子レコードの項目でフィルタする事ができます。子レコードに複数のレコードがヒットした場合、親レコードの同じレコードが複数表示されます。
```
view.Filters['ClassA~~7,ClassB'] = '["システム開発"]';
```
下記の例では 分類A の値と 分類B の値が一致しているレコードのみを抽出して表示します。eq_で始まる任意のプロパティに'{1つ目の項目}|{二つ目の項目}'の形式で比較する項目を指定することで、2つの項目の値が一致しているレコードのみをフィルタすることができます。
※ 但し、2つの項目にはデータタイプの異なる項目は指定できません。各項目のデータタイプは [項目名とデータベース上のカラム名の対応](/ja/manual/dev-column-name)の一覧に記載されています。
##### JavaScript
```
view.Filters.eq_MyFilterName = 'ClassA|ClassB';
```
下記の例では 分類A の値と 分類B の値が一致していないレコードのみを抽出して表示します。notEq_で始まる任意のプロパティに'{1つ目の項目}|{二つ目の項目}'の形式で比較する項目を指定することで、2つの項目の値が一致しているレコードのみをフィルタすることができます。
※ 但し、2つの項目にはデータタイプの異なる項目は指定できません。各項目のデータタイプは [項目名とデータベース上のカラム名の対応](/ja/manual/dev-column-name)の一覧に記載されています。
##### JavaScript
```
view.Filters.notEq_MyFilterName = 'NumA|NumB';
```
eq_、notEq_で始まるプロパティは、or_やand_で始まるプロパティと組み合わせて使用することができます。また、リンクしている親レコードの項目を指定することも可能です。下記の例では「分類A でリンクした サイトID 10 のレコードの タイトル と、分類B の値が一致する」または「分類A でリンクしてた サイトID 10 のレコードの 数値A の値と、数値A の値が一致する」レコードのみを抽出して表示します。
##### JavaScript
```
let data = {}
data.eq_Filter1 = 'ClassA~10,Title|ClassB';
data.eq_Filter2 = 'ClassA~10,NumA|NumA';
view.Filters.or_MyFilter = JSON.stringify(data);
```
## 対応バージョン
|対応バージョン|内容|
|:--|:--|
|1.1.14.0 以降|OR条件による[フィルタ](/ja/manual/table-record-search)機能の追加|
## 関連情報
<div id="ManualList"><ul><li><a href="/ja/manual/table-grid">テーブル機能:レコードの一覧画面</a><span>2023/04/12 up</span></li>
<li><a href="/ja/manual/table-record-search">テーブル機能:レコードの検索(フィルタ)</a><span>2024/09/12 up</span></li>
<li><a href="/ja/manual/table-editor">テーブル機能:レコードのエディタ画面</a><span>2023/04/12 up</span></li>
<li><a href="/ja/manual/table-record-access-control">テーブル機能:レコードのアクセス制御</a><span>2023/04/19 up</span></li></ul></article>
<ul><li><a href="/ja/manual/table-management">テーブルの管理</a><span>2024/05/24 up</span></li></ul></article>
<ul><li><a href="/ja/manual/table-management-title">テーブルの管理:項目:タイトル</a><span>2023/04/19 up</span></li>
<li><a href="/ja/manual/table-management-body">テーブルの管理:項目:内容</a><span>2023/04/21 up</span></li>
<li><a href="/ja/manual/table-management-status">テーブルの管理:項目:状況</a><span>2023/06/13 up</span></li>
<li><a href="/ja/manual/table-management-owner">テーブルの管理:項目:担当者</a><span>2023/04/21 up</span></li>
<li><a href="/ja/manual/table-management-class">テーブルの管理:項目:分類</a><span>2023/04/21 up</span></li>
<li><a href="/ja/manual/table-management-num">テーブルの管理:項目:数値</a><span>2023/04/21 up</span></li>
<li><a href="/ja/manual/table-management-date">テーブルの管理:項目:日付</a><span>2023/04/21 up</span></li>
<li><a href="/ja/manual/table-management-check">テーブルの管理:項目:チェック</a><span>2024/06/03 up</span></li>
<li><a href="/ja/manual/table-management-attachments">テーブルの管理:項目:添付ファイル</a><span>2024/06/13 up</span></li>
<li><a href="/ja/manual/table-management-comments">テーブルの管理:項目:コメント</a><span>2023/04/21 up</span></li></ul></article>
<ul><li><a href="/ja/manual/table-management-editor">テーブルの管理:エディタ</a><span>2024/04/09 up</span></li>
<li><a href="/ja/manual/table-management-editor-columns">テーブルの管理:エディタ:エディタの項目の設定</a><span>2024/12/19 up</span></li>
<li><a href="/ja/manual/table-management-choices-text-users">テーブルの管理:エディタ:項目の詳細設定:選択肢一覧:ユーザ</a><span>2023/04/25 up</span></li>
<li><a href="/ja/manual/table-management-choice-json">テーブルの管理:エディタ:項目の詳細設定:選択肢一覧:フィルタ、ソート、表示フォーマット</a><span>2024/11/12 up</span></li></ul></article>
<ul><li><a href="/ja/manual/table-management-filter">テーブルの管理:フィルタ</a><span>2023/05/12 up</span></li>
<li><a href="/ja/manual/table-management-filter-search-types">テーブルの管理:フィルタ:検索の種類</a><span>2023/05/12 up</span></li></ul></article>
<ul><li><a href="/ja/manual/table-management-search-type">テーブルの管理:検索:検索の設定:検索の種類</a><span>2023/05/18 up</span></li>
<li><a href="/ja/manual/table-management-disable-cross-search">テーブルの管理:検索:検索の設定:横断検索を無効化</a><span>2024/04/19 up</span></li></ul></article>
<ul><li><a href="/ja/manual/table-management-server-script">テーブルの管理:サーバスクリプト</a><span>2024/10/08 up</span></li></ul></article>
<ul><li><a href="/ja/manual/user">ユーザ管理機能</a><span>2024/05/14 up</span></li></ul></article>
<ul><li><a href="/ja/manual/crosssearch">共通機能:横断検索</a><span>2024/11/25 up</span></li></ul></article>
<ul><li><a href="/ja/manual/dev-column-name">項目名とデータベース上のカラム名の対応</a><span>2024/12/19 up</span></li></ul></article>
<ul><li><a href="/ja/manual/server-script">開発者向け機能:サーバスクリプト</a><span>2023/06/01 up</span></li>
<li><a href="/ja/manual/server-script-view-filters-cleared">開発者向け機能:サーバスクリプト:view.FiltersCleared</a><span>2023/08/25 up</span></li></ul></article>
<ul><li><a href="/ja/manual/api-view">開発者向け機能:JSONデータレイアウト:View</a><span>2024/08/15 up</span></li></ul></article>
<ul><li><a href="/ja/manual/advanced-operations-link">応用編:リンク</a><span>2024/07/08 up</span></li></ul></article>
<ul><li><a href="/ja/manual/faq-server-script-log">FAQ:サーバスクリプトのエラーログを出力したい</a><span>2024/04/29 up</span></li></ul></article></div><input id="SearchTextHidden" type="hidden" value="" />