さまざまなアクションアイテムタイプの日付/時刻入力セットアップ

  • リリースバージョン: Zurich
  • 更新日 2025年07月31日
  • 所要時間:8分
  • 入力フォーム画面を作成し、日付/時刻入力の IncludeTimezone 属性を定義したら、入力フォーム画面をアクションアイテムに関連付ける必要があります。日付/時刻入力の設定方法は、使用するアクションアイテムのタイプによって異なります。

    アクションアイテムタイプ 設定
    新規 または 更新 日付/時刻入力がバックエンドインスタンスの日付/時刻フィールドにマッピングされていることを確認します。バックエンドインスタンスは、入力フォーム画面によって送信されたデバイスタイムゾーン情報を使用します。次に、バックエンドインスタンスは、日付/時刻の値を協定世界時 (UTC/GMT) に変換してから、データベースに保存します。
    Script (スクリプト) 日付/時刻の入力値を 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 フィールドは、対応する日付/時刻入力の expectedstartestimatedend の値に基づいて編集されています。
    • IncludeTimezone 属性が true に設定されているため、 parm_input.expectedstart 変数は YYYY-MM-DDThh:mm:ss.sssTZD 形式の日付/時刻文字列を返します。システムでこの日付/時刻形式を処理できるようにするには、文字列をコンストラクターに渡して GlideDateTime オブジェクトを初期化します。
    • expected_startestimated_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_timeend_time の値に基づいて設定されます。
    • IncludeTimezone属性が true に設定されているため、parm_input.start_time 変数は YYYY-MM-DDThh:mm:ss.sssTZD の形式で日付/時刻文字列を返します。システムでこの日付/時刻形式を処理できるようにするには、文字列をコンストラクターに渡して GlideDateTime オブジェクトを初期化します。
    • start_date_timeend_date_timeはデータベース内の日付と時刻の列ではないため (代わりに、スケジュールの日付/時刻の列です)、それらの値は gr.start_date_time = {date_time_value} で設定されます。
      注:
      date_time_valueは、ユーザープロファイルのタイムゾーン内である必要があります (指定された値は GlideDateTimeの表示値である必要があります)。この構成により、 GlideDateTime.getDisplayValueInternal() メソッドを呼び出すことができます。このメソッドは、YYYY-MM-DD hh:mm:ss の内部形式で、ユーザープロファイルのタイムゾーンで日付/時刻文字列を返します。