Setup der Datums-/Uhrzeiteingabe für verschiedene Aktionselementtypen

  • Freigeben Version: Xanadu
  • Aktualisiert 1. August 2024
  • 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ätztesEnde bearbeitet.
    • 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_time festgelegt.
    • 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 GlideDateTime sein). 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.