Scripts de champs utiles

  • Rversion finale: Yokohama
  • Mis à jour 30 janv. 2025
  • 5 minutes de lecture
  • Cas d’utilisation courants des scripts de personnalisation de champ.

    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.

    Pour plus d'informations, consultez Référence de l’API du serveur.

    Remplir automatiquement un champ

    L’exemple suivant montre comment utiliser un script client pour remplir automatiquement une description brève en fonction de la sous-catégorie sélectionnée.

    Dans ce cas, si la table contient 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 Incident, un script client recherche l’enregistrement correspondant et définit Description brève égale à Réinitialisation du mot de passe.

    Paramètres de script client :
    • Type = onChange
    • Table name = incident
    • Field name = 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',"");
                  }
         }
    }

    Désactiver les balises HTML dans les descriptions

    Ce code désactive les balises HTML dans les champs Description et Description brève en remplaçant les balises par des versions non exécutables.
    doit();
     
    function doit(){ 
     var desc = current.description.toString();
     var shdesc = current.short_description.toString();
     if(desc.indexOf('script>')>-1|| shdesc.indexOf('script>')>-1){
       desc = desc.replace(/<script>/g,"(script)");
       current.description = desc.replace(/<\/script>/g,"(\/script)");
       shdesc = shdesc.replace(/<script>/g,"(script)");
       current.short_description = shdesc.replace(/<\/script>/g,"(\/script)");}
    }

    Éliminez les espaces de début et de fin dans les champs

    Cet exemple de script supprime les espaces de début et de début dans les FirstName champs et LastName du sys_user.
    doit();
     
    function doit(){ 
      var now_GR =new GlideRecord('sys_user');
      gr.query();
      while(gr.next()){
        if((gr.first_name.toString().length!= gr.first_name.toString().trim().length)||(gr.last_name.toString().length!= gr.last_name.toString().trim().length)){
         gr.first_name= gr.first_name.toString().trim();
         gr.last_name= gr.last_name.toString().trim();
         gr.autoSysFields(false);
         gr.update();}}
    }

    Faire clignoter une étiquette de champ

    L’exemple de script client suivant concerne le champ numéro de l’incident. L’étiquette clignote pendant deux secondes.
    g_form.flash("incident.number","#FFFACD",0);
    Les arguments en faveur de la méthode flash sont les suivants :
    • tablename.fieldname
    • Couleur RVB ou couleur CSS acceptable comme « bleu » ou « tomate »
    • Nombre entier qui détermine la durée de clignotement de l’étiquette :
      • 2 pour un flash de 1 seconde
      • 0 pour un flash de 2 secondes
      • -2 pour un flash de 3 secondes
      • -4 pour un flash de 4 secondes
    Remarque :
    Ne spécifiez pas cet argument si vous souhaitez que l’étiquette du champ soit colorée de la couleur spécifiée.

    Mettre en gras une étiquette de champ

    Ce script client met l’étiquette d’un champ particulier en gras. Dans ce cas, le champ est la description brève de la table Incident.
    function onLoad(){
      var l = g_form.getLabel('incident.short_description');
      l.style.fontWeight = 'bold';}

    Rendre les champs accessibles en lecture seule

    Ce script client onLoad rend les champs suivants de la table Incident [incident] accessibles en lecture seule :
    • État de l'incident
    • Impact
    • Urgence
    • Priorité
    • Élément de configuration
    • Affecté à
    Le script supprime également la loupe pour les champs de référence en lecture seule (élément de configuration et Affecté à).
    function onLoad(){
    var incidentState = g_form.getValue('incident_state');
    if( incidentState == '6'|| incidentState == '7'){
       g_form.setReadonly('incident_state',true);
       g_form.setReadonly('impact',true);
       g_form.setReadonly('urgency',true);
       g_form.setReadonly('priority',true);
       g_form.setReadonly('cmdb_ci',true);
       g_form.setReadonly('assigned_to',true);}}

    Définir la date/heure actuelle dans le champ

    Vous pouvez définir des valeurs de date et d’heure dans les scripts clients et les includes de script.

    Script client
    Vous pouvez utiliser les deux lignes suivantes pour définir la date et l’heure actuelles dans un champ de date/heure. Cette approche contourne le problème de l’obtention de la valeur dans le format et le fuseau horaire appropriés.
    var ajax = new GlideAjax('MyDateTimeAjax');
      ajax.addParam('sysparm_name','nowDateTime');
      ajax.getXML(function(){
        g_form.setValue('put your field name here', ajax.getAnswer());});
    Pour plus d’informations sur l’exécution de scripts côté serveur avec le client, reportez-vous à GlideAjax.
    Script Include du système
    // Be sure the "Client callable" checkbox is checked
     
    var MyDateTimeAjax = Class.create();
    MyDateTimeAjax.prototype = Object.extendsObject(AbstractAjaxProcessor,{
      nowDateTime:function(){
        return gs.nowDateTime();}});

    Activer/désactiver le champ de minuteur par nom de champ

    Le script client suivant active/désactive le champ de minuteur en fonction d’un nom de champ particulier.
    function toggleTimerByFieldName(fieldName){
     //Step 1: Find the timer object
     //timeObjectName: the timer objects name as it would normally be referenced
     //timeObjectHidden: the hidden input node in the field td
     //timeObjectParent: the parent td node containing the field and it's constituent nodes
     //timeObjectFields: anchor tag with onclick to stop timer
     
     var timeObjectName = fieldName;
     var timeObjectHidden = gel(timeObjectName);
     
     //Step 2: simulate click stop button
     var timeObjectParent;
     var timeObjectFields;
     
     //verify that we got the correct object
     if(timeObjectHidden.type=="hidden"){
     
        //Get Parent td node
        timeObjectParent = timeObjectHidden.parentNode;
     
        //Get input fields
        timeObjectFields = timeObjectParent.getElementsByTagName("input");
     
        //simulate click of stop button
        var timerTestString ="paused";
        var timerImg;
     
        //loop through input objects looking for the pause timer object
        for(var elIt=0; elIt < timeObjectFields.length; elIt++){
          if(timeObjectFields[elIt].id.match(timerTestString)){
            if(timeObjectFields[elIt].value=="false"){
              timeObjectFields[elIt].value="true";
              timerImg = timeObjectParent.getElementsByTagName("img")[0];
              timerImg.src="images/timer_start.gifx";}
          elseif(timeObjectFields[elIt].value=="true"){
              timeObjectFields[elIt].value="false";
              timerImg = timeObjectParent.getElementsByTagName("img")[0];
              timerImg.src="images/timer_stop.gifx";}}}}}

    Modifier la valeur du champ GlideDateTime

    L’exemple suivant utilise un script côté serveur pour accéder à un GlideDateTime champ.

    L’exemple de script côté serveur suivant montre comment modifier des valeurs à l’aide de l’API GlideDateTime . Le même concept s’applique également à l’objet GlideDate .
    //You first need a GlideDateTime object
    //this can be from instantiating a new object "var gdt = new GlideDateTime()"
    //or getting the object from a GlideDateTime field
    //getting the field value (for example: var gdt = current.start_date) 
    //only returns the string value, not the object
    //to get the object use var gdt = current.start_date.getGlideObject();
    //now gdt is a GlideDateTime object
    var gdt = current.start_date.getGlideObject();
     
    //All methods can use negative values to subtract intervals
     
    //add 1 hour (60 mins * 60 secs)
    gdt.addSecondsLocalTime(3600);
     
    //add 1 day
    gdt.addDaysLocalTime(1);
     
    //subtract 1 day
    gdt.addDaysLocalTime(-1);
     
    //add 3 weeks
    gdt.addWeeksLocalTime(3);
     
    //subtract 6 months.
    gdt.addMonthsLocalTime(-6);
     
    //add 1 year, representing the date and time using the UTC timezone instead of the local user's timezone.
    gdt.addYearsUTC(1);