Scripts de champ utiles

  • Rversion finale: Xanadu
  • Mis à jour 1 août 2024
  • 4 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 Server API reference.

    Renseigner automatiquement un champ

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

    Dans ce cas, si la table a 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
    • 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écutantes.
    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)");}
    }

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

    Cet exemple de script rogne les espaces de fin et de début dans les champs et FirstNameLastName de la 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 s’applique au champ Nombre de l’incident. L’étiquette clignote pendant deux secondes.
    g_form.flash("incident.number","#FFFACD",0);
    Les arguments de la méthode flash sont les suivants :
    • tablename.fieldname
    • Couleur RVB ou couleur CSS acceptable comme « bleu » ou « tomate »
    • 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 une étiquette de champ en gras

    Ce script client met en gras l’étiquette d’un champ particulier. Dans ce cas, le champ correspond à la brève description 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 en lecture seule les champs suivants de la table Incident [incident] :
    • É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 date/heure. Cette approche contourne le problème de la mise en valeur du format et du 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, consultez 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);