Setup der Datums-/Uhrzeiteingabe für verschiedene Aktionselementtypen

  • Freigeben Version: Washingtondc
  • Aktualisiert 1. Februar 2024
  • 2 Minuten Lesedauer
  • Nachdem Sie einen Eingabeformular-Bildschirm erstellt und das Attribut IncludeTimezone für Datums-/Uhrzeiteingaben definiert haben, müssen Sie den Eingabeformular-Bildschirm 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 werden. Die Back-End-Instanz verwendet die vom Eingabeformular-Bildschirm gesendeten Gerätezeitzoneninformationen. Dann konvertiert die Back-End-Instanz den Datums-/Uhrzeitwert in die koordinierte Weltzeit (UTC/GMT), bevor er 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 zur Skripterstellung im Allgemeinen für ServiceNowfinden Sie unter Skripterstellung
    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 „ expected_start“ und „estimated_end “ basierend auf den Werten der entsprechenden Datums-/Uhrzeiteingaben von „ expectedstart “ und „estimatedend“ bearbeitet.
    • Da das Attribut IncludeTimezone auf truefestgelegt ist, gibt die Variable parm_input.expectedstart 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.
    • 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.

    GlideScheduleDateTime-Skriptbeispiel

    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_time festgelegt.
    • Da das Attribut IncludeTimezone auf truefestgelegt ist, gibt die Variable parm_input.start_time 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.
    • Da start_date_time und end_date_time keine Datums-/Zeitspalten in der Datenbank sind (stattdessen sind sie Zeitplandatum/-zeit-Spalten), wird ihr Wert mit gr.start_date_time = {date_time_value} festgelegt.
      Hinweis:
      date_time_value liegt voraussichtlich in der Zeitzone des Benutzerprofils (es wird erwartet, dass der angegebene Wert der Anzeigewert einer GlideDateTime ist). 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 Benutzerprofils zurückgibt.