Nützliche Feldskripts

  • Freigeben Version: Xanadu
  • Aktualisiert 1. August 2024
  • 4 Minuten Lesedauer
  • Gängige Anwendungsfälle für Feldanpassungsskripts.

    Warnung:
    Die hier beschriebene Anpassung wurde für die Verwendung in bestimmten Fällen entwickelt und wird von Now Support nicht unterstützt. Diese Methode wird wie sie ist zur Verfügung gestellt und sollte vor der Implementierung gründlich getestet werden. Veröffentlichen Sie alle Fragen und Kommentare zu dieser Anpassung in unserem Community-Forum.

    Weitere Informationen finden Sie unter Server API-Referenz.

    Füllt ein Feld automatisch aus

    Das folgende Beispiel zeigt, wie Sie ein Client-Skript zum automatischen Ausfüllen einer Kurzbeschreibung auf Grundlage der ausgewählten Unterkategorieverwenden.

    In diesem Fall, wenn die Tabelle einen Datensatz mit Unterkategorie = Passwort und Kurzbeschreibung = Passwortzurücksetzung enthält. Wenn der Benutzer die Unterkategorie Passwort im Incident-Formular auswählt, sucht ein Client-Skript nach dem übereinstimmenden Datensatz und legt die Kurzbeschreibung auf „Passwort zurücksetzen“ fest.

    Client-Skript-Einstellungen:
    • Type = onChange
    • Table name = Incident
    • Field name = Unterkategorie
    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',"");
                  }
         }
    }

    HTML-Tags in Beschreibungen deaktivieren

    Dieser Code deaktiviert HTML-Tags in den Feldern „ Beschreibung “ und „Kurzbeschreibung“, indem die Tags durch nicht ausgeführte Versionen ersetzt werden.
    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)");}
    }

    Führende und nachgestellte Leerzeichen in Feldern beseitigen

    Dieses Beispiel des Skripts entfernt nachgestellte und führende Leerzeichen in den Feldern FirstName und LastName von 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();}}
    }

    Feldbezeichnungen zum Blinken bringen

    Das folgende Clientskript-Beispiel gilt für das Nummernfeld in einem Incident. Die Bezeichnung beginnt zwei Sekunden lang.
    g_form.flash("incident.number","#FFFACD",0);
    Die Argumente für die flash-Methode lauten wie folgt:
    • tablename.fieldname
    • RGB-Farbe oder zulässige CSS-Farbe wie „Blau“ oder „Tomate“
    • Ganzzahl, die bestimmt, wie lange die Bezeichnung blinkt:
      • 2 für ein 1-Sekunden-Blinken
      • 0 für ein 2-Sekunden-Blinken
      • -2 für 3-Sekunden-Blinken
      • -4 für ein 4-Sekunden-Blinken
    Hinweis:
    Geben Sie dieses Argument nicht an, wenn die Feldbezeichnung in der angegebenen Farbe gefärbt werden soll.

    Markieren Sie eine Feldbezeichnung fett

    Dieses Client-Skript stellt die Bezeichnung eines bestimmten Felds fett dar. In diesem Fall entspricht das Feld der Kurzbeschreibung in der Incident-Tabelle.
    function onLoad(){
      var l = g_form.getLabel('incident.short_description');
      l.style.fontWeight = 'bold';}

    Felder schreibschützen

    Dieses Client-Skript vom Typ „onLoad“ legt für die folgenden Felder in der Incident-Tabelle [incident] einen Schreibschutz fest:
    • Incident-Status
    • Auswirkung
    • Dringlichkeit
    • Priorität
    • Konfigurationselement
    • Zugewiesen an
    Das Skript entfernt auch die Lupe für die schreibgeschützten Referenzfelder (Configuration Item und Zugewiesen an).
    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);}}

    Aktuelles Datum/aktuelle Uhrzeit im Feld festlegen

    Sie können Datums- und Uhrzeitwerte in Clientskripts und Skripteinbindungen festlegen.

    Clientskript
    Sie können die folgenden beiden Zeilen verwenden, um das aktuelle Datum und die aktuelle Uhrzeit in einem Datums-/Uhrzeitfeld festzulegen. Dieser Ansatz umgeht das Problem, den Wert in das richtige Format und die richtige Zeitzone zu bringen.
    var ajax = new GlideAjax('MyDateTimeAjax');
      ajax.addParam('sysparm_name','nowDateTime');
      ajax.getXML(function(){
        g_form.setValue('put your field name here', ajax.getAnswer());});
    Weitere Informationen zum Ausführen von serverseitigen Skripts mit dem Client finden Sie unter GlideAjax.
    System-Skripteinbindung
    // Be sure the "Client callable" checkbox is checked
     
    var MyDateTimeAjax = Class.create();
    MyDateTimeAjax.prototype = Object.extendsObject(AbstractAjaxProcessor,{
      nowDateTime:function(){
        return gs.nowDateTime();}});

    Schalten Sie das Timer-Feld nach Feldname um

    Das folgende Client-Skript wechselt das Feld „Timer“ basierend auf einem bestimmten Feldnamen.
    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";}}}}}

    GlideDateTime-Feldwert ändern

    Im folgenden Beispiel wird ein serverseitiges Skript für den Zugriff auf ein GlideDateTime -Feld verwendet.

    Das folgende serverseitige Skriptbeispiel zeigt, wie Werte mithilfe der GlideDateTime- API geändert werden. Dasselbe Konzept gilt auch für das GlideDate-Objekt.
    //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);