- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
07-10-2022 11:15 PM
解決済! 解決策の投稿を見る。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
07-11-2022 08:44 AM
javascript:gs.dateGenerate(日付,時間) この形式で使用します。
javascript:gs.dateGenerate(fd_data._1__get_catalog_variables.work_start)
これでは日付しか渡していないことになります。この関数は日付だけだと空白を返します。そのため正しいQueryができません。
ただし今回は全く別の問題があります。
そのVariablesのwork_startとwork_endは日時タイプの変数だとすると、内部値はUTC 時間(時差なし)で保存されているはずです。
dateGenerate関数はユーザー時間(例:日本時間+9)からUTC時間(時差なし)に変換する関数です。
リストビューの検索時にこれを使うのはリストビューで手動で入力するのが日本時間のため、UTC時間に変換して検索するためです。
work_startが日時タイプの場合はUTC時間で格納されているため、dateGenerate関数を使う必要がありません。
return 'active=true^opened_at>='+fd_data._1__get_catalog_variables.work_start+'^opened_at<='+fd_data._1__get_catalog_variables.work_end;
今回の問題とは別ですが、Scriptで検索していると言うことは、通常のFilterでwork_startを渡しても正しく検索しなかったためScriptを使っていると予想します。FlowをTest実行してみると、通常のFilterだと何故か表示値(日本時間+9)で検索してしまいます。そのため意図した検索になりません。なんだか腑に落ちない仕様です。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
07-11-2022 08:44 AM
javascript:gs.dateGenerate(日付,時間) この形式で使用します。
javascript:gs.dateGenerate(fd_data._1__get_catalog_variables.work_start)
これでは日付しか渡していないことになります。この関数は日付だけだと空白を返します。そのため正しいQueryができません。
ただし今回は全く別の問題があります。
そのVariablesのwork_startとwork_endは日時タイプの変数だとすると、内部値はUTC 時間(時差なし)で保存されているはずです。
dateGenerate関数はユーザー時間(例:日本時間+9)からUTC時間(時差なし)に変換する関数です。
リストビューの検索時にこれを使うのはリストビューで手動で入力するのが日本時間のため、UTC時間に変換して検索するためです。
work_startが日時タイプの場合はUTC時間で格納されているため、dateGenerate関数を使う必要がありません。
return 'active=true^opened_at>='+fd_data._1__get_catalog_variables.work_start+'^opened_at<='+fd_data._1__get_catalog_variables.work_end;
今回の問題とは別ですが、Scriptで検索していると言うことは、通常のFilterでwork_startを渡しても正しく検索しなかったためScriptを使っていると予想します。FlowをTest実行してみると、通常のFilterだと何故か表示値(日本時間+9)で検索してしまいます。そのため意図した検索になりません。なんだか腑に落ちない仕様です。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
07-11-2022 09:57 PM
返信ありがとうございます。
頂いた内容を参考に以下スクリプトを作成しました。
var query = "active=true^work_start<="+fd_data._1__get_catalog_variables.work_start +"^work_end>="+fd_data._1__get_catalog_variables.work_end;
return query
fd_dataの中身をログで確認したところ、ユーザー時間が正しく格納されていました。
しかし以下画像の通り、Look Up Reocordsに作成したスクリプトを記載したところ、work_startがUTC時間となってしまいます。
解決方法をご存知でしたら教えていただけると幸いです。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
07-12-2022 01:30 AM
それが正しい動作になります。
Queryによる検索はUTCで行います。
表示はユーザー時間で表示します。
Recordに格納されているデータはUTCで、表示するときにユーザー時間になります。
そして Look Up Records のQueryはUTCで検索します。
Log の メッセージについては、すこし小難しい話になりますが、Scriptに記述しているその変数は表示値と内部値の両方を持った状態です。そのため表示するときに表示値を表示するか内部値を表示するかはServiceNow側の仕様によって決まります。Log メッセージの場合は表示値を表示しています。