Setup der Datums-/Uhrzeiteingabe für verschiedene Aktionselementtypen
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 StartundgeschätztesEnde basierend auf den Werten der entsprechenden Datums-/Uhrzeiteingaben vonerwarteterStart undgeschä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 dasGlideDateTime-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_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_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 einGlideDateTime-Objekt, indem Sie die Zeichenfolge an den Konstruktor übergeben. - Da
start_date_timeundend_date_timekeine Datums-/Uhrzeit-Spalten in der Datenbank sind (stattdessen sind sie Zeitplandatums-/-uhrzeitspalten), wird ihr Wert mitgr.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 derAnzeigewert 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.