0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Pleasanterの拡張フィールドを使おう~サーバースクリプト連携編~

Posted at

はじめに

拡張フィールドの活用方法、今回はサーバースクリプト連携編です。
拡張フィールドの説明ならびに、拡張フィールドとスクリプトの連携については前回の記事をご参照ください。

拡張フィールドとサーバスクリプト

サーバスクリプトを使う際、画面から自由な値(引数)を取得したいと思う方はいないでしょうか。
フィルタの値はサーバスクリプトで取得できますが、フィルタに値を入れてしまうとデータのフィルタリングが行われてしまいます(当たり前ですが)。よって画面に影響を与えない値を入力することは難しいです。
例えば、以下のようなテーブルがあった場合
image.png
フィルタを適応して期間を絞ることはできますが、複数の期間を指定することができません(例えば1/1~4/30,7/1~12/31のように)。
image.png
サーバスクリプトを使えば複数の期間を指定することはできますが、この場合基本的に固定値になってしまいます。
しかし拡張フィールドの値はフィルタと同じように、サーバスクリプトで取得することができるうえ、拡張フィールド自体はフィルタに影響しない値なので、サーバスクリプトに自由な値を送信し、その値を使ってデータの削除をしたり作成したりすることなどが可能です。

今回は例として、拡張フィルタに入力した条件を使って、サーバスクリプトから特殊なフィルタ条件を設定する方法をご紹介します。

拡張フィールド設定

まず拡張フィルタを二つ作成します。
現状、ViewExtentionsをサーバスクリプト側でキャッチする方法がないのでFieldTypeはFilterにします。TypeNameはdatetimeです。
また入力した内容をPostしてサーバスクリプトでキャッチさせるため、AutoPostBackをtrueに設定します。
なお、項目は読み込まれたファイルの逆順に並ぶので、項目1が後に読まれるようにファイル名を設定します。

  • 02_ExtendedFirst.json
{
    "Name": "ExtendedFieldFirst",
    "SiteIdList": [55432],
    "IdList": null,
    "FieldType": "Filter",
    "TypeName": "datetime",
    "LabelText": "期間1",
    "AutoPostBack":  true
}
  • 01_ExtendedSecound.json
{
    "Name": "ExtendedFieldSecound",
    "SiteIdList": [55432],
    "IdList": null,
    "FieldType": "Filter",
    "TypeName": "datetime",
    "LabelText": "期間2",
    "AutoPostBack":  true
}

サーバスクリプト設定

拡張フィールドは、view.Filters.[Name]で取得できます。

let extendedFieldFirst = view.Filters.ExtendedFieldFirst;
let extendedFieldSecound = view.Filters.ExtendedFieldSecound;

if (extendedFieldFirst != null && extendedFieldSecound != null){
    view.Filters.DateA = JSON.stringify(JSON.parse(extendedFieldFirst).concat(JSON.parse(extendedFieldSecound)));
}

フィルタで複数の範囲を検索したい場合は、'["2021/1/1,2021/1/31 23:59:59.997","2021/5/1,2021/5/31 23:59:59.997"]' のように範囲を配列にすると指定することができます。
これを利用し、両方の拡張フィールドに値が入っていた場合、DateAのフィルタを各フィールドの値で置き換えるように設計しています。
値は文字列化されたJSONとして取得されるため、一度Parseしたうえで結合し、再度stringifyしています。
なお、null判定を行わないと値が入っていなかった場合、Parseする際にエラーでクラッシュしてしまうので注意してください。

フィルタ適応

それでは期間1に「2025/1/1 - 2025/3/31」、期間2に「2025/7/1 - 2025/ 12/31」を入力してみます。
いかがでしょうか?
このように、6月のデータだけを排除して表示することに成功しています。
image.png

まとめ

今回は、拡張フィールドとサーバスクリプトを連携して特殊なフィルタ条件を作成する方法をまとめました。
このように拡張フィールドを使うと、サーバスクリプトに任意の引数を渡して特殊なフィルタを適応したり、データの書き換えをしたりすることができます。
任意の値をサーバスクリプトに渡す方法はほぼありませんので、かなり便利な機能だと思います。この使い方も、ぜひいろいろ試してみてください!

次回の記事では、拡張フィールドと拡張SQLを連携させる方法をご紹介します。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?