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

  • Rversion finale: Xanadu
  • Mis à jour 1 août 2024
  • 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 configuration des entrées 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 de 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 temps universel coordonné (UTC/GMT) avant de l’enregistrer dans la base de données.
    Script Vous devez convertir la valeur d’entrée de 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 , reportez-vous à ServiceNowla section Scripting
    Remarque :
    Des personnalisations peuvent être nécessaires en fonction du cas d’utilisation concerné.

    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 modifiés en fonction des valeurs de leurs entrées de 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 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 de date et d’heure dans la base de données, vous pouvez directement appeler 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 true, la variable parm_input.start_time renvoie une chaîne 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 de date/heure dans la base de données (ce sont plutôt des colonnes de date/heure de calendrier), leur valeur est définie par gr.start_date_time = {date_time_value}.
      Remarque :
      La date_time_value est censée être dans le fuseau horaire du profil d’utilisateur (la valeur fournie est censée ê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.