さまざまなアクションアイテムタイプの日付/時刻入力設定
入力フォーム画面を作成し、日付/時刻入力用のその IncludeTimezone 属性を定義した後、入力フォーム画面をアクションアイテムに関連付ける必要があります。日付/時刻の入力の設定方法は、使用するアクションアイテムのタイプによって異なります。
| アクションアイテムタイプ | 設定 |
|---|---|
| 新規 または 更新 | 日付/時刻の入力がバックエンドインスタンスの日付/時刻フィールドにマッピングされていることを確認します。バックエンドインスタンスは、入力フォーム画面から送信されたデバイスのタイムゾーン情報を使用します。次に、バックエンドインスタンスは、日付/時刻値を協定世界時 (UTC/GMT) に変換してからデータベースに保存します。 |
| スクリプト | 日付/時刻の入力値を UTC/GMT に変換する必要があります。詳細については、次のスクリプトの例を参照してください。のServiceNow一般的なスクリプティングの詳細については、「スクリプティング」を参照してください。 注: 関連するユースケースに応じて、カスタマイズが必要になる場合があります。 |
GlideDateTime スクリプトの例
次の例では、 GlideDateTime 型のフィールドを設定します。
/sys_sg_write_back_action_step.do?sys_id=b390e6a7c1120110fa9b5abd6a7dbb64
(function WriteBackAction(parm_input, parm_variable, actionResult) {
var shortDescription = parm_input.shortdescription;
var scheduledStart = parm_input.expectedstart;
var estimatedEnd = parm_input.estimatedend;
var description = parm_input.description;
var wotSysId = parm_variable['sys_id'];
var wotGr = new GlideRecord("wm_task");
wotGr.get(wotSysId);
wotGr.setValue("description", description);
wotGr.setValue("short_description", shortDescription);
var newEnd = new GlideDateTime(estimatedEnd);
var endMS = newEnd.getNumericValue();
var newStart = new GlideDateTime(scheduledStart);
var startMS = newStart.getNumericValue();
if (endMS - startMS < 0) {
gs.addErrorMessage(gs.getMessage("The start date should come before the end date"));
} else {
//set the time on screen all the time
wotGr.setValue("expected_start", newStart);
wotGr.setValue("estimated_end", newEnd);
var duration = endMS - startMS;
var newDur = new GlideDuration();
newDur.setValue(duration);
wotGr.setValue("estimated_work_duration", newDur);
//check double booking no matter which field is changed. set needs_attention so that dispatcher can review it.
var info = new global.FSMAgentInfo(gs.getUserID());
var doubleBooking = info.allowAgentDoubleBookingTask();
if (doubleBooking){
var conflict = !(new global.SMDDateValidation().checkSchedulingConflictSimple(wotGr));
if (conflict) {
//BR Date Checks will display conflict message as Warning: {0} has been scheduled for a time the assigned
//only when time change.
wot.Gr.setValue("needs_attention", true);
}
}
- この例では、
expected_startフィールドとestimated_endフィールドは、expectedstartとestimatedendの対応する日付/時刻入力の値に基づいて編集されます。 - IncludeTimezone 属性が true に設定されているため、
parm_input.expectedstart変数は YYYY-MM-DDThh:mm:ss.sssTZD 形式の日付/時刻文字列を返します。システムでこの日付/時刻形式を処理できるようにするには、文字列をコンストラクターに渡して GlideDateTime オブジェクトを初期化します。 expected_startとestimated_endはデータベース内の日時列であるため、GlideRecord.setValue() を直接呼び出してGlideDateTimeオブジェクトを値として渡すことができます。
GlideScheduleDateTime スクリプトの例
次の例では、 GlideScheduleDateTime タイプのフィールドを設定します。
/sys_sg_write_back_action_item.do?sys_id=539b20d6b72120107be0e34e9e11a971
(function WriteBackAction(parm_input,parm_variable,actionResult) {
var personalSchedule = new global.FSMMobileUtil().getUserSchedule(parm_variable.user);
if (gs.nil(personalSchedule)) {
gs.error("create_event: personal schedule id is not found.");
gs.addErrorMessage(gs.getMessage("Create Event Failed"));
return;
}
if(gs.nil(parm_input.type))
parm_input.type = "";
var scheduleEntryGR = new GlideRecord("cmn_schedule_span");
scheduleEntryGR.initialize();
scheduleEntryGR.setValue("name", parm_input.name);
var start_time = new GlideDateTime(parm_input.start_time);
scheduleEntryGR.start_date_time = start_time.getDisplayValueInternal();
var end_time = new GlideDateTime(parm_input.end_time);
scheduleEntryGR.end_date_time = end_time.getDisplayValueInternal();
scheduleEntryGR.setValue("show_as", parm_input.show_as);
scheduleEntryGR.setValue("type", parm_input.type);
scheduleEntryGR.setValue("user", parm_variable.user);
scheduleEntryGR.setValue("schedule", personalSchedule);
scheduleEntryGR.setValue("repeat_type", parm_input.repeats);
if(parm_input.repeats!=""){
scheduleEntryGR.setValue("repeat_count", parm_input.repeat_every);
scheduleEntryGR.repeat_until = parm_input.repeat_until;
}
scheduleEntryGR.insert();
})(parm_input,parm_variable,actionResult);
- この例では、スケジュールエントリの
start_date_timeフィールドとend_date_timeフィールドは、対応する日付/時刻入力の start_time とend_timeの値に基づいて設定されます。 - 属性が IncludeTimezonetrue に設定されているため、
parm_input.start_time変数は YYYY-MM-DDThh:mm:ss.sssTZD 形式の日付/時刻文字列を返します。システムでこの日付/時刻形式を処理できるようにするには、文字列をコンストラクターに渡してGlideDateTimeオブジェクトを初期化します。 start_date_timeとend_date_timeはデータベース内の日時列ではなく (代わりにスケジュール日付/時刻列) であるため、値はgr.start_date_time = {date_time_value}で設定されます。注:date_time_valueはユーザープロファイルのタイムゾーンである必要があります (指定された値はGlideDateTimeの表示値である必要があります)。この構成により、 GlideDateTime.getDisplayValueInternal() メソッドを呼び出すことができます。このメソッドは、YYYY-MM-DD hh:mm:ss の内部形式とユーザープロファイルのタイムゾーンで日付/時刻の文字列を返します。