Configuration de l’entrée de date/heure pour différents types d’élément d’action
Après avoir créé un écran de formulaire d’entrée et défini son attribut IncludeTimezone pour les entrées de date/heure, vous devez associer l’écran du formulaire d’entrée à un élément d’action. La façon dont vous configurez les entrées de date/heure dépend du type d’élément d’action que vous utilisez.
| Type d’élément d’action | Configurer |
|---|---|
| Nouveau ou Mettre à jour | Assurez-vous que les entrées date/heure sont mappées aux champs de date/heure dans l’instance principale. L’instance principale utilise les informations de fuseau horaire de l’appareil envoyées par l’écran du formulaire d’entrée. Ensuite, l’instance principale convertit la valeur date/heure en heure universelle coordonnée (UTC/GMT) avant de l’enregistrer dans la base de données. |
| Script | Vous devez convertir la valeur d’entrée date/heure en UTC/GMT. Consultez les exemples de script suivants pour plus d’informations. Pour plus d’informations sur les scripts en général pour ServiceNow, voir Scripting Remarque : Des personnalisations peuvent être nécessaires en fonction du cas d’utilisation impliqué. |
Exemple de script GlideDateTime
L’exemple suivant définit les champs du type GlideDateTime .
/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);
}
}
- Dans cet exemple, les champs
expected_startetestimated_endsont mis à jour en fonction des valeurs de leurs entrées date/heure correspondantesexpectedstartetestimatedend. - Étant donné que l’attribut IncludeTimezone est défini sur true, la variable
parm_input.expectedstartrenvoie une chaîne de date/heure au format AAAA-MM-JJThh :mm :ss.sssTZD. Pour permettre au système de gérer ce format date/heure, initialisez un objet GlideDateTime en transmettant la chaîne dans le constructeur. - Étant donné
que expected_startetestimated_endsont des colonnes Date/Heure dans la base de données, vous pouvez appeler directement GlideRecord.setValue() et transmettre l’objetGlideDateTimecomme valeur.
Exemple de script GlideScheduleDateTime
L’exemple suivant définit les champs du type GlideScheduleDateTime .
/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);
- Dans cet exemple, les champs
start_date_timeetend_date_timed’une entrée de calendrier sont définis en fonction des valeurs de leurs entrées date/heure correspondantesde start_timeetend_time. - Étant donné que l’attribut IncludeTimezone est défini sur vrai, la variable
parm_input.start_timerenvoie une chaîne de date/heure au format AAAA-MM-JJThh :mm :ss.sssTZD. Pour permettre au système de gérer ce format date/heure, initialisez un objetGlideDateTimeen transmettant la chaîne dans le constructeur. - Étant donné
que start_date_timeetend_date_timene sont pas des colonnes Date/Heure dans la base de données (ce sont plutôt des colonnes Date/Heure de planification), leur valeur est définie avecgr.start_date_time = {date_time_value}.Remarque :Ledate_time_valuedoit se trouver dans le fuseau horaire du profil d’utilisateur (la valeur fournie doit être lavaleur d’affichaged’unGlideDateTime). Cette configuration permet d’appeler la méthode GlideDateTime.getDisplayValueInternal(), qui renvoie une chaîne date/heure au format interne AAAA-MM-JJ hh :mm :ss et dans le fuseau horaire du profil d’utilisateur.