🕰️
BusinessRuleでのGlideDateTimeの動作について考えてみる[ServiceNow]
TL;DR
BusinessRuleのActionsから代入指定する場合は
javascript:new GlideDateTime().getDisplayValue();
BusinessRuleのAdvanceViewでScriptを用いて代入する場合は
var gdt = new GlideDateTime();
Situation
BusinessRuleを用いて特定条件でのレコード更新時に現在時刻を代入する。Actionsから指定する方法と、Scriptで指定する方法で少し異なるため躓いた。具体的にはActionsから
javascript:new GlideDateTime();
と入力した場合、最終的には-9h(設定が日本時間の場合)で代入されるため注意が必要。
Summary
※あくまで動作をもとにした筆者の予想です。
- Formから時刻を入力した場合
ユーザのタイムゾーンで入力→入力をUTCへ変換→UTCで更新→再度ユーザのタイムゾーンで表示 - BusinessRuleのActionsで代入した場合
ユーザのタイムゾーン扱いで入力→入力をUTCへ変換*1→UTCで更新→再度ユーザのタイムゾーンで表示 - BusinessRuleのScriptで代入した場合
スクリプトからUTCで入力→そのままUTCで更新→ユーザのタイムゾーンで表示
BusinessRuleのActionsから
javascript:new GlideDateTime();
とした場合、*1のステップで既にUTCのものから-9h(日本時間の場合)されるのが異なった時間が代入される原因と予想。
よって正しくは
javascript:new GlideDateTime().getDisplayValue();
とする。
間違いがあればご指摘ください。
フォロー、Twitterフォローもよろしくお願いいたします。
Discussion