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

  • Rversion finale: Washingtondc
  • Mis à jour 1 févr. 2024
  • 3 minutes de lecture
  • Après avoir créé un écran du formulaire d’entrée et défini son attribut IncludeTimezone pour les entrées de date/d’heure, vous devez associer l’écran du formulaire d’entrée à un élément d’action. La configuration des entrées de date/d’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 heure universelle coordonnée (UTC/GMT) avant de l’enregistrer dans la base de données.
    Script Vous devez convertir la valeur en entrée de date/heure en UTC/GMT. Consultez les exemples de script suivants pour plus d’informations. Pour plus d’informations sur le scripting en général pour ServiceNow, voir Scripting
    Remarque :
    Des personnalisations peuvent être nécessaires en fonction du cas d’utilisation concerné.

    Exemple de script GlideDateTime

    L’exemple suivant définit des 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 date/heure correspondantes expectedstart et estimatedend.
    • Étant donné que l’attribut IncludeTimezone est défini sur vrai, 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 de date/heure, initialisez un objet GlideDateTime en transmettant la chaîne au constructeur.
    • Étant donné que expected_start et estimated_end sont des colonnes Date/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 planification sont définis en fonction des valeurs de leurs entrées date/heure correspondantes de start_time et d’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 de date/heure, initialisez un objet GlideDateTime en transmettant la chaîne au constructeur.
    • Étant donné que start_date_time et end_date_time ne sont pas des colonnes Date/Heure dans la base de données (il s’agit plutôt de colonnes Date/Heure de planification), leur valeur est définie sur gr.start_date_time = {date_time_value}.
      Remarque :
      L’date_time_value est censée se trouver dans le fuseau horaire du profil d’utilisateur (la valeur fournie devrait être la valeur d’affichage d’une valeur GlideDateTime). Cette configuration permet d’appeler la méthode GlideDateTime.getDisplayValueInternal(), qui renvoie une chaîne de date/heure au format interne AAAA-MM-JJ hh :mm :ss et dans le fuseau horaire du profil d’utilisateur.