申請日時が3日前のものをフィルターで表示したい

U3D4
Tera Contributor

コミュニティの皆様

申請テーブルを作成し、申請日時(日付/時刻)フィールドの値が、

現在の日付の3日以前のものをフィルターして表示させようとしております。

 

申請日時が3日以前のレコードをいくつか用意し、

添付画像2のように、フィルターを設定してみたところ、

3日前の条件に当てはまるはずのものが、抽出されておりませんでした。

 

画像1.10/29の15:00に、3日前の10/26のレコードをいくつか用意

U3D4_0-1730185503423.png

 

画像2.フィルター条件を以下のように設定

U3D4_1-1730185636706.png

 

どうやら、10/29の15:00にフィルターした場合、

10/26の15:01以降は3日前として判定されないようです。

 

日付のみを見て3日前と判定してほしいのですが、

こちらをフィルターする方法がわかりません。

何か良い方法があれば、ご教示いただけますと幸いです。

1 件の受理された解決策

ユーザーのタイムゾーンとシステムのタイムゾーンを混同しないように注意してくださいね。
ユーザープリファレンス・ユーザー設定のタイムゾーンは自由に変えて問題ありません。ユーザーの必要なタイムゾーンしてください。

そして検索もユーザーのタイムゾーンに合わせて3日間を判定できるように作られています。
リストビューはユーザーのタイムゾーンで表示されています。

ServiceNowの内部は標準時間になっています。ユーザーのタイムゾーンから変換して検索してくれています。

私が紹介したScriptを使えば、ユーザーのタイムゾーン 日本時間で何日前なのかを処理できます。そのため、システムが標準時間であっても、この方法なら、日本時間の3日間の判定が正しく出来ます。
少し難しいですが日本時間に設定したユーザーと、別のタイムゾーンのユーザーでは、リストビューの時間が変わりますし、3日間の区切りの時間も変わります。ユーザーのタイムゾーンなのでそう言うものです。

Docs GlideSystem - グローバル

GlideSystem - daysAgoEnd(数値 days) 指定された日数前の 1 日の終わりの日時を返します。

GlideSystem - daysAgoStart(数値 days) 指定された日数前の 1 日の始まりの日時を返します。

 

Scriptは難しいと言うことであれば、7日の選択肢はあるので、3日よりは少々多いですが、運用的に許されるなら7日することが簡単です。

元の投稿で解決策を見る

14件の返信14

ありがとうございます。

本当は[after]で設定したいのですが、「3日以前」の選択肢がなく、

こちらの演算子では実現が難しそうです。。

iwai
Giga Sage

relative では現在時刻からの相対時間なので現在時刻に影響を受けてしまいます。
リストビューの検索設定ではある程度決められた条件しか組めないですが、検索文字列を直接作成してURLに指定することで、細かい設定が可能です。


https://<InstanceName>.service-now.com/sc_req_item_list.do?sysparm_query=opened_at<=javascript&colon;gs.daysAgoEnd(3) 
("&colon;"は :  に読み替えてください、投稿時の問題です)

sysparm_queryの後ろ側がQuery文字列という検索条件でJavaScriptで指定もできます。

 

Docs URL を使用したレコードまたはモジュールへの移動

 

opened_at<=gs.daysAgoEnd(3)

この指定は開始日(opened_at)が3日前ユーザーのタイムゾーンの終了時間
例: 現在時刻が日本時間 2024年10月29日 20時47分 の場合、日本時間2024年10月26日 23:59:59 (UTC 2024-10-26 14:59:59)
を指定しています。

Docs GlideSystem - グローバル

GlideSystem - daysAgoEnd(数値 days) 指定された日数前の 1 日の終わりの日時を返します。

GlideSystem - daysAgoStart(数値 days) 指定された日数前の 1 日の始まりの日時を返します。


このような検索条件を設定したURLを作成して、メニューなどの設定に使うことで、柔軟な日付指定ができます。

U3D4
Tera Contributor

ありがとうございます。

>検索文字列を直接作成してURLに指定することで、細かい設定が可能です。

フィルター条件ではなく、URLを指定する方法もあるのですね。

こちらの方法も検討させていただきます!うまくいかなさそうであれば改めてご質問させてください。

ユーザーのタイムゾーンとシステムのタイムゾーンを混同しないように注意してくださいね。
ユーザープリファレンス・ユーザー設定のタイムゾーンは自由に変えて問題ありません。ユーザーの必要なタイムゾーンしてください。

そして検索もユーザーのタイムゾーンに合わせて3日間を判定できるように作られています。
リストビューはユーザーのタイムゾーンで表示されています。

ServiceNowの内部は標準時間になっています。ユーザーのタイムゾーンから変換して検索してくれています。

私が紹介したScriptを使えば、ユーザーのタイムゾーン 日本時間で何日前なのかを処理できます。そのため、システムが標準時間であっても、この方法なら、日本時間の3日間の判定が正しく出来ます。
少し難しいですが日本時間に設定したユーザーと、別のタイムゾーンのユーザーでは、リストビューの時間が変わりますし、3日間の区切りの時間も変わります。ユーザーのタイムゾーンなのでそう言うものです。

Docs GlideSystem - グローバル

GlideSystem - daysAgoEnd(数値 days) 指定された日数前の 1 日の終わりの日時を返します。

GlideSystem - daysAgoStart(数値 days) 指定された日数前の 1 日の始まりの日時を返します。

 

Scriptは難しいと言うことであれば、7日の選択肢はあるので、3日よりは少々多いですが、運用的に許されるなら7日することが簡単です。

U3D4
Tera Contributor

対象レコードを表示させるためのモジュールを作成し、ご教示いただきました通り、検索文字列を直接作成してURLに指定することで、期待通りのフィルターを実装をすることができました!

サポートいただき、ありがとうございます!