Scripts de champs utiles

  • Rversion finale: Washingtondc
  • Mis à jour 1 févr. 2024
  • 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 de serveur.

    Renseigner automatiquement un champ

    L’exemple suivant montre comment utiliser un script client pour remplir automatiquement une brève description basée sur 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 la description brève comme 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é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)");}
    }

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

    Cet exemple de script découpe les espaces de fin et de début dans les FirstNameLastName champs et 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 concerne le champ de numéro sur 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 »
    • 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 une étiquette de champ en gras

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

    Mettre les champs en lecture seule

    Ce script client onLoad met 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 des 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/l’heure actuelles dans le champ

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

    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);