Klassische Business-Regeln

  • Freigeben Version: Australia
  • Aktualisiert 12. März 2026
  • 26 Minuten Lesedauer
  • 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.

    Business-Regeln sind Skripts, die ausgeführt werden, wenn bestimmte serverseitige Bedingungen erfüllt sind. Business-Regel-Bedingungen umfassen, wann eine Business-Regel in Bezug auf einen Datenbankvorgang ausgeführt werden soll und für welche Datensatzvorgänge die Business-Regel gilt. Auf der Plattform sind andere Skripting-Optionen für clientseitige Bedingungen verfügbar, z. B. Client-Skripts und UI-Aktionen.
    Hinweis:
    Geschäftsregeln sind eine klassische Automatisierungslösung, die auf Skripting basiert. Verwenden Workflow-Studio Für jede neue Prozessautomatisierung, um Automatisierungen zu erstellen, die einfacher erweitert, wiederverwendet, verstanden und aktualisiert werden können. Da viele Organisationen Business-Regeln in der Produktion haben, erfahren Sie in dieser Dokumentation, wie Sie mit vorhandenen Business-Regeln arbeiten.

    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

    Business-Regeln werden basierend auf zwei Kriteriensätzen ausgeführt.
    • Wann die Business-Regel in Bezug auf einen Datenbankvorgang ausgeführt werden soll.
    • Für welchen Datensatzvorgang die Business-Regel gilt.
    Die folgenden Optionen werden bereitgestellt, um zu bestimmen, wann die Business-Regel ausgeführt werden soll.
    Tabelle : 1. Wann die Business-Regel ausgeführt werden soll
    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.
    Hinweis:
    • 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)
    Die folgenden Optionen werden bereitgestellt, um zu bestimmen, für welche Datensatzvorgänge die Business-Regel gilt.
    Tabelle : 2. Für welchen Datensatzvorgang die Business-Regel gilt
    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.
    Hinweis:
    Business-Regeln führen Datensatzvorgänge nur aus, wenn sie über die GlideRecord-API aufgerufen werden. Einige Anwendungen umgehen absichtlich die Verarbeitung von Business-Regeln, um Datensatzvorgänge direkt auszuführen. Darüber hinaus ignorieren Business-Regeln API-Aufrufe, die ausgeführt werden, wenn die Methode „setWorkflow()“ auf „falsch“ festgelegt ist.
    Dieses Bild zeigt, wenn verschiedene Arten von Business-Regeln ausgeführt werden:
    Abbildung : 1. Business-Regel-Verarbeitungs-Flow
    Hinweis:
    Business-Regeln gelten konsistent für Datensätze, unabhängig davon, ob über Formulare, Listen oder Webservices auf sie zugegriffen wird. Dies ist ein großer Unterschied zwischen Business-Regeln und Client-Skripts, die nur gelten, wenn das Formular bearbeitet wird.

    Business-Regel-Aktionen

    Business-Regeln können eine Vielzahl von Aktionen ausführen. Gängige Arten von Aktionen sind:
    • Ä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.
    Administratoren können Feldwerte festlegen, Informationsnachrichten erstellen und Transaktionen abbrechen, ohne ein Skript zu schreiben.

    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.

    Die Typen von Business-Regeln, die Sie erstellen können, und wie Sie auf diese Regeln zugreifen können, variieren je nach Umfang der Business-Regel und Umfang der Tabelle, in der sie ausgeführt wird.
    Hinweis:
    Die Bedingung Global Kann sich auf zwei verschiedene Aspekte einer Business-Regel beziehen: Die Tabelle, in der sie ausgeführt wird, und den Umfang, in dem sie ausgeführt wird. Business-Regeln können entweder für bestimmte Tabellen ausgeführt oder global sein. Darüber hinaus können sie sich im globalen Bereich oder in einem privaten Anwendungsbereich befinden.

    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

    Warnung:
    Erwägen Sie die Verwendung von Skripteinbindungen anstelle globaler Business-Regeln. Das Skript enthält das Laden nur auf Anforderung, während globale Business-Regeln auf jeder Seite im System geladen werden.

    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

    Hinweis:
    Diese Anweisungen und Beispiele bieten allgemeine Anleitungen zur Implementierung dieser Funktionalität. Hilfe zu eindeutigen Anwendungsfällen finden Sie unter Entwickler-Community-Forum , Wo Sie Fragen stellen, mit anderen Entwicklern interagieren und nach vorhandenen Lösungen suchen können.

    Prozedur

    1. Navigieren zu Alle > Systemdefinition > Business-Regelnan.
    2. Klicken Sie auf Neu.
    3. Füllen Sie die Felder entsprechend aus.
      Hinweis:
      Möglicherweise müssen Sie das Formular konfigurieren, um alle Felder anzuzeigen.
      Tabelle : 3. Business-Regel-Felder
      Feld Beschreibung
      Name Geben Sie einen Namen für die Business-Regel ein.
      Tabelle Wählen Sie die Tabelle aus, in der die Business-Regel ausgeführt wird.
      Hinweis:
      Die Liste zeigt nur Tabellen und Datenbankansichten an, die den Umfangsschutz für Business-Regeln erfüllen. Business-Regeln, die für eine Datenbankansicht definiert sind, können nur auf ausgeführt werden Abfrage . Eine Business-Regel für eine Datenbankansicht kann nicht beim Einfügen, Aktualisieren oder Löschen ausgeführt werden.
      Anwendung Anwendung, die diese Business-Regel enthält.
      Zugänglich von Umfangsschutz für eine globale Business-Regel.
      Hinweis:
      Dieses Feld ist nur sichtbar, wenn Tabelle Feld ist auf festgelegt Global . Gilt nicht für Regeln, die für bestimmte Tabellen ausgeführt werden.
      Aktiv Aktivieren Sie dieses Kontrollkästchen, um die Business-Regel zu aktivieren.
      Erweitert Aktivieren Sie dieses Kontrollkästchen, um die erweiterte Version des Formulars anzuzeigen.
      Zeitpunkt für Ausführung
      Wann

      [Erweitert] Wählen Sie aus, wann diese Business-Regel ausgeführt werden soll: Anzeigen , Vor , Asynchron , Oder Danach Der Datenbankvorgang ist abgeschlossen.

      Hinweis:
      Erwägen Sie die Einstellung von Reihenfolge Für Asynchron Business-Regeln, da das System diesen Wert beim Erstellen der zugehörigen geplanten Aufgabe verwendet.

      Neu erstellt Asynchron Business-Regeln werden beim Upgrade automatisch ausgeführt.

      Vorhanden Asynchron Business-Regeln können migriert werden, um das neue asynchrone Verhalten zu verwenden.

      Reihenfolge [Erweitert] Geben Sie eine Zahl ein, die die Reihenfolge angibt, in der diese Business-Regel ausgeführt werden soll. Wenn für eine bestimmte Aktivität mehrere Regeln vorhanden sind, werden die Regeln in der hier angegebenen Reihenfolge ausgeführt, von der niedrigsten zur höchsten.
      Einfügen Aktivieren Sie dieses Kontrollkästchen, um die Business-Regel auszuführen, wenn ein Datensatz in die Datenbank eingefügt wird.
      Aktualisieren Aktivieren Sie dieses Kontrollkästchen, um die Business-Regel auszuführen, wenn ein Datensatz aktualisiert wird.
      Löschen [Erweitert] Aktivieren Sie dieses Kontrollkästchen, um die Business-Regel auszuführen, wenn ein Datensatz aus der Datenbank gelöscht wird.
      Abfrage [Erweitert] Aktivieren Sie dieses Kontrollkästchen, um die Business-Regel auszuführen, wenn eine Tabelle abgefragt wird.
      Filterbedingungen Verwenden Sie den Bedingungsgenerator, um zu bestimmen, wann die Business-Regel basierend auf den Feldwerten in der ausgewählten Tabelle ausgeführt werden soll.

      Wenn Sie auswählen Erweitert Option können Sie auch verwenden Bedingung Feld zum Erstellen einer Bedingung mit einem Skript. Bedingungen, die mit definiert sind Filterbedingungen Feld und erweitert Bedingungen Feld werden gleichzeitig ausgewertet.

      Hinweis:
      Bei Filtern, die auf Zeichenfolgenvergleichen basieren, wird zwischen Groß- und Kleinschreibung unterschieden.
      Rollenbedingungen Wählen Sie die Rollen aus, die Anwender haben müssen, die Datensätze in der Tabelle ändern, damit diese Business-Regel ausgeführt werden kann.
      Aktionen
      Feldwerte festlegen Legen Sie Werte für Felder in der ausgewählten Tabelle mithilfe der Auswahllisten fest:
      • Das Feld
      • Der Zuweisungsoperator:
        • An: Ein genauer Wert
        • Identisch mit: Der Wert eines anderen Felds
        • An (dynamisch): Ein Wert relativ zum Anwender, der die Business-Regel konfiguriert, oder einem Anwender mit einer bestimmten Rolle
      • Der Wert
      Nachricht hinzufügen Aktivieren Sie dieses Kontrollkästchen, und geben Sie eine Nachricht ein, die angezeigt wird, wenn diese Business-Regel ausgeführt wird
      Aktion abbrechen

      Aktivieren Sie dieses Kontrollkästchen, um die aktuelle Datenbanktransaktion abzubrechen. Fügen Sie beispielsweise bei einer Business-Regel vor dem Einfügen den Datensatz nicht in die Datenbank ein, wenn die Bedingungen erfüllt sind.

      Wenn Sie diese Option auswählen, können Sie keine zusätzlichen Aktionen für den Datensatz ausführen, z. B. das Festlegen von Feldwerten und das Ausführen von Skripts. Sie können Anwendern weiterhin eine Nachricht anzeigen, indem Sie auswählen Nachricht hinzufügen Kontrollkästchen und Verfassen der Nachricht.

      Erweitert
      Bedingung Erstellen Sie eine bedingte JavaScript-Anweisung, um anzugeben, wann die Business-Regel ausgeführt werden soll. Durch Hinzufügen der Bedingungsanweisung zu diesem Feld weisen Sie das System an, die Bedingung separat auszuwerten und die Business-Regel nur auszuführen, wenn die Bedingung „wahr“ ist.

      Wenn Sie sich entscheiden, die Bedingungsanweisung in einzubeziehen Skript Feld oder Filterbedingungen Feld, lassen Sie dieses Feld leer. Bedingungen, die mit definiert sind Filterbedingungen Feld und erweitert Bedingungen Feld werden gleichzeitig ausgewertet.

      Damit die Instanz die Bedingungsanweisung ein zweites Mal neu auswertet, bevor eine asynchrone Business-Regel ausgeführt wird, fügen Sie die Systemeigenschaft hinzu glide.businessrule.async_condition_checkUnd legen Sie den Wert auf „wahr“ fest.

      Skript
      [Erweitert] Erstellen Sie ein Skript, das ausgeführt wird, wenn die definierte Bedingung „wahr“ ist.
      • OnAfter
      • OnAsync
      • OnBefore
      • OnDisplay

      Weitere Informationen und Beispiele finden Sie unter Beispiele für Business Rule-Skripts.

      Zugehörige Liste: Versionen
      Versionen Zeigt alle Versionen der Business-Regel an. Verwenden Sie diese Liste, um Versionen zu vergleichen oder eine vorherige Version wiederherzustellen.
    4. Klicken Sie auf Absenden.
    Wenn bei Ihrer Business-Regel Probleme auftreten, finden Sie unter Häufig gestellte Fragen zu Business-Regeln [KB0965707] artikel in Now Support Knowledge Base.

    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

    In einigen Fällen ist möglicherweise nicht vorhanden Aktuell Oder Zurück status für den Datensatz, wenn eine Business-Regel ausgeführt wird. Dies bedeutet, dass die Variablen null sind. Um vor der Verwendung einer Variable auf Null zu prüfen, fügen Sie Ihrer Business-Regel den folgenden Code hinzu:
    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.

    Das folgende Skript ist angreifbar für Konflikte mit anderem Code. Wenn die Variable Now_GR Wird in anderen Regeln verwendet. Der Wert der Variable kann sich unerwartet ändern.
    var now_GR = new GlideRecord('incident');
    now_GR.query(); 
    while(now_GR.next()) {
     
       //do something
     
    }
    Wenn dieses Skript in eine Funktion eingeschlossen ist, ist die Variable nur innerhalb der Funktion verfügbar und steht nicht mit anderen Funktionen in Konflikt, die eine Variable mit dem Namen verwenden Now_GR .
    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.

    So füllen Sie das Formular-Scratchpad mit Daten aus einer Anzeigeregel aus:
    // 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
    So greifen Sie über ein Client-Skript auf die Formular-Scratchpad-Daten zu:
    // 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 die aktuelle Aufgabentabelle über verfügt close_statesAttribut, das in seiner Tabelle definiert ist, oder wenn es von einer Tabelle auf höherer Ebene geerbt wird, bestimmt die Regel, ob sich das aktive Feld ändern muss. Dies erfolgt durch Vergleich der vorherigen und aktuellen Statuswerte.
    • 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.

    Hinweis:
    Diese Anweisungen und Beispiele bieten allgemeine Anleitungen zur Implementierung dieser Funktionalität. Hilfe zu eindeutigen Anwendungsfällen finden Sie unter Entwickler-Community-Forum , Wo Sie Fragen stellen, mit anderen Entwicklern interagieren und nach vorhandenen Lösungen suchen 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.

    Als gute Praxis sollten Sie die Business-Regel zu einer vor-Regel für Einfüge- und Aktualisierungsaktionen machen. Im Beispielskript:
    • 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.
    Hier ist ein komplexeres Beispiel für den obigen Vergleich. Wenn Sie mehr als ein Paar von Start- und Enddaten haben, können Sie Arrays wie gezeigt verwenden. Darüber hinaus erfordert dieses Skript, dass die Eingabedaten innerhalb eines bestimmten Bereichs liegen, in diesem Fall nicht weniger als 30 Tage in der Vergangenheit und nicht mehr als 365 Tage in der Zukunft.
    // 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.

    Felder, die im XML-Format in die Datenbank eingefügt werden, z. B. die Nutzlast von 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.

    Wenn das Feld „Nutzlast“ XML enthält, könnte der Funktionsaufruf wie folgt aussehen:
    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.

    Hinweis:
    SetAbortAktion() Kann nur aus demselben Umfang wie der Datensatz ausgeführt werden, dessen Aktion abgebrochen wird. 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.

    Wenn das Business-Regel-Skript je nach Aktion, die das Ereignis ausgelöst hat, dynamisch verzweigt werden soll, können Sie verwenden Vorgang () Funktion. Zum Beispiel:
    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.

    Ein ODER Die Bedingung kann jedem Abfrageteil innerhalb einer Business-Regel mit hinzugefügt werden AddOrCondition() Methode. Das folgende Beispiel zeigt eine Abfrage zum Suchen aller Incidents, die entweder die Priorität 1 oder 2 haben. Die erste AddQuery() Bedingung ist als Variable definiert und wird in verwendet ODER Bedingung.
    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 
    }
    Das folgende Skript ist ein komplexeres Beispiel, das zwei Abfragebedingungsvariablen verwendet, die das Äquivalent von erfüllen (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]);
    }
    Ausgabe:
    *** Script: Reference value is: 62826bf03710200044e0bfc8bcbe5df1
    *** Script: Reference value is: c2826bf03710200044e0bfc8bcbe5d45
    *** Script: Reference value is: 5f74e421c0a8010e01ec0d74a7ee2cc6
    *** Script: Reference value is: 06826bf03710200044e0bfc8bcbe5d57

    Sie 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]);
    }
    Ausgabe:
    *** Script: Display value is: Abel Tuter
    *** Script: Display value is:  Ashley Leonesio
    *** Script: Display value is:  Charles Beckley
    *** Script: Display value is:  Cherie Fuhri

    Zeichenfolgen 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.

    Das folgende Business-Regel-Skript sperrt Anwenderaccounts, wenn der Anwender nicht im LDAP-Verzeichnis aktiv ist oder der Anwender keinen Selfservice-, itil- oder Administratorzugriff auf die Instanz hat.
    // 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.

    Verwenden Sie diese Abfrage-Business-Regel, um zu verhindern, dass Anwender auf bestimmte Datensätze zugreifen. Betrachten Sie das folgende Beispiel aus einer standardmäßigen Business-Regel, die den Zugriff auf Incident-Datensätze beschränkt.
    • 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); }
    Dieses Beispiel verhindert, dass Anwender auf Incident-Datensätze zugreifen, es sei denn, sie haben die itil-Rolle oder sind in aufgeführt Anrufer Oder Geöffnet von Feld. Wenn Selfservice-Anwender beispielsweise eine Liste von Incidents öffnen, können sie nur die von ihnen übermittelten Incidents sehen.
    Hinweis:
    Sie können auch Zugriffssteuerungen verwenden, um einzuschränken, welche Datensätze Benutzer sehen können.