🕰️

BusinessRuleでのGlideDateTimeの動作について考えてみる[ServiceNow]

2023/03/30に公開

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フォローもよろしくお願いいたします。
https://twitter.com/kouki__ito

Discussion