Klassische Business-Regeln
Eine Business Rule ist ein serverseitiges Skript, das ausgeführt wird, wenn ein Datensatz angezeigt, eingefügt, aktualisiert oder gelöscht wird oder eine Tabelle abgefragt wird.
Funktionsweise von Business-Regeln
Um Business-Regeln zu konfigurieren, müssen Sie zuerst bestimmen, wann die Business-Regel ausgeführt werden soll und welche Aktion sie ausführen soll.
Wenn Business-Regeln ausgeführt werden
- Wann die Business-Regel in Bezug auf einen Datenbankvorgang ausgeführt werden soll.
- Für welchen Datensatzvorgang die Business-Regel gilt.
| Option | Wann die Regel ausgeführt wird |
|---|---|
| vor | Nachdem der Anwender das Formular übermittelt hat, aber bevor eine Aktion für den Datensatz in der Datenbank ausgeführt wird. |
| nach | Nachdem der Anwender das Formular übermittelt hat und nachdem eine Aktion für den Datensatz in der Datenbank ausgeführt wurde. |
| Asynchron | Nachdem der Anwender das Formular übermittelt hat und nachdem der Planer die geplante Aufgabe ausgeführt hat, die aus der Business-Regel erstellt wurde. Das System erstellt eine geplante Aufgabe aus der Business-Regel, nachdem der Anwender das Formular übermittelt hat, aber bevor eine Aktion für den Datensatz in der Datenbank ausgeführt wird. Hinweis: Neu erstellte Business-Regeln werden während Upgrades ausgeführt. Wenn ein Datensatz über eine asynchrone Business-Regel verfügt, die Entscheidungen basierend auf den Daten im Datensatz trifft, können mehrere Aktualisierungen des Datensatzes in schneller Folge dazu führen, dass die Business-Regel falsch oder falsch ausgeführt wird. Wenn mehrere asynchrone Business-Regeln denselben Datensatz aktualisieren, können die von einem Skript durchgeführten Updates von einem anderen Skript überschrieben oder in einer unerwarteten Reihenfolge vorgenommen werden, da die Ausführungsreihenfolge nicht garantiert ist. Sie können die Option nach für Business-Regeln oder verwenden System Events Als Alternative in diesen Situationen. |
| Bildschirm | Bevor dem Anwender das Formular angezeigt wird, direkt nachdem die Daten aus der Datenbank gelesen wurden. |
- Asynchrone Business-Regeln haben keinen Zugriff auf die vorherige Version eines Datensatzes. Daher wird Changes() , ChangesTo() , Und Changesfrom() GlideElement Methoden funktionieren nicht mit asynchronem Regelskript. Der Bedingungsgenerator und das Bedingungsfeld (erweiterte Ansicht) unterstützen jedoch beide Changes() , ChangesTo() , Und Changesfrom() Methoden.
- Business-Regeln berücksichtigen ACLs erst, wenn Sie möchten, dass sie berücksichtigt werden. Weitere Informationen finden Sie unter Beziehung zwischen Geschäftsregeln und Zugriffssteuerungsregeln (ACLs)
| Option | Wann die Regel ausgeführt wird |
|---|---|
| Einfügen | Wenn der Anwender einen neuen Datensatz erstellt und das System ihn in die Datenbank einfügt. |
| Aktualisieren | Wenn der Anwender einen vorhandenen Datensatz ändert. |
| Abfrage | Wenn der Anwender einen Datensatz oder eine Liste von Datensätzen abfragt. Normalerweise sollten Sie den Abfragevorgang für vor Business-Regeln verwenden. Nur Abfrage-Business-Regeln in der abgefragten Tabelle werden ausgeführt – keine Abfrage-Business-Regeln in den Tabellen von Referenzfeldern. |
| Löschen | Wenn der Anwender einen Datensatz löscht. |
Business-Regel-Aktionen
- Ändern von Feldwerten in einem Formular, das der Anwender aktualisiert. Feldwerte können auf bestimmte Werte festgelegt werden, die für dieses Feld verfügbar sind, Werte, die aus anderen Feldern kopiert wurden, und relative Werte, die durch die Rolle des Anwenders bestimmt werden.
- Dem Anwender werden Informationsnachrichten angezeigt.
- Ändern von Werten untergeordneter Aufgaben basierend auf Änderungen an übergeordneten Aufgaben.
- Verhindern, dass Anwender auf bestimmte Felder in einem Formular zugreifen oder diese ändern.
- Die aktuelle Datenbanktransaktion wird abgebrochen. Wenn beispielsweise bestimmte Bedingungen erfüllt sind, verhindern Sie, dass der Anwender den Datensatz in der Datenbank speichert.
Rekursive Business-Regeln verhindern
Vermeiden Sie die Verwendung Aktuell.Update() In einem Business-Regel-Skript. Die Aktualisieren () Die Methode löst die Ausführung von Business-Regeln in derselben Tabelle für Einfüge- und Aktualisierungsvorgänge aus, was dazu führt, dass sich eine Business-Regel immer wieder aufruft. Änderungen, die in vor Business-Regeln vorgenommen wurden, werden automatisch gespeichert, wenn alle vor-Business-Regeln und nach-Business-Regeln am besten zum Aktualisieren zugehöriger, nicht aktueller Objekte verwendet werden. Wenn eine rekursive Business-Regel erkannt wird, stoppt das System sie und protokolliert den Fehler im Systemprotokoll. Jedoch Aktuell.Update() Verursacht Systemleistungsprobleme und ist nie erforderlich.
Sie können rekursive Business-Regeln verhindern, indem Sie verwenden SetWorkflow() Methode mit dem Parameter „falsch“. Die Kombination von Aktualisieren () Und SetWorkflow() Methoden werden nur in besonderen Fällen empfohlen, in denen die oben genannten normalen Richtlinien für vor und nach Ihren Anforderungen nicht entsprechen.
Business Rules in bereichsbezogenen Anwendungen
Jede Business Rule ist entweder einem privaten Anwendungsbereich oder dem globalen Bereich zugewiesen.
Business-Regeln für bestimmte Tabellen
Die meisten Business-Regeln werden für eine bestimmte Tabelle ausgeführt, die in definiert ist Tabelle Feld. Sie können Business-Regeln für Tabellen im gleichen Umfang und für Tabellen erstellen, die Konfigurationsdatensätze aus einem anderen Anwendungsbereich zulassen.
Für Tabellen, die sich in einem anderen Umfang als der Business-Regel-Datensatz befinden, sind die Arten von Regeln beschränkt.
- Sie können eine Regel erstellen, wo Wenn asynchron ist Mit einer der folgenden Optionen:
- Einfügen , Aktualisieren , Und Löschen Datenbankvorgänge. Sie können nicht auswählen Abfrage .
- Legen Sie Feldwerte fest Aktionen und Skripts (die Skript Feld).
- Sie können mit einer der folgenden Optionen eine Regel erstellen, bei der der Wert vor liegt:
- Einfügen , Aktualisieren , Und Löschen Datenbankvorgänge. Sie können nicht auswählen Abfrage .
- Legen Sie Feldwerte fest Nur Aktionen. Sie können keine Skripts schreiben, und Sie können die Datenbanktransaktion nicht abbrechen.
- Sie können keine anderen Arten von Business-Regeln für Tabellen in einem anderen Umfang erstellen.
Auf Business-Regeln in bestimmten Tabellen kann nicht von anderen Business-Regeln oder Skripts zugegriffen werden.
Globale Business-Regeln
Globale Business-Regeln sind Business-Regeln, bei denen Tabelle Feld ist auf festgelegt Global . Globale Business-Regeln können je nach Umfangsschutz in mehreren Tabellen und aus anderen Skripts zugänglich sein. Definieren Sie für eine globale Business-Regel den Umfangsschutz, indem Sie festlegen Zugänglich von Feld:
- Nur dieser Anwendungsbereich : Verhindert, dass Anwendungen in einem anderen Umfang als die Business-Regel diese Business-Regel aufrufen.
- Alle Anwendungsbereiche : Ermöglicht jeder Anwendung, diese Business-Regel aufzurufen.Hinweis:Globale Business-Regeln unterstützen keine Domänentrennung.
Skripts in bereichsbezogenen Business-Regeln
Wenn Sie ein Skript in einer Business-Regel schreiben, können Sie auf Folgendes zugreifen:
- Jedes Skript enthält und globale Business-Regeln im selben Umfang wie die Business-Regel.
- Skripteinbindungen und globale Business-Regeln, die es Anwendungen in einem anderen Bereich ermöglichen, sie aufzurufen. Um Funktionen aus einem anderen Bereich aufzurufen, müssen Sie den Umfang der Funktion angeben.
- Für Business-Regeln in einem eindeutigen Bereich können Sie nur auf die bereichsbezogenen System-APIs zugreifen.
Business Rules erstellen
Sie können jede Art von Business-Regel erstellen, die ausgeführt werden soll, wenn ein Datensatz angezeigt, eingefügt, aktualisiert oder gelöscht wird oder wenn eine Tabelle abgefragt wird.
Warum und wann dieser Vorgang ausgeführt wird
Prozedur
Globale Variablen in Business Rules
Es stehen vordefinierte globale Variablen zur Verfügung, die in Business Rules verwendet werden können.
Verwenden Sie die folgenden vordefinierten globalen Variablen, um in einem Business-Regel-Skript auf das System zu verweisen.
| Globale Variable | Beschreibung |
|---|---|
| aktuell | Aktueller Status des referenzierten Datensatzes. Unter „Null-Zeigerausnahmen verhindern“ unten finden Sie Informationen zum Überprüfen auf Nullen, bevor Sie diese Variable verwenden. |
| previous | Status des referenzierten Datensatzes vor Aktualisierungen, die während des Ausführungskontexts vorgenommen wurden, wobei der Ausführungskontext mit dem ersten Update- oder Löschvorgang beginnt und endet, nachdem das Skript und alle referenzierten Business-Regeln ausgeführt wurden. Wenn der Datensatz innerhalb eines Ausführungskontexts mehrere Aktualisierungen vorgenommen werden, Zurück Behält den Status des Datensatzes vor dem ersten Aktualisierungs- oder Löschvorgang bei. Nur bei Update- und Löschvorgängen verfügbar. Nicht verfügbar für asynchrone Vorgänge. Unter „Null-Zeigerausnahmen verhindern“ unten finden Sie Informationen zum Überprüfen auf Nullen, bevor Sie diese Variable verwenden. |
| G_Scratchpad | Das Scratchpad-Objekt ist in Anzeigeregeln verfügbar und wird verwendet, um Informationen an den Client zu übergeben, auf die über Client-Skripts zugegriffen werden kann. |
| gs | Verweise auf GlideSystem Funktionen. |
Die Variablen Aktuell , Zurück , Und G_Scratchpad Sind global für alle Business-Regeln, die für eine Transaktion ausgeführt werden.
Null-Zeigerausnahmen verhindern
if (current == null) // to prevent null pointer exceptions.
return; Definieren Sie Variablen
Anwenderdefinierte Variablen sind standardmäßig global umrissen. Wenn eine neue Variable in einer Business-Regel für den Auftrag 100 deklariert wird, hat die Business-Regel, die als Nächstes in der Reihenfolge 200 ausgeführt wird, auch Zugriff auf die Variable. Dies kann zu unerwartetem Verhalten führen.
Um ein solches unerwartetes Verhalten zu verhindern, schließen Sie Ihren Code immer in eine Funktion ein. Dies schützt Ihre Variablen vor Konflikten mit Systemvariablen oder globalen Variablen in anderen Business-Regeln, die nicht in einer Funktion eingeschlossen sind. Darüber hinaus Variablen wie Aktuell Muss verfügbar sein, wenn eine Funktion aufgerufen wird, um verwendet werden zu können.
var now_GR = new GlideRecord('incident');
now_GR.query();
while(now_GR.next()) {
//do something
}myFunction();
function myFunction() {
var now_GR = new GlideRecord('incident');
now_GR.query();
while(now_GR.next()) {
//do something
} }Feldwerte mit Business Rules und Client-Skripts steuern
Wenn Sie sowohl Business Rules als auch Client-Skripts für ein Feld implementieren, können Benutzer Datensatzwerte mithilfe von Formularen und Listen festlegen und sehen während der Bearbeitung von Formularen sofort alle Änderungen, die an den Werten vorgenommen werden.
Das Problem bei der Verwendung nur eines Client-Skripts oder einer Business-Regel zur Steuerung von Aktualisierungen an einem Feld besteht darin, dass Felder entweder in einem Formular oder in einer Liste geändert werden können. Client-Skripts und UI-Richtlinien werden nur auf Formularen (clientseitig) ausgeführt und gelten nicht für die Listenbearbeitung. Das Zulassen der Listenbearbeitung mit Clientskripts, die für Felder in einem Formular ausgeführt werden, kann dazu führen, dass falsche Daten im Datensatz gespeichert werden. Deaktivieren Sie für Systeme, in denen Client-Skripts oder UI-Richtlinien für Formulare gelten, entweder die Listenbearbeitung, oder erstellen Sie entsprechende Business-Regeln oder Zugriffssteuerung, um die Einstellung von Werten im Listeneditor zu steuern. Ein Nebeneffekt davon besteht darin, dass in Client-Skripts implementierte Sicherheitsmaßnahmen leicht zu umgehen sind. Der Anwender muss nur das Feld in einer Liste bearbeiten.
Business-Regeln in einem Formular sind nicht dynamisch. Der Anwender muss den Datensatz aktualisieren, damit der Change angezeigt wird. Dadurch wird die Verwendung von Client-Skripts zur bevorzugten Methode zur Steuerung von Feldwerten in Formularen.
Wenn sowohl eine Business-Regel als auch ein Clientskript zur Steuerung von Feldwerten verwendet werden, ist das Aktualisierungsverhalten im gesamten System identisch. Dies bedeutet, dass sich aktualisierte Werte nicht unterscheiden, je nachdem, ob eine Liste von Formularen zum Vornehmen der Änderung verwendet wird. Dies bedeutet, dass dieselbe Funktionalität zweimal implementiert werden muss, einmal in einem Client-Skript und einmal in einer Business-Regel oder Zugriffssteuerung.
Beispiel: Verwenden Sie eine Business-Regel, um E-Mail-Adressen während des Imports von Anwenderdatensätzen zu erstellen
Eine Organisation verfügt über ein Clientskript, das die E-Mail-Adresse für einen Anwender auf festlegt first.last@company.com . Administratoren tun dies, damit sie die E-Mail-Adresse sofort sehen können, wenn sie die Informationen des Anwenders eingeben. Der Administrator führt dann einen Massenimport von Anwendern aus einer Tabelle durch, die den vor- und Nachnamen der Anwender enthält. Es wird erwartet, dass die E-Mail-Adresse jedes Anwenders automatisch festgelegt wird, wenn er das Formular bearbeitet. Da das Clientskript nur auf dem Formular (der Schnittstelle zum Datensatz) ausgeführt wird, hat es keine Auswirkungen auf Daten, die von außerhalb dieser Schnittstelle in den Datensatz importiert werden, und es werden keine E-Mail-Adressen erstellt. Um dieses Problem zu lösen, implementiert der Administrator eine Business-Regel, die beim Import ausgeführt wird, und erstellt die E-Mail-Adressen.
Beispiel: Listenbearbeitung für ein Feld verhindern, das im Formular nicht bearbeitet werden kann
Eine Organisation möchte ausblenden Priorität Feld in einem Incident-Formular, wenn die Zuweisungsgruppe ist Entwicklung . Sie erstellen dazu eine UI-Richtlinie im Incident-Formular, aber ihre Anwender können weiterhin sehen und bearbeiten Priorität Feld mit dem Listeneditor. Wenden Sie eine Zugriffssteuerung an, um den Lesezugriff auf zu verhindern Priorität Feld, wenn die Zuweisungsgruppe ist Entwicklung .
Null wird als Feldwert verwendet
Die Zeichenfolge Null hat eine bestimmte Rolle in Skripts und ist ein reserviertes Wort.
Das reservierte Wort ist Null in Großbuchstaben. Ein Feld mit dem Wert Null Oder Null , Z. B. ist zulässig. Verwenden Sie Null nur, um ein bestimmtes Feld zu löschen.
Alle Null-Feldwerte, die aus einer Importsatz-Datenquelle abgerufen werden, werden als leere Feldwerte in die Bereitstellungstabelle eingefügt. Sie sollten den Begriff Null nicht als Feldwert in Transformationszuordnungen des Importsatzes oder an einer beliebigen Stelle in verwenden Vorname Oder Nachname Felder. Verwenden Sie auch nicht Null in Referenzfeldern, da das System den Wert als Zeichenfolge interpretiert, die das Wort Null enthält, nicht als reserviertes Wort.
Business Rules des Typs „Anzeigen“
Rules des Typs „Anzeigen“ werden verarbeitet, wenn ein Benutzer ein Datensatzformular anfordert.
Die Daten werden aus der Datenbank gelesen, Anzeigeregeln werden ausgeführt, und das Formular wird dem Anwender angezeigt. Das aktuelle Objekt ist verfügbar und stellt den aus der Datenbank abgerufenen Datensatz dar. Alle Feldänderungen sind temporär, da sie noch nicht an die Datenbank übermittelt wurden. Für den Client scheinen die Formularwerte die Werte aus der Datenbank zu sein. Es gibt keinen Hinweis darauf, dass die Werte über eine Anzeigeregel geändert wurden. Dies ist ein ähnliches Konzept wie berechnete Felder.
Das primäre Ziel von Anzeigeregeln besteht in der Verwendung eines freigegebenen Scratchpad-Objekts. G_Scratchpad , Die auch als Teil des Formulars an den Client gesendet wird. Dies kann nützlich sein, wenn Sie Client-Skripts erstellen müssen, die Serverdaten erfordern, die normalerweise nicht Teil des angezeigten Datensatzes sind. In den meisten Fällen erfordert dies, dass ein Client-Skript einen Rückruf an den Server durchführt. Wenn die Daten vor der Anzeige des Formulars bestimmt werden können, ist es effizienter, die Daten beim ersten Laden dem Client bereitzustellen. Das Formular-Scratchpad-Objekt ist standardmäßig ein leeres Objekt und wird nur zum Speichern von Name:Wert-Paaren von Daten verwendet.
// From display business rule
g_scratchpad.someName = "someValue";
g_scratchpad.anotherName = "anotherValue";
// If you want the client to have access to record fields not being displayed on the form
g_scratchpad.created_by = current.sys_created_by;
// These are simple examples, in most cases you will probably perform some other
// queries to test or get data// From client script
if(g_scratchpad.someName == "someValue") {
//do something special
}Business Rule „Task Active State Management“
Diese Business Rule entscheidet basierend auf Änderungen im Feld Status, ob der Wert des Felds „Aktiv“ geändert werden muss.
Die Business-Regel „Verwaltung des aktiven Status der Aufgabe“ wird ausgeführt, wenn Status Wird für einen Aufgabendatensatz geändert. Die Ausführungsreihenfolge ist 50 und wird vor den meisten anderen Aufgaben-Business-Regeln ausgeführt.
- Wenn sich der Status von einem aktiven Status in einen inaktiven Status ändert, wird Aktiv Feld ist auf „falsch“ festgelegt.
- Wenn sich der Status von einem inaktiven Status in einen aktiven Status ändert, wird Aktiv Feld ist auf „wahr“ festgelegt, wodurch die Aufgabe effektiv erneut aktiviert oder geöffnet wird.
Es wird empfohlen, die zu nutzen (current.active.changesTo([true/false])Aktion in Ihrer Business-Regel im Gegensatz zum Erstellen von Regeln für jede Aufgabentabelle, die Aufgaben als inaktiv oder aktiv markieren.
Beispiele für Business Rule-Skripts
Hier finden Sie Beispiele für Business Rule-Skripts, mit denen Sie Anforderungen Ihrer Organisation erfüllen können.
Datumsfelder in Business Rules vergleichen
Es ist möglich, zwei Datumsfelder oder zwei Datum/Uhrzeit-Felder in einer Business Rule zu vergleichen und eine Datensatzeinfügung abzubrechen oder die Felder zu aktualisieren, wenn sie nicht korrekt sind.
Beispielsweise möchten Sie, dass ein Startdatum vor einem Enddatum liegt. Das folgende ist ein Beispielskript:
if ((!current.u_date1.nil()) && (!current.u_date2.nil())) {
var start = current.u_date1.getGlideObject().getNumericValue();
var end = current.u_date2.getGlideObject().getNumericValue();
if (start > end) {
gs.addInfoMessage('start must be before end');
current.u_date1.setError('start must be before end') ;
current.setAbortAction(true);
} }Dieses Beispiel wurde in globalen Skripts getestet und erfordert möglicherweise Änderungen, um in bereichsbezogenen Skripts zu funktionieren. Zusätzlich zu möglicherweise erforderlichen API-Änderungen ist die Sicherheit in bereichsbezogenen Skripts strenger.
- u_date1 Und u_date2 Sind die Namen der beiden Datumsfelder. Ersetzen Sie diese Namen durch Ihre eigenen Feldnamen.
- Die erste Zeile überprüft, ob beide Felder tatsächlich einen Wert haben.
- Die nächsten beiden Zeilen erstellen Variablen mit den numerischen Werten des Datums.
- Die nächsten zwei Zeilen erstellen verschiedene Warnungsnachrichten für den Endanwender: Eine oben im Formular und eine neben der u_date1 Feld im Formular.
- Die letzte Zeile bricht das Einfügen oder Aktualisieren ab, wenn die Datumsfelder nicht korrekt sind.
// Enter all start and end date fields you wish to check, as well as the previous values
// Make sure that you keep the placement in the sequence the same for all pairs
var startDate = new Array(current.start_date,current.work_start);
var prevStartDate = new Array(previous.start_date,previous.work_start);
var endDate = new Array(current.end_date,current.work_end);
var prevEndDate = new Array(previous.end_date,previous.work_end);
// The text string below is added to the front of ' start must be before end'
var userAlert = new Array('Planned','Work');
// Set the number of Previous Days you want to check
var pd = 30;
// Set the number of Future Days you want to check
var fd = 365;
// You shouldn't have to modify anything below this line
var nowdt = new GlideDateTime();
nowdt.setDisplayValue(gs.nowDateTime());
var nowMs = nowdt.getNumericValue();
var pdms = nowMs;
// Subtract the product of previous days to get value in milliseconds
pdms -= pd * 24 * 60 * 60 * 1000;
var fdms = nowMs;
// Add the product of future days to get value in miliseconds
fdms += fd * 24 * 60 * 60 * 1000;
var badDate = false;
// Iterate through all start and end date / time fields
for (x = 0; x < startDate.length; x ++) {
if ((!startDate[x].nil()) && (!endDate[x].nil())) {
var start = startDate[x].getGlideObject().getNumericValue();
var end = endDate[x].getGlideObject().getNumericValue();
if (start > end) {
gs.addInfoMessage(userAlert[x] + ' start must be before end');
startDate[x].setError(userAlert[x] + ' start must be before end');
badDate = true; }
else if ((prevStartDate[x]) != (startDate[x])) {
if (start < pdms) {
gs.addInfoMessage(userAlert[x] + ' start must be fewer than ' + pd + ' days ago');
startDate[x].setError(userAlert[x] + ' start must be fewer than ' + pd + ' days ago');
badDate = true; } }
else if ((prevEndDate[x]) != (endDate[x])) {
if (end > fdms) {
gs.addInfoMessage(userAlert[x] + ' end must be fewer than ' + fd + ' days ahead');
endDate[x].setError(userAlert[x] + ' end must be fewer than ' + fd + ' days ahead');
badDate = true ;
} } } }
if (badDate == true ) {
current. setAbortAction ( true ) ; }Analysieren Sie XML-Nutzlasten
Felder im XML-Format können mit dem des Systems analysiert werden GetXMLText Funktion.
ecc_Event Zeile, kann mit dem des Systems analysiert werden GetXMLText Funktion. Die GetXMLText Die Funktion verwendet eine Zeichenfolge und einen XPATH-Ausdruck. Zum Beispiel:var name = gs.getXMLText("<name>joe</name>", "//name");Gibt die Zeichenfolge „joe“ zurück.
var name = gs.getXMLText(current.payload, "//name");Informationen zu XPATH finden Sie unter W3school .
Datenbankaktionen in Business Rules des Typs „Vor“ abbrechen
In einem Business Rule-Skript des Typs „Vor“ können Sie die aktuelle Datenbankaktion abbrechen, indem Sie die Methode setAbortAction() verwenden.
Beispiel: Wenn die Business-Regel „vor“ während einer Einfügeaktion ausgeführt wird und Sie eine Bedingung im Skript haben, die aufruft current.setAbortAction(true) , Der neue Datensatz, der im aktuellen gespeichert ist, wird nicht in der Datenbank erstellt. Die Business-Regel wird nach dem Aufruf weiterhin ausgeführt SetAbortAktion() Und alle nachfolgenden Business-Regeln werden normal ausgeführt. Das Aufrufen dieser Methode verhindert nur, dass die Datenbankaktion für das aktuelle Objekt ausgeführt wird.
Sie können verwenden IsActionAborted() Methode, um zu bestimmen, ob die aktuelle Datenbankaktion (Einfügen, Aktualisieren, Löschen) abgebrochen wird. IsActionAborted() Wird für neue Threads und initialisiert Next() Methode legt ihren Wert explizit auf „falsch“ fest.
current.setAbortAction Wird nicht berücksichtigt, wenn sie in einer Business-Regel ausgeführt wird, die in einem anderen Umfang definiert ist.Auslösenden Vorgang von Business Rules ermitteln
Sie können ein Skript für Business Rules schreiben, die bei mehr als einer Datenbankaktion ausgelöst werden.
if(current.operation() == "update") {
current.updates ++; }
if(current.operation() == "insert") {
current.updates = 0; }OR-Bedingungen in Business Rules verwenden
Eine OR-Bedingung kann jedem Abfrageteil innerhalb einer Business Rule hinzugefügt werden.
var inc = new GlideRecord('incident');
var qc = inc.addQuery('priority','1');
qc.addOrCondition('priority','2');
inc.query();
while(inc.next()) {
// processing for the incident goes here
}(Priorität = 1 ODER Priorität = 2) UND (Auswirkung = 2 ODER Auswirkung = 3) . Die Ergebnisse von ODER Bedingung wird mit zwei Variablen ausgeführt, qc1 Und qc2 . Dadurch können Sie das Abfragebedingungsobjekt später im Skript bearbeiten, z. B. in einem WENN Bedingung oder WÄHREND Schleife.var inc = new GlideRecord('incident');
var qc1 = inc.addQuery('priority','1');
qc1.addOrCondition('priority','2');
var qc2 = inc.addQuery('impact','2');
qc2.addOrCondition('impact','3');
inc.query();
while(inc.next()) {
// processing for the incident goes here
}Glide Listen in Business Rules referenzieren
Ein als Glide-List definiertes Feld ist ein Array von Werten, die in einem einzelnen Feld gespeichert sind.
Hier sind einige Beispiele für die Verarbeitung eines Glide_list-Felds beim Schreiben von Business-Regeln. Im Allgemeinen enthält ein Feld „Glide_list“ eine Liste von Referenzwerten für andere Tabellen.
Beispiele
Beispiel: Beobachtungsliste Das Feld in Aufgaben ist eine Glide_list, die Verweise auf Anwenderdatensätze enthält.
Der Code unten zeigt, wie auf das Feld verwiesen wird.
// list will contain a series of reference (sys_id) values separated by a comma
// array will be a javascript array of reference values
var list = current.watch_list.toString();
var array = list.split(",");
for (var i=0; i < array.length; i++) {
gs.print("Reference value is: " + array[i]);
}*** Script: Reference value is: 62826bf03710200044e0bfc8bcbe5df1
*** Script: Reference value is: c2826bf03710200044e0bfc8bcbe5d45
*** Script: Reference value is: 5f74e421c0a8010e01ec0d74a7ee2cc6
*** Script: Reference value is: 06826bf03710200044e0bfc8bcbe5d57Sie können auch die Anzeigewerte abrufen, die den Referenzwerten zugeordnet sind, indem Sie verwenden GetDisplayValue() Methode wie unten gezeigt.
// list will contain a series of display values separated by a comma
// array will be a javascript array of display values
var list = current.watch_list.getDisplayValue();
var array = list.split(",");
for (var i=0; i < array.length; i++) {
gs.print("Display value is: " + array[i]);
}*** Script: Display value is: Abel Tuter
*** Script: Display value is: Ashley Leonesio
*** Script: Display value is: Charles Beckley
*** Script: Display value is: Cherie FuhriZeichenfolgen in Glide Listen suchen mit „indexOf("GesuchteZeichenfolge")“
Verwenden IndexOf (" searchString„) um die Position der an die Methode übergebenen Zeichenfolge zurückzugeben, wenn das Glide-Listenfeld, z. B. eine Beobachtungsliste, mindestens einen Wert enthält.
Wenn das Feld leer ist, wird zurückgegeben Nicht definiert . Um zu vermeiden, dass ein nicht definierter Wert zurückgegeben wird, führen Sie einen der folgenden Schritte aus:
- Erzwingen Sie das Feld in eine Zeichenfolge, z. B.: Watch_list.toString().indexOf (" searchString„)
- Überprüfen Sie vor der Verwendung auf ein leeres Glide-Listenfeld mit einer Bedingung IndexOf() , Z. B.: Wenn ( Watch_list.nil() || watch_list.indexOf (" searchString„) == -1)
Sperren Sie Anwenderaccounts
Sie können Anwenderaccounts sperren, wenn der Anwender nicht aktiv ist.
// Lock accounts if bcNetIDStatus != active in LDAP and user does not
// have self-service, itil or admin role
var rls = current.accumulated_roles.toString();
if(current.u_bcnetidstatus == 'active' && (rls.indexOf(',itil,') > 0 ||
rls.indexOf(',admin,') > 0 ||
rls.indexOf(',ess,') > 0 )) {
current.locked_out = false; }
else {
current.locked_out = true; }
var now_GR = new GlideRecord("sys_user");
now_GR.query();
while(now_GR.next()) {
now_GR.update();
gs.info("updating " + gr.getDisplayValue());
}Standardmäßige Business Rule des Typs „Vor“ zur Ausführung vor Abfragevorgängen
Sie können eine Business Rule des Typs „Abfragen“ verwenden, die vor dem Senden einer Datenbankabfrage ausgeführt wird.
- Name: Incident-Abfrage
- Tabelle: Incident
- Wenn: Vor, Abfrage
- Skript:
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); }