Cas d’utilisation de scripts côté client

  • Rversion finale: Zurich
  • Mis à jour 31 juil. 2025
  • 10 minutes de lecture
  • Les cas d’utilisation des scripts côté client incluent l’affichage de messages de champ, la modification des couleurs de formulaire, l’ajout de champs et la création d’actions d’acheminement d’interface utilisateur.

    Ajouter un champ à la validation du catalogue de services

    Ceci est un exemple d’ajout d’un champ Société au paiement sous le champ Demandé pour à l’aide de macros de mise en page autres que celles du panier, c’est-à-dire glide.sc.use_cart_layoutsest faux.

    Avant de commencer

    Rôle requis : admin

    Pourquoi et quand exécuter cette tâche

    Figure 1. Demandé pour le champ
    Boîte de dialogue Demandé pour avec « Administrateur système » dans le champ.

    Ce champ transfère une valeur fournie au champ Société de la demande de Catalogue de services.

    Cet exemple fait les hypothèses suivantes :

    • Instance utilisant la validation en deux étapes. Si la validation de l’achat en deux étapes n’est pas activée, activez-la avant de commencer. Pour plus d'informations, consultez Service Catalog checkout models.
    • Cet exemple renseigne le champ Société sur le formulaire de demande de Catalogue de services. Si le champ n’apparaît pas sur le formulaire, configurez le formulaire avant de commencer. Pour obtenir des instructions, consultez Personalize a form.

    Procédure

    1. Accédez à Interface utilisateur du système > macros d’interface utilisateur et sélectionnez servicecatalog_cart_template.
    2. Recherchez où il y a des variables masquées déclarées et ajoutez la ligne suivante :
      <input type="HIDDEN" name="cart_id" id="cart_id" value="$[sc_cart.sys_id]" />
    3. Recherchez le code suivant, qui génère le code Demandé pour :
      <tr class="header">
      <td width = "30%">
        ${gs.getMessage('Requested for')}:
        </td>
        <td width="70%">
          <label for="requestor_location">${gs.getMessage('Deliver to')}:</label>
        </td>
      </tr>
      <tr><td>$[SP]</td> 
      </tr>
        <tr><td valign="top">
          <j2:if test="$[jvar_can_delta_rf == false]">
            $[sc_cart.requested_for.getDisplayValue()]
          </j2:if>
          <j2:if test="$[jvar_can_delta_rf != false]">
            <g2:catalog_requested_for />
          </j2:if>
        </td>
        <td>
          <textarea id="requestor_location" style="width:100%" rows="4"       name="requestor_location" wrap="soft" onChange="catDeliveryAddress('$[sc_cart.sys_id]', 'requestor_location');"> 
            $[sc_cart.delivery_address]
          </textarea>
        </td>
      </tr>
      <tr>
        <td>$[SP]</td>
      </tr>
    4. Ajoutez ensuite le code suivant :
      <tr class="header">
        <td colspan="2">Company</td>
      </tr>
      <tr>
        <td>$[SP]</td>
      </tr>
      <tr>
        <td colspan="2">
          <g2:ui_reference name="core_company" table="core_company" onchange="setCartValue()"/>
        </td>
      </tr>
      <tr>
        <td>$[SP]</td>
      </tr>
      Remarque :
      La macro « ui_reference » définit un champ de référence. Il existe plusieurs macros pour différents types de champs. Vous pouvez voir des exemples de ces types de champs sous Interface utilisateur du système > macros d’interface utilisateur. Ces macros commencent par « ui_ ». Pour cet exemple, le champ de référence créé est nommé core_company. Pour plus d'informations, consultez Macros d'interface utilisateur.
    5. Accédez maintenant à l’interface utilisateur du système > pages de l’interface utilisateur et sélectionnez la page de l’interface utilisateur servicecatalog_checkout_one .
    6. Ajoutez le script suivant au champ Script client .
      function setCartValue() { 
        var newField = gel('core_company'); 
        var myCart = gel('cart_id'); 
        var cart_item = new GlideRecord('sc_cart_item');
        cart_item.addQuery('cart', myCart.value);
        cart_item.query(); 
        if(cart_item.next()) {
          cart_item.hints = "<hints><entry key='sysparm_processing_hint' value='setfield:request.company=" + newField.value + "'/></hints>";
          cart_item.update(); 
        } 
      }

      Pour cet exemple, le champ de référence a été appelé core_company et le champ renseigné sur la demande est entreprise. Si différents champs sont utilisés :

      • Trouvez cette ligne : var company = gel('core_company') ; et remplacez core_company par le nom du champ à la caisse.
      • Dans la ligne commençant par « cart_item.hints », remplacez « request.company » par le nom du champ à renseigner sur le ticket de demande, où « request » est la demande générée et « company » est le nom du champ.

    Résultats

    Lorsqu’un élément est commandé, le champ de l’entreprise apparaît sur le formulaire Catalogue :

    Champ ajouté à la validation du catalogue de services

    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.

    Pour remplir automatiquement un champ Description brève en fonction de la sous-catégorie sélectionnée :
    1. Créez une table de recherche.
    2. Renseignez le champ clé, sous-catégorie.
    3. Renseignez le champ renseigné automatiquement, Brève description.
    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 importer des questions de script d’appel dans le champ Commentaires afin que le personnel du centre d’appels recueille des informations utiles à transmettre à un technicien.

    Définition d’un champ pour réinitialiser le mot de passe
    La table de recherche contient un enregistrement avec les paramètres de clé et de remplissage automatique suivants :
    • Sous-catégorie = Mot de passe
    • Description brève = Réinitialisation du mot de passe
    Paramètres de script client :
    • Type = onChange
    • Nom de table = incident
    • Nom de champ = Sous-catégorie

    Lorsque l’utilisateur sélectionne la sous-catégorie Mot de passe sur le formulaire Incident, un script client recherche l’enregistrement correspondant et définit la description brève sur la même longueur que Réinitialisation du mot de passe.

    Changer la couleur du formulaire lors du changement d’état

    Change la couleur d’un champ de formulaire du formulaire lors d’un changement d’état. Le script peut facilement être modifié pour ajuster n’importe quelle propriété de n’importe quel objet de la page accessible via le DOM HTML.

    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.

    Nom : Changer la couleur du formulaire lors d’un changement d’état

    Type : Script client

    Description : Change la couleur d’un champ de formulaire du formulaire lors d’un changement d’état. Le script peut facilement être modifié pour ajuster n’importe quelle propriété de n’importe quel objet de la page accessible via le DOM HTML.

    Script :
    function onChange(control, oldValue, newValue, isLoading) { 
      var elementID = gel("incident.priority");
        switch(newValue) { 
          case "1": elementID.style.backgroundColor = "red"; break; 
          case "2": elementID.style.backgroundColor = "tomato"; break;
          case "3": elementID.style.backgroundColor = "orange"; break;
          case "4": elementID.style.backgroundColor = "yellow"; break;
          case "5": elementID.style.backgroundColor = "green"; break; 
          default: elementID.style.backgroundColor = "white"; break; } }

    Créer une action d’acheminement d’interface utilisateur

    Cette solution vous permet de créer un enregistrement avec le centre de services sans savoir s’il s’agit d’un incident ou d’un élément de demande ; Le Centre de services peut ensuite acheminer l’enregistrement vers la table appropriée.

    Avant de commencer

    Rôle requis : admin

    Procédure

    1. Créez une table qui étend la table de tâches (par exemple, Nouvel appel).
    2. Créez un module pour créer un nouvel enregistrement d’appel.
    3. Créez les champs de votre choix dans la table Nouvel appel.

      Les seuls champs dont vous avez besoin sont ceux qui sont nécessaires pour déterminer si le nouvel appel doit être acheminé vers un Incident ou vers un Élément de demande. Assurez-vous que le formulaire contient tous les champs que vous souhaitez transmettre à l’incident ou à l’élément de demande. Dans cet exemple, les éléments suivants sont créés sur le formulaire :

      • Demandé pour (référence)
      • Emplacement (référence)
      • Type d’appel (choix avec deux valeurs : Incident et Demande)
      • Élément de demande (référence à la table Élément de sc_cat_item )
    4. Ajoutez des politiques d’interface utilisateur pour définir quelques champs comme obligatoires et masquer le champ Élément de demande en fonction de la sélection du type d’appel .
    5. Supprimez les boutons et les fonctionnalités inutiles du formulaire.
    6. Bouton Créer une action d’interface utilisateur.
      Ce bouton redirige l’utilisateur vers un incident ou une demande. Il crée également l’enregistrement d’incident et copie les valeurs dans l’incident ainsi que dans le formulaire d’élément de demande.
      var reqItem = current.u_item;
      var requestedFor = current.u_requested_for;
      var location = current.location;
      
      if(current.u_incident_request == 'Incident'){
        //Create a new incident record and redirect to the new incident
        var rec = new GlideRecord('incident');
        rec.initialize();
        rec.caller_id = requestedFor;
        rec.location = location;
        rec.insert();
        action.setRedirectURL(rec);
      }
      
      if(current.u_incident_request == 'Request'){
        //Build the url and route the user to the request item
        var url = '';
        if(current.u_item.sys_class_name == 'sc_cat_item_guide'){
          url = 'com.glideapp.servicecatalog_cat_item_guide_view.do?sysparm_initial=true&sysparm_guide=' + 
            reqItem + '&sysparm_user=' + requestedFor + '&sysparm_location=' + location;
        }
        else{
          url = 'com.glideapp.servicecatalog_cat_item_view.do?sysparm_id=' + reqItem + '&sysparm_user=' +  
            requestedFor + '&sysparm_location=' + location;
        }
        action.setRedirectURL(url);
      }
    7. Dans l’exemple précédent, le bouton Itinéraire transmet les valeurs Demandé pour et Emplacement de l’URL au formulaire d’élément de demande.
      Assurez-vous que vous disposez de variables appelées requested_for et emplacement sur votre élément, votre créateur d’enregistrement ou votre guide de commande qui mappe ces valeurs à l’aide du script client suivant. Il y a une limite quant à la quantité d’informations que vous pouvez transmettre, car l’URL a une longueur limitée. Évitez d’envoyer des informations à partir de champs de texte longs à l’aide de cette méthode.
      function onLoad() {
        var url = document.location.toString();
        var userKey = 'sysparm_user=';
        var locKey = 'sysparm_location=';
        var userPosition = url.indexOf(userKey);
        var locPosition = url.indexOf(locKey)
        if (userPosition != -1) {
          var user = url.substr(userPosition+userKey.length, 32);
          g_form.setValue('requested_for', user);
        }
        if (locPosition != -1) {
          var loc = url.substr(locPosition+locKey.length, 32);
          g_form.setValue('location', loc);
        }
      }

    Afficher les messages du champ

    Plutôt que d’utiliser JavaScript alert(), pour un look plus propre, vous pouvez afficher une erreur sur le formulaire lui-même. Les méthodes showFieldMsg() et hideFieldMsg() peuvent être utilisées pour afficher un message juste en dessous du champ lui-même.

    showFieldMsg et hideFieldMsg sont des méthodes qui peuvent être utilisées avec l’objet g_form .

    Ces méthodes permettent de modifier la vue de formulaire des enregistrements (formulaires Incident, Problème et Changement). Ces méthodes peuvent également être disponibles dans d’autres scripts clients, mais elles doivent être testées pour déterminer si elles fonctionnent comme prévu.

    Lorsqu’un message de champ est affiché sur un formulaire lors du chargement, le formulaire défile pour s’assurer que le message de champ est visible. Veiller à ce que les utilisateurs ne manquent pas un message de champ parce qu’il n’était pas à l’écran.

    La propriété globale glide.ui.scroll_to_message_field contrôle le défilement automatique des messages lorsque le champ de formulaire est hors écran (fait défiler le formulaire jusqu’au contrôle ou au champ).

    Tableau 1. Détail de la méthode
    Détail de la méthode Paramètres Exemple
    showFieldMsg(entrée, message, type, [scrollform])
    • Entrée : nom du champ ou du contrôle
    • Message : message que vous souhaitez voir apparaître
    • tapez : « info », « erreur » ou « avertissement » ; La valeur par défaut est info si elle n’est pas fournie
    • formulaire de défilement : (facultatif) Définissez scrollForm sur false pour empêcher le défilement du message de champ hors écran

    Message d'erreur

    g_form.showFieldMsg('impact','Low impact not allowed with High priority','error');

    Impact faible non autorisé avec message de priorité élevée.

    Message dinformation

    g_form.showFieldMsg('impact', 'Low impact response time can be one week','info');
    //or this defaults to info type
    //g_form.showFieldMsg('impact', 'Low impact response time can be one week');

    Le délai de réponse à faible impact peut être un message d’une semaine.

    hideFieldMsg(entrée)
    • Entrée : nom du champ ou du contrôle
    • clearAll : paramètre booléen (facultatif) indiquant si tous les messages doivent être effacés. Si vrai, tous les messages du champ sont effacés. Si la valeur est faux ou vide, seul le premier message est supprimé
    Suppression d’un message
    //this will clear the first message printed to the field
    g_form.hideFieldMsg('impact');

    Support hérité

    Les méthodes showErrorBox() et hideErrorBox() ne sont pas recommandées.

    Utilisation du code client et serveur dans une action d’interface utilisateur

    Vous pouvez utiliser un script pour valider une entrée lors d’un clic sur une action d’interface utilisateur côté client avant de mettre à jour l’enregistrement côté serveur. L’utilisateur n’aura pas besoin de cliquer deux fois sur le bouton pour valider les champs obligatoires et mettre à jour l’enregistrement.

    Le script appelle la fonction client pour la validation côté client, et l’action d’interface utilisateur termine la tâche si elle réussit. Le code qui s’exécute sans instruction onclick garantit que la fonction côté serveur ne s’exécute pas tant que la fonction cliente n’est pas exécutée. En cas de réussite, la fonction côté serveur s’exécute et met à jour l’enregistrement.

    // Client-side onclick function
    function resolveIncident() {
      // Set the 'Incident state' and 'State' values to 'Resolved', and display mandatory fields
      g_form.setValue('incident_state', 6);
      g_form.setValue('state', 6);
      g_form.setValue('resolved_by', g_user.userID);
    
      // Call the UI action and skip the 'onclick' function
      gsftSubmit(null, g_form.getFormElement(), 'resolve_incident'); //MUST call the 'Action name' set in this UI Action
    }
    
    // Code that runs without 'onclick'
    // Ensure call to server-side function with no browser errors
    if (typeof window == 'undefined')
      serverResolve();
    
    // Server-side function
    function serverResolve() {
      current.incident_state = IncidentState.RESOLVED;
      current.state = IncidentState.RESOLVED;
      current.resolved_by = gs.getUserID();
      current.update();
    }

    gsftSubmit(contrôle de chaîne, formulaire d’objet, chaîne action_name)

    Soumet un formulaire comme si l’utilisateur avait cliqué sur une action d’interface utilisateur après avoir vérifié les champs obligatoires et exécuté les scripts clients onSubmit( ). Permet d’appeler le code côté client et le code côté serveur dans une seule action d’interface utilisateur.

    Tableau 2. Paramètres
    Nom Type Description
    control Chaîne Nom d’un bouton de formulaire sur lequel vous souhaitez simuler un clic utilisateur. Utilisez null sinon.
    formulaire Objet Facultatif. Élément de formulaire qui contient l’entrée soumise. Vous pouvez récupérer cette valeur en appelant la méthode g_form.getFormElement().
    action_name Chaîne Nom de l’action. Cette valeur est fournie dans l’enregistrement répertorié dans la table Actions d’interface utilisateur [sys_ui_action].

    Par exemple, « resolve_incident » est le nom de l’action du bouton Résoudre dans la table Incident [incident].