Scripts de planification utiles

  • Rversion finale: Yokohama
  • Mis à jour 30 janv. 2025
  • 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 dans 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 règle métier Mettre à jour/Insérer.

    Description : une durée d’activité calcule la durée d’ouverture à fermeture d’un incident en fonction des éléments particuliers de création et d’utilisation de calendriers. Si aucun calendrier n’est 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 de résolution lorsque l’état de l’incident passe à 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 à venir 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 :
    • Indiquez 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 d’un 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 script 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

    Dans le cas d’un script avant 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 before est exécutée lors d’une action d’insertion et que vous avez une condition dans le script qui appelle current.setAbortAction(true), le nouvel enregistrement stocké dans current n’est pas créé dans la base de données.

    Ajouter la fonctionnalité de remplissage automatique

    L’ajout de la 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. Commencez par créer une table de recherche, puis renseignez le champ clé, dans ce cas la 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 de 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 renseigner de nombreux champs ou même importer des questions de script d’appel dans le champ Commentaires afin que le personnel du centre d’appels 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 avant requête par défaut

    Vous pouvez utiliser une règle métier de requête qui s’exécute avant la requête de base de données 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 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, interroger

    Exemple de script

    Cet exemple empêche les utilisateurs d’accéder aux enregistrements d’incidents à moins qu’ils n’aient le rôle itil, qu’ils ne soient répertoriés dans le champ Appelant ou Ouvert par . Ainsi, par exemple, lorsque les utilisateurs en 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 dans lequel il est écrit « 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. Dans cet exemple, si le jour est du lundi au mercredi, il définit la date au lundi suivant ; sinon, il fixe le champ de date à lundi prochain.
    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 les éléments suivants 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 du script de validation sur Date/Heure. Ensuite, avec ce script de validation, si un utilisateur saisit un format incorrect dans un champ 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 de script de validation avec la description : Valide le format des champs de date/heure.