Setup der Datums-/Uhrzeiteingabe für verschiedene Aktionselementtypen
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.expectedstarteine 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 dasGlideDateTime-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_timeundend_date_timeeines Zeitplaneintrags basierend auf den Werten der entsprechenden Datums-/Uhrzeiteingaben start_timeundend_time festgelegt. - Da das Attribut IncludeTimezone auf truefestgelegt ist, gibt die Variable
parm_input.start_timeeine Datums-/Uhrzeitzeichenfolge im Format JJJJ-MM-TTThh:mm:ss.sssTZD zurück. Damit das System dieses Datums-/Uhrzeitformat verarbeiten kann, initialisieren Sie einGlideDateTime-Objekt, indem Sie die Zeichenfolge an den Konstruktor übergeben. - Da
start_date_timeundend_date_timekeine Datums-/Zeitspalten in der Datenbank sind (stattdessen sind sie Zeitplandatum/-zeit-Spalten), wird ihr Wert mitgr.start_date_time = {date_time_value} festgelegt.Hinweis:date_time_valueliegt voraussichtlich in der Zeitzone des Benutzerprofils (es wird erwartet, dass der angegebeneWertder Anzeigewert einerGlideDateTime 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.