Glide-Server-APIs
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.
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.
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 requestDas 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.0987Das 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:0Im 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)- 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
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 recordsVerwenden 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: 101GlideRecord
GlideRecord Ist eine spezielle Java-Klasse ( GlideRecord.java ), die in JavaScript genau so verwendet werden kann, als wäre es eine native JavaScript-Klasse.
- 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 .
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
if ( !grs.canRead() ) continue;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.
Weitere Informationen finden Sie unter GlideDate API und GlideDateTime API.
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:00Siehe 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.
Mit der Methode „GlideDateTime.subtract()“
var duration = GlideDateTime.subtract(start, end);var time = GlideDateTime.subtract(start,end).getNumericValue();
<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
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.
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);}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“
var timems = current.duration.dateNumericValue();
timems = timems + 11*1000;
current.duration.setDateNumericValue(timems);Formatieren der Lösungszeit
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
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 |