Setup der Datums-/Uhrzeiteingabe für verschiedene Aktionselementtypen

  • Freigeben Version: Zurich
  • Aktualisiert 31. Juli 2025
  • 2 Minuten Lesedauer
  • Nachdem Sie einen Eingabeformularbildschirm erstellt und sein IncludeTimezone-Attribut für Datums-/Uhrzeiteingaben definiert haben, müssen Sie den Eingabeformularbildschirm einem Aktionselement zuordnen. Wie Sie die Datums-/Uhrzeiteingaben einrichten, hängt vom Typ des verwendeten Aktionselements ab.

    Aktionselementtyp Einrichten
    Neu Oder Aktualisieren Stellen Sie sicher, dass Datums-/Uhrzeiteingaben Datums-/Uhrzeitfeldern in der Back-End-Instanz zugeordnet sind. Die Back-End-Instanz verwendet die vom Eingabeformularbildschirm gesendeten Zeitzoneninformationen des Geräts. Dann konvertiert die Back-End-Instanz den Datums-/Uhrzeitwert in koordinierte Weltzeit (UTC/GMT), bevor sie in der Datenbank gespeichert wird.
    Skript Sie müssen den Eingabewert für Datum/Uhrzeit in UTC/GMT konvertieren. Weitere Informationen finden Sie in den folgenden Skriptbeispielen. Für weitere Informationen zum Skripting im Allgemeinen für ServiceNow, Siehe Skripting
    Hinweis:
    Je nach betroffenem Anwendungsfall sind möglicherweise Anpassungen erforderlich.

    GlideDateTime-Skriptbeispiel

    Im folgenden Beispiel werden Felder von festgelegt GlideDateTime Typ.

    /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);
    			}
    		}
    • In diesem Beispiel ist Expected_Start Und Estimated_end Felder werden basierend auf den Werten der entsprechenden Datums-/Uhrzeiteingaben von bearbeitet Erwarteter Start Und GeschätzteEnde .
    • Da das Attribut IncludeTimezone auf festgelegt ist Wahr , Parm_input.erwartetStart Variable gibt eine Datums-/Uhrzeitzeichenfolge im Format JJJJ-MM-TTThh:mm:ss.sssTZD zurück. Damit das System dieses Datums-/Uhrzeitformat verarbeiten kann, initialisieren Sie ein GlideDateTime-Objekt, indem Sie die Zeichenfolge an den Konstruktor übergeben.
    • Weil Expected_Start Und Estimated_end Sind Datums-/Uhrzeitspalten in der Datenbank, können Sie direkt aufrufen GlideRecord.setValue() Und übergeben GlideDateTime Objekt als Wert.

    GlideScheduleDateTime-Skriptbeispiel

    Im folgenden Beispiel werden Felder von festgelegt GlideScheduleDateTime Typ.

    /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);
    • In diesem Beispiel ist Start_date_time Und End_date_time Felder eines Zeitplaneintrags werden basierend auf den Werten der entsprechenden Datums-/Uhrzeiteingaben von festgelegt Start_time Und End_time .
    • Weil IncludeTimezoneAttribut ist auf festgelegt Wahr , Parm_input.Start_time Variable gibt eine Datums-/Uhrzeitzeichenfolge im Format JJJJ-MM-TTThh:mm:ss.sssTZD zurück. Damit das System dieses Datums-/Uhrzeitformat verarbeiten kann, initialisieren Sie ein GlideDateTime Objekt, indem die Zeichenfolge an den Konstruktor übergeben wird.
    • Weil Start_date_time Und End_date_time Sind keine Datums-/Uhrzeitspalten in der Datenbank (stattdessen sind sie Zeitplandatums-/Uhrzeitspalten), ihr Wert wird mit festgelegt gr.Start_date_time = {date_time_value} .
      Hinweis:
      Die Date_time_value Wird erwartet, dass er sich in der Zeitzone des Anwenderprofils befindet (der angegebene Wert wird voraussichtlich sein) Anzeigewert Von GlideDateTime ). Diese Konfiguration ermöglicht den Aufruf von GlideDateTime.getDisplayValueIntern() Methode, die eine Datums-/Uhrzeitzeichenfolge im internen Format JJJJ-MM-TT hh:mm:ss und in der Zeitzone des Anwenderprofils zurückgibt.