Setup der Datums-/Uhrzeiteingabe für verschiedene Aktionselementtypen

  • Freigeben Version: Yokohama
  • Aktualisiert 30. Januar 2025
  • 2 Minuten Lesedauer
  • Nachdem Sie einen Eingabeformularbildschirm erstellt und dessen IncludeTimezone-Attribut für Datums-/Uhrzeiteingaben definiert haben, müssen Sie den Eingabeformularbildschirm einem Aktionselement zuordnen. Wie Sie die Datums-/Uhrzeiteingaben einrichten, hängt von der Art 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 Gerätezeitzoneninformationen. Dann konvertiert die Back-End-Instanz den Datums-/Uhrzeitwert in Coordinated Universal Time (UTC/GMT), bevor sie in der Datenbank gespeichert wird.
    Skript Sie müssen den Datums-/Uhrzeit-Eingabewert in UTC/GMT konvertieren. Weitere Informationen finden Sie in den folgenden Skriptbeispielen. Weitere Informationen zum allgemeinen Skripting für ServiceNowfinden Sie unter Skripting
    Hinweis:
    Je nach Anwendungsfall sind möglicherweise Anpassungen erforderlich.

    GlideDateTime-Skriptbeispiel

    Im folgenden Beispiel werden Felder vom Typ „GlideDateTime“ festgelegt.

    /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 werden die Felder erwarteter Start und geschätztes Ende basierend auf den Werten der entsprechenden Datums-/Uhrzeiteingaben von erwarteter Start und geschätztes Endebearbeitet.
    • Da das Attribut IncludeTimezone auf truefestgelegt ist, gibt die Variable „parm_input.expectedstart“ eine Datums-/Uhrzeit-Zeichenfolge im Format JJJJ-MM-DDThh: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.
    • Da „expected_start“ und „ estimated_end “ Datums-/Uhrzeitspalten in der Datenbank sind, können Sie „GlideRecord.setValue()“ direkt aufrufen und das GlideDateTime- Objekt als Wert übergeben.

    Skriptbeispiel für GlideScheduleDateTime

    Im folgenden Beispiel werden Felder vom Typ „GlideScheduleDateTime“ festgelegt.

    /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 werden die Felder start_date_time und end_date_time eines Zeitplaneintrags basierend auf den Werten der entsprechenden Datums-/Uhrzeiteingaben start_time und end_timefestgelegt.
    • Da das Attribut IncludeTimezone auf truefestgelegt ist, gibt die Variable „parm_input.start_time“ eine Datums-/Uhrzeit-Zeichenfolge im Format JJJJ-MM-DDThh: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.
    • Da start_date_time und end_date_time keine Datums-/Uhrzeit-Spalten in der Datenbank sind (stattdessen sind sie Zeitplandatums-/-uhrzeitspalten), wird ihr Wert mit gr.start_date_time = {date_time_value}festgelegt.
      Hinweis:
      Für „ date_time_value“ wird erwartet, dass es sich in der Zeitzone des Anwenderprofils befindet (der angegebene Wert muss der Anzeigewert einer GlideDateTimesein). Diese Konfiguration ermöglicht den Aufruf der Methode „GlideDateTime.getDisplayValueInternal()“, die eine Datums-/Uhrzeitzeichenfolge im internen Format JJJJ-MM-TT hh:mm:ss und in der Zeitzone des Anwenderprofils zurückgibt.