Optional – Scoped, Global
Die optionale API interagiert mit einem einzelnen Datensatz, der von den APIs GlideQuery, Streamoder GlideRecord zurückgegeben wird, auch wenn dieser nicht vorhanden ist. Schreiben Sie Skripts, die weniger wahrscheinlich zu einem Fehler führen, indem Sie Null- oder undefinierte Abfrageergebnisse behandeln.
Sie können ein optionales Objekt auf folgende Weise abrufen:
- Geben Sie ein optionales Objekt aus diesen Methoden in der GlideQuery -Klasse zurück. Weitere Informationen finden Sie unter GlideQuery.
- Geben Sie ein optionales Objekt aus der find()- Methode in der Stream -Klasse zurück. Weitere Informationen zu Streamfinden Sie in der Stream -API.
- Verwenden Sie bei Bedarf die Methode lazy(), um den Wert von Optional zu generieren.
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 den APIs „ GlideQuery“ und „ Stream “ in einem Generatormuster, bei dem die Methodenaufrufe miteinander verkettet sind und 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.verwendet werden.
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 jeder API 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 mehr als vier Neuzuweisungen 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");
});Priority 1: 11 reassignments
Priority 3: 6 reassignments
Priority 5: 5 reassignmentsTerminal-Methoden
Aus Leistungsgründen ruft eine Abfrage nur Daten ab, wenn Sie eine Terminal-Methode aufrufen. Dies sind die Terminal-Methoden aus der optionalen Klasse:
Optional – empty(String reason)
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.
| Name | Typ | Beschreibung |
|---|---|---|
| reason | Zeichenfolge | Optional. Grund, der im Protokoll angezeigt wird, wenn Optional.get() für das leere Optional-Objekt aufgerufen wird. |
| Typ | Beschreibung |
|---|---|
| Optional | Objekt, das für die Interaktion mit einem einzelnen Datensatz verwendet wird. |
Dieses Beispiel zeigt, 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(Function predicate)
Wendet eine Prädikatfunktion (eine Funktion, die einen einzelnen Wert annimmt und „true“ oder „false“ 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, wird ein leeres optionales Objekt zurückgegeben.
| Name | Typ | Beschreibung |
|---|---|---|
| Prädikat | Funktion | Prädikatfunktion, die auf den Wert innerhalb des optionalen Objekts angewendet werden soll. Muss einen booleschen Wert zurückgeben. |
| Typ | Beschreibung |
|---|---|
| Optional | Objekt, das für die Interaktion mit einem einzelnen Datensatz verwendet wird. |
Dieses Beispiel zeigt, 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(Function fn)
Wendet eine Funktion, die ein optionales Objekt zurückgibt, auf das Ergebnis einer Abfrage an. Verwenden Sie diese Methode, um eine zweite Abfrage mit dem Ergebnis der ersten durchzuführen.
| Name | Typ | Beschreibung |
|---|---|---|
| fn | Funktion | Funktion zum Anwenden von auf die Ergebnisse der Abfrage, die das optionale Objekt zurückgegeben hat. |
| Typ | Beschreibung |
|---|---|
| Optional | Objekt, das für die Interaktion mit einem einzelnen Datensatz verwendet wird. |
Dieses Beispiel zeigt, wie eine Abfrage der Benutzertabelle 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.
| Name | Typ | Beschreibung |
|---|---|---|
| Keine |
| Typ | Beschreibung |
|---|---|
| Beliebig | Der Datensatz im optionalen Objekt. Wenn der Wert NULL oder undefiniert ist, gibt das System einen Fehler aus. |
Dieses Beispiel zeigt, 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(Function fn)
Wendet eine Funktion auf den Datensatz in einem optionalen Objekt an. Wenn das optionale Objekt keinen Datensatz enthält, wird die Funktion nicht ausgeführt.
| Name | Typ | Beschreibung |
|---|---|---|
| fn | Funktion | Die Funktion, die auf den Datensatz innerhalb des optionalen Objekts angewendet werden soll. |
| Typ | Beschreibung |
|---|---|
| Keine |
Dieses Beispiel zeigt, 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 „true“ zurück, wenn das optionale Objekt leer ist.
| Name | Typ | Beschreibung |
|---|---|---|
| Keine |
| Typ | Beschreibung |
|---|---|
| Boolean | Kennzeichnung, die angibt, ob das Ergebnis einer Abfrage einen Wert enthält. Gültige Werte:
|
Dieses Beispiel zeigt, 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.
| Name | Typ | Beschreibung |
|---|---|---|
| Keine |
| Typ | Beschreibung |
|---|---|
| Boolean | Kennzeichnung, die angibt, ob das Ergebnis einer Abfrage einen Wert enthält. Gültige Werte:
|
Dieses Beispiel zeigt, 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 optionales Objekt zurück. Anstatt den Datensatz zu enthalten, enthält das Objekt eine Funktion zum Abrufen des Datensatzes, die nur aufgerufen wird, wenn dies 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 aus 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.
| Name | Typ | Beschreibung |
|---|---|---|
| lazyGetFn | Funktion | Funktion, die einen einzelnen Datensatz als Ergebnis einer Abfrage zurückgibt. Beispiel: |
| Typ | Beschreibung |
|---|---|
| Optional | Objekt, das das Ergebnis der Abfrage im Format Optionalenthält<result> . |
Dieses Beispiel zeigt, 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(Function fn)
Wendet eine Funktion auf das Ergebnis einer Abfrage an.
| Name | Typ | Beschreibung |
|---|---|---|
| fn | Funktion | Funktion, die auf das Ergebnis der Abfrage angewendet werden soll. |
| Typ | Beschreibung |
|---|---|
| Optional | Objekt, das die Ergebnisse der von der Funktion aktualisierten Abfrage im optionalenFormat enthält<result> . |
Dieses Beispiel zeigt, wie eine Funktion angewendet wird, die einen Wert in Großbuchstaben auf das Ergebnis einer Abfrage 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 – of(Any value)
Umschließt einen gegebenen 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.
| Name | Typ | Beschreibung |
|---|---|---|
| Wert | Beliebig | Wert innerhalb des optionalen Objekts. |
| Typ | Beschreibung |
|---|---|
| Optional | Objekt, das den übergebenen Wert im Format Optionalenthält<value> . |
Dieses Beispiel zeigt, wie Sie ein optionales Objekt basierend auf einer GlideRecord-Abfrage 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.
| Name | Typ | Beschreibung |
|---|---|---|
| defaultValue | Beliebig | Wert innerhalb des optionalen Objekts, wenn die Abfrage keine Ergebnisse zurückgibt. |
| Typ | Beschreibung |
|---|---|
| Beliebig | Wert innerhalb des optionalen Objekts, wenn die Abfrage keine Ergebnisse zurückgibt. |
Dieses Beispiel zeigt, wie Sie einen Wert zurückgeben, 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"
}