Configuration de l’entrée de date/heure pour différents types d’élément d’action

  • Rversion finale: Zurich
  • Mis à jour 31 juil. 2025
  • 3 minutes de lecture
  • 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_start et estimated_end sont mis à jour en fonction des valeurs de leurs entrées date/heure correspondantes expectedstart et estimatedend.
    • Étant donné que l’attribut IncludeTimezone est défini sur true, la variable parm_input.expectedstart renvoie 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_start et estimated_end sont des colonnes Date/Heure dans la base de données, vous pouvez appeler directement GlideRecord.setValue() et transmettre l’objet GlideDateTime comme 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_time et end_date_time d’une entrée de calendrier sont définis en fonction des valeurs de leurs entrées date/heure correspondantes de start_time et end_time.
    • Étant donné que l’attribut IncludeTimezone est défini sur vrai, la variable parm_input.start_time renvoie 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 start_date_time et end_date_time ne 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 avec gr.start_date_time = {date_time_value}.
      Remarque :
      Le date_time_value doit se trouver dans le fuseau horaire du profil d’utilisateur (la valeur fournie doit être la valeur d’affichage d’un GlideDateTime). 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.