Scripts de planification utiles

  • Rversion finale: Xanadu
  • Mis à jour 1 août 2024
  • 6 minutes de lecture
  • Un script de règle métier spécifie les actions entreprises par la règle métier. Les scripts incluent généralement des variables globales prédéfinies pour référencer des éléments de votre système, tels que l’enregistrement actuel. Les variables globales sont disponibles pour toutes les règles métier.

    Avertissement :
    La personnalisation décrite ici a été développée pour une utilisation dans des instances spécifiques, et n'est pas prise en charge par Now Support. Cette méthode est fournie telle quelle et doit être testée rigoureusement avant d'être implémentée. Publiez toutes les questions et commentaires concernant cette personnalisation dans notre forum communautaire.

    Calculer la durée selon une planification

    Type : avant mettre à jour/insérer une règle métier.

    Description : une durée d’activité calcule la durée d’ouverture à fermeture d’un incident en fonction de la création et de l’utilisation de calendriers particuliers. S’il n’y a pas de calendrier spécifié, le script utilisera simplement le premier calendrier renvoyé par la requête.

    Exemple de script :

    L’exemple ci-dessous définit la durée résolue lorsque l’état de l’incident passe à l’état Résolu.
    var gr_rec = new GlideRecord('incident');
    gr_rec.get('ed92e8d173d023002728660c4cf6a7bc');
    if (gr_rec.incident_state == 6) {
    var dur = calcDurationSchedule(gr_rec.opened_at, gr_rec.sys_updated_on);
    }
     
    function calcDurationSchedule(start, end){ 
      // Get the user   
      var usr = new GlideRecord('sys_user');
      usr.get(gs.getUserID());
      // Create schedule - pass in the sys_id of your standard work day schedule and pass in the users timezone
      var sched = new GlideSchedule('08fcd0830a0a0b2600079f56b1adb9ae',usr.time_zone);
      // Get duration based on schedule/timezone 
      return(sched.duration(start.getGlideObject(), end.getGlideObject()));
    }

    Vérifier les dates d’arrêt à venir

    Type : script planifié.

    Description : ce script vérifie tous les soirs les dates de résiliation des contrats arrivant à échéance dans 90, 50 ou 10 jours (selon le champ de durée du contrat).

    Exemple de script :

    function contractNoticeDue(){
      var now_GR = new GlideRecord("contract");
      now_GR.addQuery("u_contract_status","Active");
      now_GR.query();
      while(now_GR.next()){
        if((now_GR.u_termination_date<= gs.daysAgo(-90))&&(now_GR.u_contract_duration=="Long")){
          now_GR.u_contract_status="In review";}
        elseif((now_GR.u_termination_date<= gs.daysAgo(-50))&&(now_GR.u_contract_duration=="Medium")){
          now_GR.u_contract_status="In review";}
        elseif((now_GR.u_termination_date <= gs.daysAgo(-10))&&(now_GR.u_contract_duration=="Short")){
          now_GR.u_contract_status="In review";}
        now_GR.update();
      }
    }
    Utilisez des scripts dans les règles métier pour accomplir des tâches courantes telles que :
    • Comparaison de deux champs de date.
    • Analyse des charges utiles XML.
    • Abandon d’une action de base de données dans une règle métier
    Avec les scripts, vous pouvez également :
    • Spécifiez l’opération qui déclenche la règle métier.
    • Utilisez le bloc-notes avec les règles métier d’affichage pour modifier les valeurs du formulaire juste avant qu’un utilisateur ne charge le formulaire.
    • Utilisez la condition OU comme vous le feriez dans un générateur de conditions.

    Vous pouvez également utiliser la fonctionnalité de scripting du système disponible pour les scripts côté serveur.

    Vous pouvez utiliser les options du formulaire Règles métier pour créer des conditions, définir des valeurs de champ et afficher des messages d’alerte sans avoir besoin d’écrire un script.

    Abandonner une action de base de données dans une règle métier

    Pendant un script avant la règle métier, vous pouvez annuler ou abandonner l’action de base de données actuelle à l’aide de la méthode current.setAbortAction(true).

    Par exemple, si la règle métier Avant est exécutée lors d’une action d’insertion et que le script contient une condition qui appelle current.setAbortAction(true), le nouvel enregistrement stocké dans la règle actuelle n’est pas créé dans la base de données.

    Ajouter une fonctionnalité de remplissage automatique

    L’ajout d’une fonctionnalité de remplissage automatique est également appelé modèle d’incident, affectations automatiques, appels rapides, script d’appel ou remplissage automatique.

    Supposons que vous souhaitiez remplir automatiquement votre description brève en fonction de la sous-catégorie sélectionnée. Tout d’abord, créez une table de recherche, puis renseignez le champ clé, dans ce cas Sous-catégorie et le champ renseigné automatiquement, Brève description. Supposons que votre table ait un enregistrement avec Sous-catégorie = Mot de passe et Description brève = Réinitialisation du mot de passe. Lorsque l’utilisateur sélectionne la sous-catégorie de mot de passe sur le formulaire d’incident, un script client recherche l’enregistrement correspondant et définit une description brève égale à Réinitialisation du mot de passe. Paramètres du script client... Type = onChange, nom de table = incident, nom de champ = sous-catégorie.

    function onChange(control, oldValue, newValue, isLoading) { 
      if (isLoading) { return; } 
      var newrec = gel('sys_row');
      //Check if new record
      if (newrec.value == -1) { 
        var lookup = new GlideRecord('u_short_desc_lookup'); 
        lookup.addQuery('u_subcategory', g_form.getValue('subcategory'));
        lookup.query();
        var temp; //temp var - reusable
        if (lookup.next()) {
          temp = lookup.u_short_description;
            if (null != temp) { //Set the form value from lookup if there is a lookup value
              g_form.setValue('short_description', temp); } 
            else {
              g_form.setValue('short_description', "" ); } } 
       else { 
         //If a lookup record does not exist based on lookup.addQuery 
         //Then set to UNDEFINED or NULL depending on type
          g_form.setValue('short_description', ""); } }
     
     }

    Vous pouvez remplir de nombreux champs ou même insérer des questions de script d’appel dans le champ Commentaires afin que le personnel du centre d’appel recueille de bonnes informations à transmettre à un technicien. Il existe déjà des règles d’affectation, des modèles et des assistants intégrés qui exécutent des fonctions similaires.

    Exemple de script : règle métier par défaut avant requête

    Vous pouvez utiliser une règle métier de requête qui s’exécute avant que la requête de base de données ne soit effectuée pour empêcher les utilisateurs d’accéder à certains enregistrements.

    Avertissement :
    La personnalisation décrite ici a été développée pour une utilisation dans des instances spécifiques, et n'est pas prise en charge par Now Support. Cette méthode est fournie telle quelle et doit être testée rigoureusement avant d'être implémentée. Publiez toutes les questions et commentaires concernant cette personnalisation dans notre forum communautaire.

    Prenons l’exemple suivant tiré d’une règle métier par défaut qui limite l’accès aux enregistrements d’incidents.

    Tableau 1. La règle métier par défaut limite l’accès aux enregistrements d’incidents
    Nom Table Quand
    Requête d’incident Incident avant, requête

    Exemple de script

    Cet exemple empêche les utilisateurs d’accéder aux enregistrements d’incidents, sauf s’ils ont le rôle itil et qu’ils sont répertoriés dans le champ Appelant ou Ouvert par . Ainsi, par exemple, lorsque les utilisateurs du libre-service ouvrent une liste d’incidents, ils ne peuvent voir que les incidents qu’ils ont soumis.
    if(!gs.hasRole("itil")&& gs.isInteractive()){
      var u = gs.getUserID();
      var qc = current.addQuery("caller_id", u).addOrCondition("opened_by", u).addOrCondition("watch_list","CONTAINS", u);
      gs.print("query restricted to user: "+ u);}
    Remarque :
    Vous pouvez également utiliser des contrôles d’accès pour restreindre les enregistrements que les utilisateurs peuvent voir.

    Script de calendrier pour les jours de la semaine

    Type : Règles métier/Scripts clients.

    Ce script planifie le script pour les jours de la semaine. Insérez n’importe quel script à l’endroit où il est indiqué « Votre script ici ».
    var go ='false';
    var now =new Date(); 
     
    // Correct time zone, which is by default GMT -7 
    now.setHours(now.getHours()+8);
    var day = now.getDay(); 
     
    // No go on Saturday or Sunday 
    if(day !=0&& day !=6){
     
    // (your script here)
     
    }

    Définir le champ de date en fonction de la date actuelle

    Ce script définit un champ de date en fonction du jour de la semaine actuel. Dans cet exemple, si la journée est comprise entre le lundi et le mercredi, la date est fixée au lundi suivant. sinon, il définit le champ de date au lundi suivant.
    function setCabDate(){
    var today =new Date();
    var thisDay = today.getDay();
    //returns 0 for Sunday, 1 for Monday, etc. thru 6 for Saturday.
    var thisMon =new GlideDateTime();
    thisMon.setDisplayValue(gs.beginningOfThisWeek());
    var nextMon = thisMon.getNumericValue();
    nextMon +=(1000*60*60*24*7);
     
    if((thisDay <4)&&(thisDay >0))
      //if today is Mon thru Wed (thisDay = 1, 2, or 3), set cab to this coming Monday.
      current.u_req_cab_rev_date.setDateNumericValue(thisMon.getNumericValue());
    elseif((thisDay >=4)||(thisDay ==0))
      //if today is Thurs thru Sun (thisDay = 4, 5, 6, or 0), set cab to next Monday.
      current.u_req_cab_rev_date.setDateNumericValue(nextMon);
    }

    Pour valider l’entrée de tous les champs de date/heure, vous pouvez utiliser ce qui suit dans un script de validation (Définition du système > Scripts de validation). Étant donné que le format date/heure est codé en dur dans ce script, il doit correspondre au format date/heure de votre instance. Si le format de date/heure de votre instance change, vous devez mettre à jour votre script de validation.

    Définissez le type de script de validation sur Date/Heure. Ensuite, avec ce script de validation, si un utilisateur saisit un format incorrect dans un champ de date/heure, il reçoit un message d’erreur.
    function validate(value){
    // empty fields are still valid dates 
    if(!value)returntrue; 
     
    // We "should" have the global date format defined always defined. but there's always that edge case... 
    if(typeof g_user_date_time_format !=='undefined')return isDate(value, g_user_date_time_format); 
     
    // if we don't have that defined, we can always try guessing 
    return parseDate(value)!==null;}
    Figure 1. Validation de la date/heure
    Fenêtre Script de validation avec la description : Valide le format des champs de date/heure.