Optional: Bereichsbezogen, Global

  • Freigeben Version: Yokohama
  • Aktualisiert 30. Januar 2025
  • 8 Minuten Lesedauer
  • Die optionale API interagiert mit einem einzelnen Datensatz, der von der GlideQuery-, Stream-oder GlideRecord -API zurückgegeben wird, auch wenn er nicht vorhanden ist. Schreiben Sie Skripts, bei denen die Wahrscheinlichkeit geringer ist, dass ein Fehler auftritt, indem Sie NULL-Ergebnisse oder nicht definierte Abfrageergebnisse behandeln.

    Sie können ein optionales Objekt wie folgt abrufen:

    Diese Methoden sind statisch und erfordern keine Instanz der Klasse:

    Sie können diese statischen Methoden mit jeder API verwenden, die einen einzelnen Wert zurückgibt, z. B. GlideRecord.

    Verwenden Sie die optionale API in bereichsbezogenen oder globalen serverseitigen Skripts. Diese API erfordert das Plugin „GlideQuery“ [com.sn_glidequery].

    Implementierung

    Diese API kann mit der GlideQuery- und der Stream -API in einer Builder-Muster, bei dem die Methodenaufrufe verkettet sind, wobei jede Methode auf dem zurückgegebenen Ergebnis der vorherigen Methode aufbaut. Verwenden Sie Methoden, um die Attribute der Abfrage zu definieren. Die Methoden werden erst ausgeführt, wenn Sie eine Terminalmethode aufrufen, eine Methode, die ein Abfrageergebnis zurückgibt, sodass Sie die Anforderungen der Abfrage definieren können, bevor Sie sie ausführen.-Komponente arbeiten.

    Wenn die Abfrage einen einzelnen Datensatz zurückgibt, umschließt das System das Ergebnis in ein optionales Objekt. Wenn die Abfrage einen Stream von Datensätzen zurückgibt, umschließt das System das Ergebnis in einem Stream-Objekt. Mit diesen Objekten können Sie das Ergebnis mithilfe einer Reihe von Methoden in den einzelnen APIs verwalten.

    Dieses Skript führt beispielsweise eine Abfrage in der Aufgabentabelle aus, gruppiert die Datensätze nach Priorität und gibt jede Priorität zurück, die insgesamt Neuzuweisungen von mehr als vier aufweist.

    var query = new global.GlideQuery('task')
        .where('active', true) //Returns new GlideQuery object with a "where" clause.
        .groupBy('priority') //Returns new GlideQuery object with a "group by" clause.
        .aggregate('sum', 'reassignment_count') //Returns new GlideQuery object with a "sum(reassignment_count)" clause.
        .having('sum', 'reassignment_count', '>', 4) //Returns new GlideQuery object with a "having reassignment_count > 4" clause.
        .select() //Returns a stream of records wrapped in a Stream object.  
        .forEach(function (priority){ //Terminal method in the Stream class that executes the query and returns the result. 
          gs.info("Priority " + priority.group.priority + ": " + priority.sum.reassignment_count + " reassignments");
        });
    Ausgabe:
    Priority 1: 11 reassignments
    Priority 3: 6 reassignments
    Priority 5: 5 reassignments

    Terminalmethoden

    Aus Leistungsgründen ruft eine Abfrage Daten nur ab, wenn Sie eine Terminal-Methode aufrufen. Dies sind die Terminalmethoden aus der Klasse „Optional“ :

    Optional – leer (Zeichenfolgegrund)

    Gibt ein leeres optionales Objekt zurück. Verwenden Sie diese Methode in einer Else-Klausel, um eine Abfrage zu verarbeiten, die möglicherweise kein Ergebnis zurückgibt.

    Hinweis:
    Diese Methode ist statisch. Sie benötigen keine Instanz der -Klasse, um diese Methode zu verwenden.
    Tabelle : 1. Parameter
    Name Typ Beschreibung
    reason Zeichenfolge Optional. Grund, der im Protokoll angezeigt wird, wenn „Optional.get()“ für das leere Optional-Objekt aufgerufen wird.
    Tabelle : 2. Rückgaben
    Typ Beschreibung
    Optional Objekt, das für die Interaktion mit einem einzelnen Datensatz verwendet wird.

    In diesem Beispiel wird gezeigt, wie Sie ein leeres Optional-Objekt generieren, wenn eine Abfrage kein Ergebnis zurückgibt.

    var now_GR = new GlideRecord('task');
    now_GR.addQuery('approval', 'not requested'); 
    now_GR.query();
    var optional;
    if (now_GR.next()) {
    optional = Optional.of(now_GR.getUniqueValue());
    } else {
        optional = Optional.empty("no results");
    }
    
    gs.info(optional.get());

    Ausgabe:

    NiceError: [2020-08-26T23:23:37.402Z]: get() called on empty Optional: no results

    Optional: Filter (Funktionsprädikat)

    Wendet eine Prädikatfunktion – eine Funktion, die einen einzelnen Wert annimmt und wahr oder falsch zurückgibt – auf den Datensatz im optionalen Objekt an. Wenn die Funktion „true“ zurückgibt, gibt die Methode den optionalen Datensatz unverändert zurück. Wenn die Funktion „false“ zurückgibt, gibt sie ein leeres optionales Objekt zurück.

    Tabelle : 3. Parameter
    Name Typ Beschreibung
    Prädikat Funktion Prädikatfunktion, die auf den Wert im optionalen Objekt angewendet werden soll. Muss einen booleschen Wert zurückgeben.
    Tabelle : 4. Rückgaben
    Typ Beschreibung
    Optional Objekt, das für die Interaktion mit einem einzelnen Datensatz verwendet wird.

    In diesem Beispiel wird gezeigt, wie Sie eine Filterfunktion auf ein optionales Ergebnis anwenden.

    var filteredQuery = new global.GlideQuery('sys_user')
        .getBy({ sys_id: 'f682abf03710200044e0bfc8bcbe5d38' }, ['phone'])
        .filter(function (user) {
            return phoneRegex.test(user.phone);
        });

    Optional: FlatMap(Funktion fn)

    Wendet eine Funktion an, die ein optionales Objekt auf das Ergebnis einer Abfrage zurückgibt. Verwenden Sie diese Methode, um eine zweite Abfrage mit dem Ergebnis der ersten durchzuführen.

    Tabelle : 5. Parameter
    Name Typ Beschreibung
    Fn Funktion Funktion zum Anwenden von auf die Ergebnisse der Abfrage, die das optionale Objekt zurückgegeben hat.
    Tabelle : 6. Rückgaben
    Typ Beschreibung
    Optional Objekt, das für die Interaktion mit einem einzelnen Datensatz verwendet wird.

    Dieses Beispiel zeigt, wie eine Abfrage der Anwendertabelle basierend auf dem Ergebnis einer vorherigen Abfrage ausgeführt wird.

    new global.GlideQuery('alm_asset')
        .whereNotNull('owned_by')
        .selectOne('owned_by')
        .flatMap(function (asset) {
            return new global.GlideQuery('sys_user')
                .getBy({ sys_id: asset.owned_by }, ['first_name', 'last_name', 'company.name'])
        })
        .ifPresent(GQ.jsonDebug);

    Ausgabe:

    {
      "sys_id": "46d59205a9fe198101d603f5de37bfa3",
      "first_name": "John",
      "last_name": "Bohnhamn",
      "company": {
        "name": "ACME North America"
      }
    }

    Optional: get()

    Gibt den Datensatz innerhalb des optionalen Objekts zurück oder löst einen Fehler aus, wenn die Abfrage keinen Datensatz zurückgibt.

    Tabelle : 7. Parameter
    Name Typ Beschreibung
    Keine
    Tabelle : 8. Ergebnisse
    Typ Beschreibung
    Beliebig Der Datensatz innerhalb des optionalen Objekts. Wenn der Wert NULL oder nicht definiert ist, gibt das System einen Fehler aus.

    In diesem Beispiel wird gezeigt, wie der Wert eines einzelnen Datensatzes abgerufen wird.

    var value = new global.GlideQuery('sys_user')
        .selectOne('first_name') //Returns the result of the query inside an Optional object
        .get(); //Calls Optional.get() on the Optional object
    
    gs.info(JSON.stringify(value));

    Ausgabe:

    {
       "first_name":"fred",
       "sys_id":"005d500b536073005e0addeeff7b12f4"
    }

    Optional - ifPresent(Funktion fn)

    Wendet eine Funktion auf den Datensatz innerhalb eines optionalen Objekts an. Wenn das optionale Objekt keinen Datensatz enthält, wird die Funktion nicht ausgeführt.

    Tabelle : 9. Parameter
    Name Typ Beschreibung
    Fn Funktion Die Funktion, die auf den Datensatz innerhalb des optionalen Objekts angewendet werden soll.
    Tabelle : 10. Rückgaben
    Typ Beschreibung
    Keine

    In diesem Beispiel wird gezeigt, wie ein vorhandener Wert gedruckt wird.

    var user = new global.GlideQuery('sys_user')
        .where('sys_id', 'f682abf03710200044e0bfc8bcbe5d38')
        .selectOne('zip')
        .ifPresent(function (user) {
          gs.info('Zip Code: ' + user.zip);
        });

    Optional: isEmpty()

    Gibt „wahr“ zurück, wenn das optionale Objekt leer ist.

    Tabelle : 11. Parameter
    Name Typ Beschreibung
    Keine
    Tabelle : 12. Ergebnisse
    Typ Beschreibung
    Boolean

    Kennzeichnung, die angibt, ob das Ergebnis einer Abfrage einen Wert enthält.

    Gültige Werte:
    • wahr: Die Abfrage gibt NULL oder undefiniert zurück.
    • „falsch“: Die Abfrage gibt einen Wert zurück.

    In diesem Beispiel wird gezeigt, wie überprüft wird, ob das Ergebnis einer Abfrage leer ist.

    var checkEmpty = new global.GlideQuery('sys_user')
        .where('last_name', 'Barker')
        .selectOne()
        .isEmpty();
    
    gs.info(checkEmpty);

    Ausgabe:

    true

    Optional: isPresent()

    Überprüft, ob ein optionales Objekt einen Wert enthält.

    Tabelle : 13. Parameter
    Name Typ Beschreibung
    Keine
    Tabelle : 14. Ergebnisse
    Typ Beschreibung
    Boolean

    Kennzeichnung, die angibt, ob das Ergebnis einer Abfrage einen Wert enthält.

    Gültige Werte:
    • wahr: Die Abfrage gibt einen Wert zurück.
    • false: Die Abfrage gibt NULL oder undefiniert zurück.

    In diesem Beispiel wird gezeigt, wie überprüft wird, ob eine Abfrage ein Ergebnis zurückgibt.

    var checkPresent = new global.GlideQuery('sys_user')    
       .where('last_name', 'Luddy')
       .selectOne('first_name')
       .isPresent();
    
    gs.info(checkPresent);

    Ausgabe:

    true

    Optional – lazy(Function lazyGetFn)

    Gibt ein neues Optional-Objekt zurück. Anstatt den Datensatz zu enthalten, enthält das Objekt eine Funktion zum Abrufen des Datensatzes, die nur dann aufgerufen wird, wenn sie im Code angefordert wird.

    Verwenden Sie diese Methode, um das Abrufen des Werts zu verzögern, bis er benötigt wird. Sie können dies tun, wenn Sie den Wert von einer langsamen Quelle anfordern und Ihren Code nicht unnötig verlangsamen möchten. Andernfalls können Sie mithilfe der GlideQuery- und Stream -APIs ein optionales Objekt zurückgeben.

    Hinweis:
    Diese Methode ist statisch. Sie benötigen keine Instanz der -Klasse, um diese Methode zu verwenden.
    Tabelle : 15. Parameter
    Name Typ Beschreibung
    lazyGetFn Funktion Funktion, die einen einzelnen Datensatz als Ergebnis einer Abfrage zurückgibt. Zum Beispiel:
    var userGr = new GlideRecord('sys_user');
    Tabelle : 16. Rückgaben
    Typ Beschreibung
    Optional Objekt, das das Ergebnis der Abfrage im Format „Optional“enthält<result> .

    In diesem Beispiel wird gezeigt, wie ein optionales Objekt basierend auf einer GlideRecord-Abfrage abgerufen wird.

    var userOptional = global.Optional.lazy(function () {
        var userGr = new GlideRecord('sys_user');
        userGr.setLimit(1);
        userGr.query();
        return userGr.next() ? userGr.getUniqueValue() : null;
    });
    
    gs.info(userOptional);

    Ausgabe:

    Optional<005d500b536073005e0addeeff7b12f4>

    Optional: map(Funktion fn)

    Wendet eine Funktion auf das Ergebnis einer Abfrage an.

    Tabelle : 17. Parameter
    Name Typ Beschreibung
    Fn Funktion Funktion, die auf das Ergebnis der Abfrage angewendet werden soll.
    Tabelle : 18. Rückgaben
    Typ Beschreibung
    Optional Objekt mit den Ergebnissen der von der Funktion aktualisierten Abfrage im Format „Optional“.<result> .

    In diesem Beispiel wird gezeigt, wie eine Funktion angewendet wird, die einen Wert auf das Ergebnis einer Abfrage in Großbuchstaben umwandelt.

    var value = new global.GlideQuery('sys_user')
        .whereNotNull('first_name')
        .selectOne('first_name')
        .map(function (user) {
    	       return user.first_name.toUpperCase();
        });
    
    gs.info(value);

    Ausgabe:

    Optional<ABEL>

    Optional – von (beliebiger Wert)

    Umschließt einen bestimmten Wert in ein optionales Objekt. Sie können beispielsweise das Ergebnis einer GlideRecord-Abfrage in ein optionales Objekt einschließen, um die zugehörigen Methoden zu verwenden.

    Hinweis:
    Diese Methode ist statisch. Sie benötigen keine Instanz der -Klasse, um diese Methode zu verwenden.
    Tabelle : 19. Parameter
    Name Typ Beschreibung
    Wert Beliebig Wert innerhalb des optionalen Objekts.
    Tabelle : 20. Rückgaben
    Typ Beschreibung
    Optional Objekt, das den übergebenen Wert im Format „Optional“enthält<value> .

    In diesem Beispiel wird gezeigt, wie Sie basierend auf einer GlideRecord-Abfrage ein optionales Objekt generieren.

    var now_GR = new GlideRecord('task');
    now_GR.addQuery('approval', 'not requested'); 
    now_GR.query();
    var optional;
    if (now_GR.next()) {
    optional = Optional.of(now_GR.getUniqueValue());
    } else {
        optional = Optional.empty("no results");
    }
    
    gs.info(optional.get());

    Ausgabe:

    00c269162d761010f87708b56757cbb3

    Optional - orElse(Any defaultValue)

    Fügt einen Standardwert innerhalb des optionalen Objekts hinzu, wenn die Abfrage keine Ergebnisse zurückgibt.

    Tabelle : 21. Parameter
    Name Typ Beschreibung
    defaultValue Beliebig Wert innerhalb des optionalen Objekts, wenn die Abfrage keine Ergebnisse zurückgibt.
    Tabelle : 22. Rückgaben
    Typ Beschreibung
    Beliebig Wert innerhalb des optionalen Objekts, wenn die Abfrage keine Ergebnisse zurückgibt.

    In diesem Beispiel wird gezeigt, wie ein Wert zurückgegeben wird, auch wenn die Abfrage falsch ist.

    var user = new global.GlideQuery('sys_user')
        .get('1234', ['first_name', 'last_name'])
        .orElse({ first_name: 'Default', last_name: 'User' });
    
    gs.info(JSON.stringify(user))

    Ausgabe:

    {
       "first_name":"Default",
       "last_name":"User"
    }