Glide-Server-APIs

  • Freigeben Version: Yokohama
  • Aktualisiert 30. Januar 2025
  • 11 Minuten Lesedauer
  • ServiceNow Stellt APIs für den Glide-Server bereit.

    GlideAggregat

    Die GlideAggregat Klasse ist eine Erweiterung von GlideRecord Und ermöglicht die Durchführung von Abfragen zur Datenbankzusammenfassung (ANZAHL, SUMME, MIN, MAX, Durchschnitt). Dies kann beim Erstellen anwenderdefinierter Berichte oder bei Berechnungen für berechnete Felder hilfreich sein.

    Hinweis:
    Diese Funktionalität erfordert JavaScript-Kenntnisse.

    Weitere Informationen finden Sie unter GlideAggregat API.

    GlideAggregate-Beispiele

    GlideAggregat Ist eine Erweiterung von GlideRecord Und seine Verwendung wird wahrscheinlich am besten anhand einer Reihe von Beispielen gezeigt.

    Hinweis:
    Diese Funktionalität erfordert JavaScript-Kenntnisse.

    Hier ist ein Beispiel, das einfach die Anzahl der Datensätze in einer Tabelle abruft:

    var count = new GlideAggregate('incident');
    count.addAggregate('COUNT');
    count.query();
    var incidents = 0;
    if(count.next()) 
       incidents = count.getAggregate('COUNT');

    Dem vorherigen Beispiel ist keine Abfrage zugeordnet. Wenn Sie eine Anzahl der offenen Incidents abrufen möchten, fügen Sie einfach wie mit eine Abfrage hinzu GlideRecord . Hier ist ein Beispiel, um eine Anzahl der aktiven Incidents abzurufen.

    var count = new GlideAggregate('incident');
    count.addQuery('active','true');
    count.addAggregate('COUNT');
    count.query();
    var incidents = 0;
    if(count.next()) 
       incidents = count.getAggregate('COUNT');

    Um die Anzahl aller offenen Incidents nach Kategorie abzurufen, lautet der Code:

    var count = new GlideAggregate('incident');
    count.addQuery('active','true');
    count.addAggregate('COUNT','category');
    count.query();
    while(count.next()){
      var category = count.category;
      var categoryCount = count.getAggregate('COUNT','category');
      gs.log("The are currently "+ categoryCount +" incidents with a category of "+ category);}

    Die Ausgabe ist:

     *** Script: The are currently 1.0 incidents with a category of Data  
           *** Script: The are currently 11.0 incidents with a category of Enhancement
           *** Script: The are currently 1.0 incidents with a category of Implementation
           *** Script: The are currently 197.0 incidents with a category of inquiry
           *** Script: The are currently 13.0 incidents with a category of Issue
           *** Script: The are currently 1.0 incidents with a category of 
           *** Script: The are currently 47.0 incidents with a category of request

    Das folgende Beispiel verwendet mehrere Zusammenfassungen, um zu sehen, wie oft Datensätze mit geändert wurden MIN , MAX , Und DURCHSCHN Werte.

    var count = new GlideAggregate('incident');
    count.addAggregate('MIN','sys_mod_count');
    count.addAggregate('MAX','sys_mod_count');
    count.addAggregate('AVG','sys_mod_count');
    count.groupBy('category');
    count.query();
    while(count.next()){
      var min = count.getAggregate('MIN','sys_mod_count');
      var max = count.getAggregate('MAX','sys_mod_count');
      var avg = count.getAggregate('AVG','sys_mod_count');
      var category = count.category.getDisplayValue();
      gs.log(category +" Update counts: MIN = "+ min +" MAX = "+ max +" AVG = "+ avg);}

    Die Ausgabe ist:

           *** Script: Data Import Update counts: MIN = 4.0 MAX = 21.0 AVG = 9.3333
           *** Script: Enhancement Update counts: MIN = 1.0 MAX = 44.0 AVG = 9.6711
           *** Script: Implementation Update counts: MIN = 4.0 MAX = 8.0 AVG = 6.0
           *** Script: inquiry Update counts: MIN = 0.0 MAX = 60.0 AVG = 5.9715
           *** Script: Inquiry / Help Update counts: MIN = 1.0 MAX = 3.0 AVG = 2.0
           *** Script: Issue Update counts: MIN = 0.0 MAX = 63.0 AVG = 14.9459
           *** Script: Monitor Update counts: MIN = 0.0 MAX = 63.0 AVG = 3.6561
           *** Script: request Update counts: MIN = 0.0 MAX = 53.0 AVG = 5.0987

    Das folgende ist ein komplexeres Beispiel, das zeigt, wie die Aktivität von einem Monat zum nächsten verglichen wird.

    var agg = new GlideAggregate('incident');
    agg.addAggregate('count','category'); 
    agg.orderByAggregate('count','category'); 
    agg.orderBy('category'); 
    agg.addQuery('opened_at','>=','javascript:gs.monthsAgoStart(2)'); 
    agg.addQuery('opened_at','<=','javascript:gs.monthsAgoEnd(2)'); 
    agg.query();
    while(agg.next()){
      var category = agg.category;
      var count = agg.getAggregate('count','category');
      var query = agg.getQuery();
      var agg2 = new GlideAggregate('incident');   
      agg2.addAggregate('count','category');
      agg2.orderByAggregate('count','category');
      agg2.orderBy('category');
      agg2.addQuery('opened_at','>=','javascript:gs.monthsAgoStart(3)');
      agg2.addQuery('opened_at','<=','javascript:gs.monthsAgoEnd(3)');
      agg2.addEncodedQuery(query);
      agg2.query();
      var last ="";
      while(agg2.next()){
         last = agg2.getAggregate('count','category');}
      gs.log(category +": Last month:"+ count +" Previous Month:"+ last);
     
    }

    Die Ausgabe ist:

     *** Script: Monitor: Last month:6866.0 Previous Month:4468.0
     *** Script: inquiry: Last month:142.0 Previous Month:177.0
     *** Script: request: Last month:105.0 Previous Month:26.0
     *** Script: Issue: Last month:8.0 Previous Month:7.0
     *** Script: Enhancement: Last month:5.0 Previous Month:5.0
     *** Script: Implementation: Last month:1.0 Previous Month:0

    Im Folgenden finden Sie ein Beispiel zum Abrufen einer eindeutigen Anzahl eines Felds in einer Gruppenabfrage.

    var agg = new GlideAggregate('incident');
    agg.addAggregate('count');
    agg.addAggregate('count(distinct','category');
    agg.addQuery('opened_at', '>=', 'javascript:gs.monthsAgoStart(2)');
    agg.addQuery('opened_at', '<=', 'javascript:gs.monthsAgoEnd(2)');
    //
    agg.groupBy('priority');
    agg.query();
    while (agg.next()) {
    // Expected count of incidents and count of categories within each priority value (group)
      gs.info('Incidents in priority ' + agg.priority + ' = ' + agg.getAggregate('count') + 
                ' (' + agg.getAggregate('count(distinct','category') + ' categories)');
    }

    Die Ausgabe ist:

    *** Script: Incidents in priority 1 = 13 (3 categories)
    *** Script: Incidents in priority 2 = 10 (5 categories)
    *** Script: Incidents in priority 3 = 5 (3 categories)
    *** Script: Incidents in priority 4 = 22 (6 categories)
    Sie können das SUMMENAGGREGAT mit oder ohne die Verwendung von implementieren Groupby() Methode. Wenn Sie nicht verwenden Groupby() Methode: Das Ergebnis der SUMME ist der kumulative Wert für jeden anderen Wert des Felds, für das Sie die SUMME anfordern. Beispiel: Wenn Sie das Feld total_Cost in der Tabelle „Anlagegut“ SUMMIEREN und die Tabelle „Anlagegut“ 12 Datensätze insgesamt enthält:
    • Drei Datensätze mit einem total_Cost von 12 USD
    • Vier Datensätze mit einem total_Cost von 10 USD
    • Fünf Datensätze mit einem total_Cost von 5 USD
    Wenn Sie den Datensatzsatz SUMMIEREN, wird GetAggregat() Methode gibt drei verschiedene Summen zurück: 36 $, 40 $ und 25 $.

    Der folgende Code veranschaulicht die Implementierung des SUMMENAGGREGATS ohne Verwendung von Groupby() Methode:

    var totalCostSum = new GlideAggregate('fixed_asset');
    totalCostSum.addAggregate('SUM', 'total_cost');
    totalCostSum.query();
     
    while (totalCostSum.next()) {
      var allTotalCost = 0;
      allTotalCost = totalCostSum.getAggregate('SUM', 'total_cost');
      aTotalCost = totalCostSum.getValue('total_cost');
      gs.print('Unique field value: ' + aTotalCost + ', SUM = ' + allTotalCost + ', ' + allTotalCost/aTotalCost + ' records');
    }

    Die Ausgabe für dieses Beispiel lautet:

    *** Script: Unique field value: 12, SUM = 36, 3 records
    *** Script: Unique field value: 10, SUM = 40, 4 records
    *** Script: Unique field value: 5, SUM = 25, 5 records

    Verwenden Sie dieselben Datenpunkte wie das vorherige Beispiel, wenn Sie verwenden Groupby() Methode: Das SUMMENAGGREGAT gibt die Summe aller Werte für das angegebene Feld zurück.

    Das folgende Beispiel veranschaulicht die Implementierung des SUMMENAGGREGATS mit Groupby() Methode:

    var totalCostSum = new GlideAggregate('fixed_asset');
    totalCostSum.addAggregate('SUM', 'total_cost');
    totalCostSum.groupBy('total_cost');
    totalCostSum.query();
    if(totalCostSum.next()){  // in case there is no result
       var allTotalCost = 0;
       allTotalCost = totalCostSum.getAggregate('SUM', 'total_cost');
       gs.print('SUM of total_cost: = ' + allTotalCost);
    }

    Die Ausgabe für dieses Beispiel lautet:

    *** Script: SUM of total_cost: 101

    GlideRecord

    GlideRecord Ist eine spezielle Java-Klasse ( GlideRecord.java ), die in JavaScript genau so verwendet werden kann, als wäre es eine native JavaScript-Klasse.

    GlideRecord :
    • Wird für Datenbankvorgänge verwendet, anstatt SQL-Abfragen zu schreiben.
    • Ist ein Objekt, das null oder mehr Datensätze aus einer Tabelle enthält. Eine andere Möglichkeit, dies zu sagen, besteht darin, dass ein GlideRecord eine geordnete Liste ist.

    Ein GlideRecord enthält sowohl Datensätze (Zeilen) als auch Felder (Spalten). Die Feldnamen sind mit den Namen der zugrunde liegenden Datenbankspalte identisch. Weitere Informationen finden Sie unter GlideRecord: Bereichsbezogen .

    Hinweis:
    Verwendung von gs.sql()) Skripting-Syntax wurde in eingestellt Geneva. Standard verwenden GlideRecord Syntax an ihrer Stelle.

    Mit GlideRecordSecure

    GlideRecordSecure Ist eine von geerbte Klasse GlideRecord Das die gleichen Funktionen wie ausführt GlideRecord , Und erzwingt auch ACLs.

    Nicht beschreibbare Felder

    Beachten Sie, dass bei Verwendung von GlideRecordSecure , Nicht beschreibbare Felder werden auf Null festgelegt, wenn versucht wird, in die Datenbank zu schreiben. Standardmäßig CanCreate() In der Spalte wird durch ersetzt CanWrite() In der Spalte. Wenn dies „falsch“ zurückgibt, wird der Spaltenwert auf Null festgelegt.

    Auf Null-Werte wird geprüft

    Wenn ein Element nicht gelesen werden kann, da eine ACL den Zugriff einschränkt, wird im Arbeitsspeicher für diesen Datensatz ein Null-Wert erstellt. Mit GlideRecord müssen Sie explizit nach ACLs suchen, die den Lesezugriff auf den Datensatz einschränken könnten. Dazu ist eine if-Anweisung wie die folgende erforderlich, um zu überprüfen, ob der Datensatz gelesen werden kann:
    if ( !grs.canRead() ) continue;
    Mit GlideRecordSecure , Sie müssen nicht explizit den Lesezugriff mit überprüfen CanRead() . Stattdessen können Sie verwenden Next() Selbst, um zum nächsten Datensatz zu wechseln. Das folgende Beispiel bietet einen Vergleich zwischen GlideRecord Und GlideRecordSecure .
    var count  = 0;
    var now_GR  = new GlideRecord('mytable');
    now_GR. query(); 
    while (now_GR. next()) { 
        if (!now_GR. canRead()) continue; 
        if (!now_GR. canWrite()) continue; 
        if (!now_GR. val. canRead() || !now_GR. val. canWrite())
            now_GR. val = null;
        else
            now_GR. val = "val-" + now_GR. id; 
        if (now_GR. update())
            count ++; 
    }
    var count  = 0; 
    var grs  = new GlideRecordSecure('mytable');
    grs. query(); 
    while (grs. next()) {
        grs. val = "val-" + grs. id; 
        if (grs. update())
            count ++; 
    }

    Beispiele

    Dies sind zwei einfache Beispiele für GlideRecordSecure .

    var att  = new GlideRecordSecure ('sys_attachment');
    att. get('$[sys_attachment.sys_id]'); 
    var sm  = GlideSecurityManager.get(); 
    var checkMe  = 'record/sys_attachment/delete'; 
    var canDelete  = sm.hasRightsTo(checkMe,att);
    gs. log('canDelete: ' + canDelete);
    canDelete;
    var grs = new GlideRecordSecure('task_ci');
    grs.addQuery();
    grs.query(); 
    var count  = grs. getRowCount(); 
    if (count  > 0 ) { 
        var allocation  = parseInt(10000/count) / 100;
        while (grs.next()) {
          grs.u_allocation = allocation;
          grs.update();
        }
    }

    GlideSystem

    Die GlideSystem API stellt Methoden zum Abrufen von Informationen bereit.

    Die GlideSystem (Referenziert durch Variablenname „ gs „ In Business-Regeln“ bietet eine Reihe praktischer Methoden, um Informationen über das System, den aktuell angemeldeten Anwender usw. zu erhalten Beispiel: Die Methode AddInfoMessage() Ermöglicht die Kommunikation mit dem Anwender.

     gs.addInfoMessage('Email address added for notification');

    Viele von GlideSystem Methoden erleichtern die einfache Aufnahme von Daten in Abfragebereiche und werden am häufigsten in Filtern und Berichten verwendet.

    Weitere Informationen finden Sie unter GlideSystem .

    GlideDateTime

    Die GlideDateTime Klasse stellt Methoden zum Ausführen von Vorgängen für bereit GlideDateTime Objekte, z. B. Instanziierung GlideDateTime Objekte oder arbeiten mit Glide_date_time Felder.

    Zusätzlich zu den unten beschriebenen Instanziierungsmethoden kann ein GlideDateTime-Objekt aus instanziiert werden Glide_date_time Feld mit GetGlideObject() Methode (z. B. VAR gdt = gr.my_datetime_field.getGlideObject(); ).

    Einige Methoden verwenden beim Abrufen oder Ändern eines Datums- und Uhrzeitwerts die Zeitzone der Java Virtual Machine. Die Verwendung dieser Methoden kann zu unerwartetem Verhalten führen. Verwenden Sie nach Möglichkeit entsprechende lokale Zeit- und UTC-Methoden.

    Beispiele für GlideDate und GlideDateTime

    Die GlideDate Und GlideDateTime APIs werden verwendet, um Datums- und Uhrzeitwerte zu bearbeiten.

    Hinweis:
    Diese Funktionalität erfordert JavaScript-Kenntnisse.

    Weitere Informationen finden Sie unter GlideDate API und GlideDateTime API.

    Sie können erstellen GlideDateTime Objekt aus GlideDate Objekt durch Übergabe von GlideDate Objekt als Parameter für GlideDateTime Konstruktor. Standardmäßig ist GlideDateTime Objekt wird im internen Format JJJJ-MM-tt HH:mm:ss und in der Systemzeitzone UTC ausgedrückt.
    var gDate = new GlideDate();
    gDate.setValue('2015-01-01');
    gs.info(gDate);
     
    var gDT = new GlideDateTime(gDate);
    gs.info(gDT);
    Ausgabe:
    2015-01-01
    2015-01-01 00:00:00

    Siehe auch Ändern Sie einen GlideDateTime-Feldwert.

    Legen Sie einen Wert für das Feld „Dauer“ im Skript fest

    Beispiele für JavaScript, das zum Festlegen des Werts eines Dauerfelds verwendet werden kann.

    Hinweis:
    Negative Dauerwerte werden nicht unterstützt.

    Mit der Methode „GlideDateTime.subtract()“

    Die Abziehen (GlideDateTime Start, GlideDateTime End) Methode in GlideDateTime Ermöglicht Ihnen das Festlegen des Werts für die Dauer anhand eines bestimmten Startdatums/einer bestimmten Startzeit und eines Enddatums/einer bestimmten Endzeit. Ein Beispiel zum Festlegen der Dauer für die Zeit, zu der eine Aufgabe geöffnet wurde:
    var duration = GlideDateTime.subtract(start, end);
    Wenn Sie mit dem als Zahl zurückgegebenen Wert arbeiten möchten, der in der Datums- oder Dauerarithmetik verwendet werden soll, konvertieren Sie die Rückkehr in Millisekunden:
    var time = GlideDateTime.subtract(start,end).getNumericValue();
    
    Wenn Sie eine Dauer auf den Zeitraum zwischen einem Ereignis und dem aktuellen Datum/der aktuellen Uhrzeit festlegen möchten:
    <duration_field> = GlideDateTime.subtract(new GlideDateTime(<start_time>.getValue()),gs.nowDateTime());

    Die Zeitwerte, die angezeigt werden GlideDateTime.Abziehen Wird erwartet, dass sie sich in der Zeitzone des Anwenders und im Format des Anwenders befinden.

    Festlegen eines Standardwerts für ein Feld „Dauer“

    Das Festlegen des Standardwerts für ein Feld „Dauer“ ähnelt der im vorherigen Thema verwendeten Methode.

    Festlegen des Felds „Dauer“ in einem Client-Skript

    Dieses Skript legt einen fest Duration_field Wert in einem Client-Skript. Ersetzen Duration_field Mit dem Feldnamen aus Ihrer Instanz.
    g_form.setValue('<duration_field>','11 01:02:03');

    Berechnen und Festlegen einer Dauer mithilfe eines Client-Skripts

    Hier ist ein Beispiel dafür, wie ein Wert zurückgegeben und mit einem Clientskript ausgefüllt wird.

    Erstellen Sie einen OnChange Client-Skript, das den folgenden Code enthält. Sie können dieses Skript ändern, wenn die Berechnung in einer erfolgen soll ONLOAD Skript oder auf andere Weise.
    function onChange(control, oldValue, newValue, isLoading){
    var strt = g_form.getValue('<start_field>');
    var end = g_form.getValue('<end_field>');
    var ajax = new GlideAjax('AjaxDurCalc');
      ajax.addParam('sysparm_name','durCalc');
      ajax.addParam('sysparm_strt',strt);
      ajax.addParam('sysparm_end',end);
      ajax.getXMLWait();
      var answer = ajax.getAnswer();
      g_form.setValue('<duration_field>', answer);}
    Erstellen Sie eine Systemskripteinbindungsdatei namens AjaxDurCalc Die die Anforderung verarbeitet. Es kann auch für andere Funktionen wiederverwendet werden.
    var AjaxDurCalc = Class.create();
    AjaxDurCalc.prototype = Object.extendsObject(AbstractAjaxProcessor,{
     durCalc:function(){return GlideDuration.subtract(this.getParameter('sysparm_strt'),this.getParameter('sysparm_end'));}});

    Ändern des Felds „Dauer“

    Wenn Sie einen Wert für die Dauer mit Addition/Subtraktion einer gewissen Zeit bearbeiten, verwenden Sie die Funktionen, mit denen Sie den numerischen Wert der Dauer abrufen und festlegen können. Eine Maßeinheit für einen numerischen Dauerwert ist Millisekunden. Das folgende Beispiel fügt 11 Sekunden zu hinzu Dauer Feld im aktuellen Datensatz.
    var timems = current.duration.dateNumericValue();
    timems = timems + 11*1000; 
    current.duration.setDateNumericValue(timems);

    Formatieren der Lösungszeit

    Zum Formatieren von Lösungszeit Oder Geschäftslösungszeit Felder als Dauer, die als Dauer anstelle einer großen Ganzzahl angezeigt werden, fügen Sie diesen Feldern das folgende Attribut hinzu:
    format=glide_duration

    Ändern Sie den Wörterbucheintrag für das Feld, und fügen Sie das Attribut hinzu. Wenn ein Attribut vorhanden ist, trennen Sie mehrere Attribute durch Kommas.

    Einstellung der maximalen Maßeinheit

    Die max_unit Wörterbuchattribut definiert die maximale Zeiteinheit, die in einer Dauer verwendet wird. Beispiel: Wenn max_unit=Minuten , Wird eine Dauer von 3 Stunden 5 Minuten 15 Sekunden als 185 Minuten 15 Sekunden angezeigt. Um die maximale Maßeinheit für die Dauer festzulegen, fügen Sie dem das folgende Wörterbuchattribut hinzu Dauer Feld:
    max_unit=<unit>

    Richtlinien für Datums- und Uhrzeitformat

    Sie können ein Datumsformat mit einer Sequenz bestimmter Datums- und Zeitmusterzeichenfolgen angeben. Eine Musterzeichenfolge besteht aus einem oder mehreren Groß- und Kleinbuchstaben von A bis Z. Jeder Text in Anführungszeichen wird ignoriert und stattdessen in die Datumsausgabe kopiert.

    Zeichenfolge Beschreibung Ausgabeformat Beispiel
    G ERA-Bezeichner Text AD
    y Jahr Jahr 2019; 19
    Y Woche im Jahr Jahr 2019; 19
    M Monat im Jahr (innerhalb des Datums) Monat Juli; Juli; Juli; 07
    L Monat im Jahr (eigenständiger Wert) Monat Juli; Juli; Juli; 07
    w Woche im Jahr Nummer 52
    M Woche im Monat Nummer 1
    D Tag im Jahr Nummer 365
    d Tag im Monat Nummer 2
    F Wochentag im Monat Nummer 3
    E Tagesname in Woche Text Mittwoch; Mi
    u Wochentagsnummer Nummer 3
    a Morgens oder p.m. Text Nachmittags
    H Stunde in Tag von 0 bis 23 Nummer 0
    k Stunde in Tag von 1 bis 24 Nummer 24
    Tsd. Stunde in morgens oder abends von 0 bis 11 Nummer 0
    S Stunde in morgens oder nachmittags von 1 bis 12 Nummer 12
    m Minute in Stunde Nummer 59
    s Sekunde in Minute Nummer 1
    S Millisekunde Nummer 500
    z Zeitzone im Standardformat Zeitzone im Standardformat Pazifik-Normalzeit; PST
    Z Zeitzone im RFC 822-Format Zeitzone im RFC 822-Format -0800
    X Zeitzone im ISO 8601-Format Zeitzone im ISO 8601-Format -08; -0800; -08:00