Nützliche Planungsskripts

  • Freigeben Version: Washingtondc
  • Aktualisiert 1. Februar 2024
  • 5 Minuten Lesedauer
  • Ein Business Rule-Skript gibt die Aktionen an, die die Business Rule durchführt. Skripts enthalten im Allgemeinen vordefinierte globale Variablen, um auf Elemente in Ihrem System zu verweisen, z. B. den aktuellen Datensatz. Globale Variablen stehen für alle Business Rules zur Verfügung.

    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.

    Dauer anhand eines Zeitplans berechnen

    Typ: Geschäftsregel vor dem Aktualisieren/Einfügen.

    Beschreibung: Eine Geschäftsdauer berechnet die Dauer vom Öffnen bis zum Schließen eines Incident basierend auf den jeweiligen Zeitpläne erstellen und verwenden. Wenn kein Zeitplan angegeben ist, verwendet das Skript einfach den ersten von der Abfrage zurückgegebenen Zeitplan.

    Skriptbeispiel:

    Im folgenden Beispiel wird die Auflösungsdauer festgelegt, wenn der Incident-Status sich in „Gelöst“ ändert.
    var gr_rec = new GlideRecord('incident');
    gr_rec.get('ed92e8d173d023002728660c4cf6a7bc');
    if (gr_rec.incident_state == 6) {
    var dur = calcDurationSchedule(gr_rec.opened_at, gr_rec.sys_updated_on);
    }
     
    function calcDurationSchedule(start, end){ 
      // Get the user   
      var usr = new GlideRecord('sys_user');
      usr.get(gs.getUserID());
      // Create schedule - pass in the sys_id of your standard work day schedule and pass in the users timezone
      var sched = new GlideSchedule('08fcd0830a0a0b2600079f56b1adb9ae',usr.time_zone);
      // Get duration based on schedule/timezone 
      return(sched.duration(start.getGlideObject(), end.getGlideObject()));
    }

    Anstehende Laufzeit-Enddaten prüfen

    Typ: Geplantes Skript.

    Beschreibung: Dieses Skript überprüft jede Nacht die Laufzeit-Enddaten von Verträgen in den nächsten 90, 50 oder 10 Tagen (abhängig vom Feld für die Vertragsdauer).

    Skriptbeispiel:

    function contractNoticeDue(){
      var now_GR = new GlideRecord("contract");
      now_GR.addQuery("u_contract_status","Active");
      now_GR.query();
      while(now_GR.next()){
        if((now_GR.u_termination_date<= gs.daysAgo(-90))&&(now_GR.u_contract_duration=="Long")){
          now_GR.u_contract_status="In review";}
        elseif((now_GR.u_termination_date<= gs.daysAgo(-50))&&(now_GR.u_contract_duration=="Medium")){
          now_GR.u_contract_status="In review";}
        elseif((now_GR.u_termination_date <= gs.daysAgo(-10))&&(now_GR.u_contract_duration=="Short")){
          now_GR.u_contract_status="In review";}
        now_GR.update();
      }
    }
    Verwenden Sie Skripts in Business Rules, um allgemeine Aufgaben wie die folgenden auszuführen:
    • Zwei Datumsfelder vergleichen
    • XML-Payloads analysieren
    • Datenbankaktionen in einer Business Rule abbrechen
    Mit Skripten können Sie auch die folgenden Aufgaben ausführen:
    • Den Vorgang angeben, der die Business Rule auslöst
    • Das Scratchpad mit Business Rules für die Anzeige verwenden, um Formularwerte unmittelbar vor dem Laden des Formulars durch einen Benutzer zu ändern
    • Die ODER-Bedingung wie in einem Condition Builder verwenden

    Sie können auch die Skriptfunktionen des Systems verwenden, die für serverseitige Skripts verfügbar sind.

    Sie können Optionen im Formular „Business Rules“ verwenden, um Bedingungen zu erstellen, Feldwerte festzulegen und Warnmeldungen anzuzeigen, ohne ein Skript schreiben zu müssen.

    Datenbankaktionen in einer Business Rule abbrechen

    Während eines Business Rule-Skripts vom Typ „Vor“ können Sie die aktuelle Datenbankaktion mit der Methode „current.setAbortAction(true)“ abbrechen oder abbrechen.

    Wenn beispielsweise die Business Rule vom Typ „Vor“ während einer Einfügeaktion ausgeführt wird und das Skript eine Bedingung enthält, die „current.setAbortAction(true)“ aufruft, wird der in „current“ gespeicherte neue Datensatz nicht in der Datenbank erstellt.

    Funktionalität für automatisches Ausfüllen hinzufügen

    Die Funktionalität für automatisches Ausfüllen wird auch als Incident-Vorlage, automatische Zuweisung, Schnellanruf, Anrufskript oder automatische Auffüllung bezeichnet.

    Angenommen, Sie möchten Ihre Kurzbeschreibung automatisch basierend auf der ausgewählten Unterkategorie ausfüllen. Erstellen Sie zuerst eine Suchtabelle, und füllen Sie dann das Schlüsselfeld aus, in diesem Fall Unterkategorie, und das automatisch ausgefüllte Feld, Kurzbeschreibung. Nehmen wir an, Ihre Tabelle enthält einen Datensatz mit Unterkategorie = Passwort und Kurzbeschreibung = Passwort zurücksetzen. 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... Typ = onChange, Tabellenname = Incident, Feldname = 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', ""); } }
     
     }

    Sie können viele Felder ausfüllen oder sogar Anrufskriptfragen im Feld Kommentare abrufen, damit das Call Center-Personal aussagekräftige Informationen zur Weitergabe an einen Techniker sammelt. Es sind bereits Zuweisungsregeln, Vorlagen und Assistenten integriert, die ähnliche Funktionen ausführen.

    Beispielskript: Eine Standard-Business Rule vom Typ „vor Abfrage“

    Sie können eine Business Rule vom Typ „Abfrage“ verwenden, die vor der Datenbankabfrage ausgeführt wird, um zu verhindern, dass Benutzer auf bestimmte Datensätze zugreifen.

    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.

    Das folgende Beispiel stammt aus einer standardmäßigen Business Rule, die den Zugriff auf Incident-Datensätze einschränkt.

    Tabelle : 1. Standard-Business Rule schränkt Zugriff auf Incident-Datensätze ein
    Name Tabelle Wann
    Incident-Abfrage Incident vor Abfrage

    Beispielskript

    In diesem Beispiel wird verhindert, dass Benutzer auf Incident-Datensätze zugreifen, es sei denn, sie haben die Rolle „itil“ oder werden im Feld Anrufer oder Geöffnet von aufgeführt. Öffnet beispielsweise ein Self-Service-Benutzer eine Liste von Incidents, kann er nur die Incidents sehen, die er selbst übermittelt hat.
    if(!gs.hasRole("itil")&& gs.isInteractive()){
      var u = gs.getUserID();
      var qc = current.addQuery("caller_id", u).addOrCondition("opened_by", u).addOrCondition("watch_list","CONTAINS", u);
      gs.print("query restricted to user: "+ u);}
    Hinweis:
    Sie können auch Zugriffssteuerungen verwenden, um einzuschränken, welche Datensätze Benutzer sehen können.

    Skript für Wochentage planen

    Typ: Business Rules/Client-Skripts

    Dieses Skript plant das Skript für Wochentage. Fügen Sie ein beliebiges Skript dort ein, wo „Your Script here“ steht.
    var go ='false';
    var now =new Date(); 
     
    // Correct time zone, which is by default GMT -7 
    now.setHours(now.getHours()+8);
    var day = now.getDay(); 
     
    // No go on Saturday or Sunday 
    if(day !=0&& day !=6){
     
    // (your script here)
     
    }

    Datumsfeld gemäß aktuellem Datum festlegen

    Dieses Skript legt ein Datumsfeld in Abhängigkeit vom aktuellen Wochentag fest. Wenn in diesem Beispiel der Tag Montag bis Mittwoch ist, wird das Datum auf den kommenden Montag festgelegt. Andernfalls wird das Datumsfeld auf nächsten Montag festgelegt.
    function setCabDate(){
    var today =new Date();
    var thisDay = today.getDay();
    //returns 0 for Sunday, 1 for Monday, etc. thru 6 for Saturday.
    var thisMon =new GlideDateTime();
    thisMon.setDisplayValue(gs.beginningOfThisWeek());
    var nextMon = thisMon.getNumericValue();
    nextMon +=(1000*60*60*24*7);
     
    if((thisDay <4)&&(thisDay >0))
      //if today is Mon thru Wed (thisDay = 1, 2, or 3), set cab to this coming Monday.
      current.u_req_cab_rev_date.setDateNumericValue(thisMon.getNumericValue());
    elseif((thisDay >=4)||(thisDay ==0))
      //if today is Thurs thru Sun (thisDay = 4, 5, 6, or 0), set cab to next Monday.
      current.u_req_cab_rev_date.setDateNumericValue(nextMon);
    }

    Um die Eingabe aller Datums-/Uhrzeitfelder zu validieren, können Sie Folgendes in einem Validierungsskript verwenden (Systemdefinition > Validierungsskripts) an. Da das Datums-/Uhrzeitformat in diesem Skript hartcodiert ist, muss es dem Datums-/Uhrzeitformat Ihrer Instanz entsprechen. Wenn sich das Datums-/Uhrzeitformat Ihrer Instanz ändert, müssen Sie Ihr Validierungsskript aktualisieren.

    Legen Sie den Typ des Validierungsskripts auf Datum/Uhrzeit fest. Wenn ein Benutzer bei Verwendung dieses Validierungsskripts ein falsches Format in ein Datums-/Uhrzeitfeld eingibt, wird eine Fehlermeldung angezeigt.
    function validate(value){
    // empty fields are still valid dates 
    if(!value)returntrue; 
     
    // We "should" have the global date format defined always defined. but there's always that edge case... 
    if(typeof g_user_date_time_format !=='undefined')return isDate(value, g_user_date_time_format); 
     
    // if we don't have that defined, we can always try guessing 
    return parseDate(value)!==null;}
    Abbildung : 1. Validierung von Datum/Uhrzeit