ブログ

2023/02/08
【プリザンター】 第181回)複数チェックボックスのうち一つでもチェックされているレコードをフィルタする方法

チェックボックスのフィルタ要望

こんにちは、CCS田中です。

プリザンターの設定項目でチェックボックスがあります。みなさんは使われていますでしょうか?
例えば、製品管理を行うテーブルがあり、オプション追加をチェックボックスで行っている場合に、オプション追加されたものだけを抽出したい。だったり、
複数項目のうち、1つ以上にチェックが入っている場合だけ追加作業を行う必要があるため、チェックが入ったものだけを確認したい。などです。

標準機能のフィルタ機能では、各チェック項目に対して、チェックが入っているかの絞り込みはできますが、複数をグループとして、いずれかにチェックが入っているものがあるかどうかは確認ができません。

今回は、こういった場合に使える設定をご紹介します。

拡張フィールドと拡張SQLを使った設定方法

以前にも拡張フィールドと拡張SQLを使った設定については以前のブログで紹介したことがありますが、今回チェックボックスを対象にするということで、少し詳細が変わってきますので改めて説明したいと思います。

まず、基本となるテーブル(記録テーブル)を以下のように作成します。
項目としては、[タイトル]、[分類A]、[チェックA]、[チェックB]、[チェックC]、[チェックD] を追加してください。
一覧の設定は、上記の項目を表示するようにしてください。
フィルタ設定では、[分類A]を追加しておきます。

次に、サーバスクリプトを作成します。
以下のスクリプトを記載し、条件は「行表示の前」を選択します。
スクリプト中の「CheckBoxOnField」は、次に記載する拡張フィールドの設定ファイル中のNameに一致するように設定します。また、2行目の「CheckBoxOn」は、拡張SQLの設定ファイル中のNameに一致するように設定します。

<サーバスクリプト>


if(view.Filters.CheckBoxOnField){
view.OnSelectingWhere = 'CheckBoxOn';
}



ここまででプリザンターの画面上の設定は終わりです。次にファイルを作成していきます。
最初に拡張フィールド用のファイルを以下のように作成します。
作成したら、このファイルをプリザンターのパラメータが保存されているフォルダの下にあるExtendedFieldsフォルダに保存します。
例:C:\web\pleasanter\Implem.Pleasanter\App_Data\Parameters\ExtendedFields

xxxxx部分は、先ほど作成したテーブルのサイトIDを記載します。

<CheckBoxField.json>

{
"SiteIdList": [ xxxxx ],
"Name": "CheckBoxOnField",
"FieldType": "Filter",
"TypeName": "bit",
"LabelText": "チェックあり",
"After": "ClassA",
"SqlParam": true,
"CheckFilterControlType":1
}



ファイル内容の説明
2行目 設定するテーブルのサイトIDを指定
3行目 名前を指定(サーバスクリプトに記載する名前を合わせること)
4行目 今回フィルターに設定するため、Filterを指定
5行目 チェックボックスを指定するため、bitを指定
6行目 表示される名前を指定(フィルタに「チェックあり」として表示される)
7行目 フィルタの分類A(ClassA)の後ろに追加する指定
8行目 SQLを使用するかの設定で、使用するため、trueを指定
9行目 チェックしたときに動作するように、1を指定

次に拡張SQLのファイルを作成します。
設定部分をJSONファイルに記載して、クエリ(Where句)をJSON.SQLファイルに記載します。

<CheckBoxOn.json>

{
"Name": "CheckBoxOn",
"SiteIdList": null,
"OnSelectingWhere": true,
"OnSelectingWhereParams": [ "CheckBoxOnField" ]
}



ファイル内容の説明
2行目 サーバスクリプトで設定した名前と同じ名前を記載
3行目 特に対象となるサイトIDリストはないため、nullを指定
4行目 Where句を指定するため、OnSelectingWhereをtrueに指定
5行目 Wehre句を指定するフィールド名を指定(拡張フィールドで指定した内容)

<CheckBoxOn.json.sql>

 ([Results].[CheckA] = '1' or [Results].[CheckB] = '1' or [Results].[CheckC] = '1' or [Results].[CheckD] = '1')



ここでWhere句を指定します。
[Results]部分は、記録テーブルのための指定です。期限付きテーブルで作成した場合は[Issues]を指定します。
チェックボックスは、選択されているときが「1」、非選択の場合が「0」のため、設定した各チェックボックスに対して「1」の時をORで接続します。

さて、このように設定すると以下のようにチェック前の画面から、チェック後の画面で1つ以上のチェックがあるレコードのみが表示されるようになります。







まとめ

いかがでしたか?

拡張フィールドや拡張SQLは、管理者で管理されていてすぐに利用できない方もいるかもしれませんが、非常に便利ですので管理者にお願いして設定してもらうなどしてください。
ただし、拡張機能はファイルの記載を間違えるとプリザンター自体が表示できなくなることもありますので、ご注意ください。

弊社ではスタイル・スクリプトサンプル集、プリザンター逆引き辞典のほかにも、運用ノウハウ集の販売もございます。また、導入の支援や、スクリプト開発なども支援いたします。

ご相談の内容によっては有料となる場合がございますが、まずは気軽にご相談ください。
☆☆☆
ブログ内容への質問や追加説明をご希望の方は【 問い合わせフォーム 】からお気軽にお問い合わせください
☆☆☆

PAGE TOP