Einführung in den App Builder - Anhang B: Die Geschäftsschicht im App Builder (Fortgeschritten)
Dies ist der zweite Anhang der Einführung in den App Builder Tutorialreihe. Diese Anhänge ergänzen die Lektionen der Reihe und bieten detailliertere Informationen zu den eingeführten Konzepten.
In dieser Lektion werden wir die Geschäftsschicht des App Builders weiter erkunden, den Bereich, in dem wir Geschäftsobjekte oder Regeln erstellen.
Vereinigungen
Joins, die in Lektion 7 eingeführt wurden, werden verwendet, wenn wir mit Regeln arbeiten, die Daten aus mehr als einer Tabelle in der Datenschicht abrufen. Der App Builder ist in der Lage, die Joins automatisch basierend auf Ihren Auswahl der Quelltabelle für Ihre Regeln zu erstellen.
Vereinigungen sind ein ähnliches Konzept, aber sie kombinieren Daten vertikal, das heißt, sie stapeln die Ergebnisse von zwei Abfragen und erzeugen eine Liste von Ergebnissen aus mehr als einer Tabelle, vorausgesetzt, sie haben eine bestimmte Spalte mit demselben Namen.
Um zu demonstrieren, wie eine Vereinigung funktioniert, erstellen wir manuell eine Vereinigung, die alle Länder zeigt, die in der Northwinds-Datenquelle existieren. Es gibt zwei Tabellen, Supplier und Customer, die eine Spalte namens Country enthalten, also werden wir die Einträge beider Tabellen kombinieren.
-
In App Workbench > Regeln, klicken Sie auf + Regel.
-
Wenn der Bildschirm zur Regel Erstellung erscheint:
-
Geben Sie im Feld Name Supplier (Länder für Supplier und Customer) ein.
-
Wählen Sie im Feld Zweck Geschäftsobjekt aus.
-
Stellen Sie sicher, dass Supplier im Feld Ziel ausgewählt ist.
-
Klicken Sie auf Erstellen.
-
-
Der App Builder wird die Regel erstellen. Standardmäßig fügt er die Zieltabelle hinzu und wählt ihren Primärschlüssel aus. In dieser Regel sind wir jedoch nur an den Ländern interessiert, die in den Tabellen vorhanden sind, also deaktivieren Sie den Primärschlüssel SupplierID und wählen Sie die Spalte Country aus.
-
Wir müssen die andere Tabelle hinzufügen, die Länderinformationen enthält, also klicken Sie auf + Tabellen.
-
Suchen Sie die Tabelle Customer und klicken Sie auf Hinzufügen. Der App Builder wird die Tabelle Customer hinzufügen und Sie werden sie im Tab Tabellen neben Supplier sehen können.
-
Gehe zum Joins-Tab.
-
Der App Builder hat einen Join erstellt, aber passe ihn an, um ihn in die gewünschte Art zu bringen. Stelle sicher, dass Supplier im Left-Feld ausgewählt ist und dass im Type-Feld Union steht.
-
Einige Länder erscheinen mehr als einmal. Um wiederholte Ergebnisse zu vermeiden, gehe zum Rule-Panel und klicke auf More > Edge Case. Im Dialogfeld Edge Case Settings aktiviere das Kontrollkästchen Select Distinct.
-
Klicke auf den SQL-Tab, wenn du die Syntax deiner Union sehen möchtest:

-
Um deine Ergebnisse zu sehen, klicke auf die Results-Schaltfläche im Rule-Panel.
CRUD-Regeln
Wir haben CRUD-Regeln in Lektion 7 eingeführt, aber jetzt schauen wir uns diese genauer an.
Das Akronym CRUD steht für "Create, Read, Update, Delete". Das bedeutet, dass CRUD-Regeln von App Builder-Entwicklern verwendet werden, um Datensätze in den Tabellen der Datenquelle einzufügen, abzurufen, zu ändern oder zu löschen.
Zielschicht: Geschäft vs. Daten
Wenn du eine CRUD-Regel erstellst, musst du eine Zielschicht auswählen: entweder die Geschäfts- oder die Datenschicht. Diese Wahl ist entscheidend und hat erhebliche Auswirkungen.
Die Geschäfts- schicht anzusprechen ist der empfohlene Ansatz für die meisten Operationen. Wenn deine CRUD-Regel die Geschäftsschicht anvisiert (z. B. das Order (Source)-Geschäftsobjekt), verhält sie sich wie ein Benutzer, der mit der Anwendung interagiert. Sie löst alle intrinsischen Ereignisse (Speichern, Aktualisieren usw.) aus, die mit diesem Geschäftsobjekt verbunden sind. Das bedeutet, dass alle konfigurierten Validierungsregeln, benutzerdefinierten Aktionen und die Audit-Lite-Verfolgung automatisch ausgeführt werden. Dieser Ansatz gewährleistet die Datenintegrität und Konsistenz mit der Logik deiner Anwendung. Er ermöglicht es dir auch, Erfolgs- und Fehlerbehandler für das Ereignis zu verwenden.
Die Datenschicht anzusprechen umgeht alle Geschäftslogik. Wenn du die Datenschicht anvisierst (z. B. die Order-Tabelle), interagiert deine Regel direkt mit der Datenbank. Sie löst keine intrinsischen Ereignisse, Validierungen oder Audit-Verfolgungen aus, die auf dem Geschäftsobjekt konfiguriert sind. Dies ist ein "Hintertür"-Ansatz, der nützlich für leistungsstarke Bulk-Operationen ist, bei denen du absichtlich die Geschäftslogik umgehen möchtest.
Sie können diesen Unterschied visuell im visuellen Workflow sehen; eine Regel, die sich an die Geschäftsschicht richtet, zeigt Unterprozesse für ihre Ereignislogik, während eine, die sich an die Datenschicht richtet, dies nicht tut.
Hinweis
Der App Builder unterstützt auch XP CRUD-Regeln, die spezialisierte Regeln zum Schreiben von Daten zwischen zwei verschiedenen Datenquellen sind. Diese Regeln laufen immer über die Geschäftsschicht, um sicherzustellen, dass alle Logik angewendet wird. Siehe CRUD (Regel) für weitere Informationen.
CRUD-Aktualisierung
Zuerst sehen wir uns an, wie man eine CRUD-Aktualisierungsregel erstellt. Dies bedeutet, vorhandene Datensätze in einer Tabelle zu ändern. Um dies zu demonstrieren, erstellen wir eine Regel, die alle Mengen der bestellten Produkte erhöht.
-
Gehen Sie zu App Workbench > Regeln, und klicken Sie auf + Regel.
-
Geben Sie im Feld Name
OrderDetail (Menge + 1)ein. -
Wählen Sie im Feld Zweck CRUD aus.
-
Wählen Sie im Feld Aktion Aktualisieren aus.
-
Wählen Sie unter Zielschicht Datenschicht aus. (Für dieses einfache Massenupdate werden wir die Geschäftslogik umgehen).
-
Wählen Sie im Feld Ziel OrderDetail aus.
-
Klicken Sie auf Erstellen. Der App Builder benötigt einige Sekunden, um die Regel zu erstellen.
-
Im Tab Tabellen wird die Tabelle OrderDetail angezeigt, mit ihrem Primärschlüssel OrderDetailID, der ausgewählt ist. Wählen Sie auch die Spalte Menge aus, indem Sie das Kontrollkästchen anklicken.
-
Wir fügen eine neue Spalte mit einem Alias hinzu, um uns zu helfen, zu visualisieren, dass die Regel funktioniert. Gehen Sie zum Tab Spalten und klicken Sie auf + Spalte. Wenn der Dialog Spalte - Spalte hinzufügen geöffnet wird, geben Sie die folgenden Informationen ein:
-
Geben Sie im Feld Spalte oder Ausdruck
OD.Quantity + 1ein. -
Geben Sie im Feld Alias einen lesbaren Namen ein. Wir verwenden
QuantityPlus. -
Wählen Sie im Feld Ziel Menge aus. Dies sagt dem App Builder, dass das Ergebnis dieses Ausdrucks in die Spalte Menge geschrieben werden soll.
-
Klicken Sie auf Speichern.
-
-
Im Tab Spalten sehen Sie jetzt sowohl Menge als auch QuantityPlus. Die ursprüngliche Spalte OD.Quantity wird standardmäßig ebenfalls auf Menge ausgerichtet. Wir müssen sie abwählen, um Mehrdeutigkeiten zu vermeiden:
-
Finden Sie die OD.Quantity-Zeile in der Spalten-Liste.
-
Klicken Sie auf das Dropdown-Menü Ziel. Ein X-Button erscheint daneben. Klicken Sie darauf, um die Spalte nicht mehr zuzuordnen.
Dies stellt sicher, dass nur unser QuantityPlus-Ausdruck verwendet wird, um die Quantity-Spalte zu aktualisieren. Wenn beide zugeordnet wären, würde die mit dem höheren Index "gewinnen", was zu unvorhersehbarem Verhalten führen könnte.
-
-
Die Regel ist bereit. Klicken Sie im Regel-Panel auf das Ergebnisse-Panel, um zu sehen, wie sie funktioniert. Beachten Sie, dass die zusätzliche Spalte, die Sie hinzugefügt haben, alle Mengen um eins erhöht:

Übungszeit: Erstellen Sie eine CRUD-Aktualisierungsregel
Überlegen Sie, wie Sie eine CRUD-Aktualisierungsregel erstellen würden, die der oben erstellten ähnlich ist, jedoch mit dem gegenteiligen Effekt, d.h. eine Regel, die alle Einträge in der Quantity-Spalte der OrderDetail-Tabelle um eins verringert.
CRUD löschen
CRUD-Löschregeln werden verwendet, um Datensätze aus den Tabellen zu löschen. Da es jedoch einfach ist, UI-Elemente zu verwenden, um einzelne Datensätze zu löschen, werden CRUD-Löschregeln typischerweise nur verwendet, um viele Datensätze auf einmal zu löschen. Um dies zu demonstrieren, erstellen wir eine CRUD-Löschregel, die alle Bestelldetails, die mit einer einzelnen Bestellung verbunden sind, löscht, um die Notwendigkeit zu beseitigen, alle Bestelldetails separat zu löschen, wenn eine Bestellung storniert wird.
-
Klicken Sie in App Workbench > Regeln auf + Regel.
-
Geben Sie im Feld Name
OrderDetail (Löschen von OrderDetail für Bestellung)ein. -
Wählen Sie im Feld Zweck CRUD aus.
-
Wählen Sie im Feld Aktion Löschen aus.
-
Wählen Sie unter Zielschicht Datenebene aus.
-
Wählen Sie im Feld Ziel OrderDetail aus.
-
Klicken Sie auf Erstellen.
-
Im Tab Tabellen hat der App Builder die OrderDetail-Tabelle hinzugefügt und ihren Primärschlüssel, OrderDetailID, ausgewählt. Lassen Sie diesen ausgewählt, da die Zuordnung des Primärschlüssels der effizienteste und sicherste Weg ist, eine Löschoperation durchzuführen. Wählen Sie auch die OrderID-Spalte aus; wir werden diese Spalte im nächsten Abschnitt verwenden, um die Regel an eine bestimmte Bestellung zu binden.
CRUD-Regeln an Ereignisse anhängen
CRUD-Regeln können nur in der Anwendungsebene verwendet werden, wenn sie an Ereignisse angehängt sind, die Prozesse sind, die in Tabellen oder Geschäftsobjekten integriert sind und als Reaktion auf bestimmte Aktionen, wie das Speichern eines Datensatzes, ausgeführt werden. Alle Tabellen und Geschäftsobjekte haben intrinsisch vier Ereignisse: speichern, aktualisieren, löschen und einfügen, die ausgeführt werden, wenn Sie Datensätze im App Builder ändern.
Lassen Sie uns die CRUD-Regeln aktivieren, die wir erstellt haben, indem wir sie entweder an ein intrinsisches Ereignis anhängen oder unsere eigenen benutzerdefinierten Ereignisse erstellen. Im Gegensatz zu intrinsischen Ereignissen müssen benutzerdefinierte Ereignisse an ein Steuerelement auf der Anwendungsebene angehängt werden, um ausgeführt zu werden. Die CRUD-Regeln, die wir erstellen, erfordern benutzerdefinierte Ereignisse, um ausgeführt zu werden, wann immer wir es wünschen.
Zuerst erstellen wir ein benutzerdefiniertes Ereignis, um es mit unserer CRUD-Löschregel zu verknüpfen, damit die zugehörigen Bestelldetails ebenfalls gelöscht werden, wenn eine Bestellung gelöscht wird.
-
Gehen Sie zu App Workbench > Regeln, suchen Sie die Bestellung (Quelle)-Tabelle und wählen Sie sie aus.
-
Klicken Sie im Regel-Panel auf Ereignisse. Der Dialog Alle Ereignisse (Bestellung (Quelle)) öffnet sich.
-
Da wir ein benutzerdefiniertes Ereignis erstellen, klicken Sie auf + Regelereignis. Die Seite Ereignis öffnet sich, auf der Sie die Details des neuen Ereignisses hinzufügen können:
-
Geben Sie unter Ereignisinformationen im Feld Name
Löschen von Bestelldetailsein. -
Geben Sie unter Nachrichten im Feld Bestätigung eine Nachricht ein, die den Benutzern vor der Ausführung des Ereignisses angezeigt wird. Die Nachricht sollte informativ sein und klar angeben, was passiert, wenn der Benutzer fortfährt. Hier ist ein Beispiel:

-
Lassen Sie die anderen Felder mit ihren Standardauswahlen und klicken Sie auf Speichern. Der App Builder erstellt das Ereignis.
Hinweis
Siehe Ereignisdetailoptionen für eine vollständige Beschreibung aller Felder.
-
-
Das Ereignis wurde erstellt, und der App Builder zeigt Ihnen den Konfigurationsbildschirm an:

Beachten Sie, dass noch keine Regeln angehängt sind. CRUD-Regeln, wie die, mit denen wir arbeiten, sind an Ereignisse im Aktionen-Panel angehängt. Klicken Sie dort auf die Schaltfläche Registrieren. Der Dialog Aktion öffnet sich:
-
Wählen Sie im Feld Typ Regel aus.
-
Wählen Sie im Feld Regel OrderDetail (Löschen von OrderDetail für Bestellung), die CRUD-Löschregel, die wir zuvor erstellt haben.
-
Sie können die anderen Felder mit ihren Standardauswahlen belassen. Klicken Sie auf Speichern. Der Dialog für die Aktion zeigt weitere Details an:

-
Klicken Sie im Bindings-Panel auf + Binding. Wählen Sie OrderID als Quellspalte und OrderID als Regelspalte aus.
Hinweis
Dieser Bindungsschritt ist entscheidend, da er die Ergebnisse Ihrer Regel nach dem Panel-Datensatz filtert, gegen den Sie das Ereignis ausgeführt haben. Wenn es "ungebunden" bleibt, würde die Löschregel alle Datensätze in der OrderDetail-Tabelle betreffen. Durch das Binden der Quellspalte (OrderID aus dem Order (Quelle)-Panel-Datensatz) an die Regelspalte (OrderID in unserer Löschregel) fügen wir einen impliziten Filter hinzu (z. B.
WHERE OrderID = 10248).Dies stellt sicher, dass nur die OrderDetail-Datensätze, die mit dieser spezifischen OrderID übereinstimmen, gelöscht werden. Wenn diese Bindung weggelassen würde, würde das Auslösen des Ereignisses alle Datensätze aus der OrderDetail-Tabelle löschen.
-
Klicken Sie auf Speichern.
-
-
Das benutzerdefinierte Ereignis ist jetzt bereit zur Implementierung.
Weiterführende Informationen
Neben dem, was in diesem Beispiel gezeigt wird, kann die Ereigniskonfiguration im App Builder auch Folgendes umfassen:
-
Wo Ereignisse konfiguriert werden: Ereignisse können auf der Geschäftsebene (Geschäftsobjekte) oder der Datenebene (Tabellen) konfiguriert werden. Die Registrierung von Ereignissen auf der Geschäftsebene ermöglicht eine unterschiedliche Logik pro Schnittstelle, während Ereignisse auf der Datenebene global sind. Lesen Sie mehr in Wo Ereignisse konfiguriert werden.
-
Ereignisvererbung: Geschäftsobjekte können Ereignislogik von der zugrunde liegenden Tabelle oder anderen Quellen erben. Lesen Sie mehr über die Ereignisvererbung.
Übungszeit: CRUDs und benutzerdefinierte Ereignisse erstellen
-
Erstellen Sie ein Ereignis mit dem Titel Menge + 1 im Geschäftsobjekt OrderDetail (Quelle) und fügen Sie die CRUD OrderDetail (Menge + 1) als Aktion hinzu.
-
Erstellen Sie ein weiteres Ereignis am selben Ort wie die vorherige Übung, verwenden Sie jedoch die CRUD-Regel Menge - 1.
Sobald Sie diese benutzerdefinierten Ereignisse erstellt und mit CRUD-Regeln verknüpft haben, sind Sie bereit, sie in der Anwendung zu implementieren.
Ereignisse auslösen
Wir haben die CRUD-Regeln, die wir erstellt haben, mit benutzerdefinierten Ereignissen verknüpft. Daher müssen wir, um sie zu unserer Anwendung hinzuzufügen, ein Steuerelement verwenden, das das Ereignis auslöst oder aktiviert. Im Gegensatz dazu müssen wir, wenn eine Regel mit einem der intrinsischen Ereignisse (speichern, einfügen, aktualisieren oder löschen) verknüpft ist, dies nicht tun.
Es stehen mehrere Steuerungstypen zur Verfügung, aber wir verwenden Schaltflächensteuerungen, um unsere benutzerdefinierten Ereignisse auszulösen. Lassen Sie uns zunächst die Regel Bestelldetails löschen (OrderDetail von Bestellung löschen) zu einer Schaltfläche im Bestellung-Panel der Bestell-Seite hinzufügen.
-
Klicken Sie auf der Startseite des App Workbench auf die Schaltfläche, um Ihre Anwendung in ihrem aktuellen Zustand auszuführen. Der App Builder öffnet sie in einem neuen Tab.
-
Navigieren Sie in der App-Vorschau zur Bestellungen-Seite.
-
Klicken Sie auf das Hamburger-Symbol, um die Aktionsleiste zu öffnen, und wählen Sie dann Live Designer.
-
Klicken Sie auf das Bestellungen-Panel. Dadurch werden im Live-Designer Bearbeitungsoptionen dafür angezeigt.
-
Klicken Sie im Tab Bestellungen - Panel auf + Steuerung. Der Dialog Steuerung hinzufügen öffnet sich:
-
Überspringen Sie das Feld Spalte, da wir keine Daten zum Panel hinzufügen. Wählen Sie im Feld Steuerungstyp Schaltfläche aus.
-
Geben Sie im Feld Name Bestelldetails löschen ein.
-
Wählen Sie im Feld Control Subtype Primary aus.
-
Klicken Sie auf Next. Der Dialog Add a Control wird zum nächsten Schritt Navigation weitergeleitet.
-
Wählen Sie im Feld Execute an Event Delete Order Details aus, das benutzerdefinierte Ereignis, das wir erstellt haben.
-
Wählen Sie im Feld After Event Action Stay aus.
-
Klicken Sie auf Next.
-
Bestätigen Sie, dass die Details korrekt sind, und klicken Sie auf Finish.
-
-
Der App Builder fügt die Schaltfläche zu den Zeilen im Orders-Panel hinzu. Verlassen Sie den Live-Designer und stellen Sie sicher, dass Sie eine Schaltfläche sehen, die für jede Zeile im Panel Delete Order Details sagt.

-
Testen Sie die Schaltfläche, indem Sie darauf klicken. Wenn Sie alles korrekt konfiguriert haben, werden nur die Bestelldetails der ausgewählten Bestellung gelöscht.
Übungszeit: CRUDs und Ereignisse
Bleiben Sie auf der Orders-Seite und fügen Sie zwei Schaltflächen zum OrderDetails-Panel hinzu. Eine davon sollte das benutzerdefinierte Ereignis Quantity + 1 auslösen, und die andere sollte das Ereignis Quantity - 1 auslösen, das wir zuvor erstellt haben.
Unterabfrage-Regeln
Unterabfrage-Regeln sind Vermittler zwischen einer Tabelle und ihren Regeln. Unterabfrage-Regeln werden verwendet, um die Daten zu berechnen oder anzupassen und diese neuen Informationen an das Objekt weiterzugeben, in dem sie platziert sind.
Wir werden dies demonstrieren, indem wir eine Unterabfrage-Regel erstellen. Diese wird verwendet, um die maximale OrderNumber der Order-Tabelle zu finden und dann eins hinzuzufügen. Später werden wir eine CRUD-Regel erstellen, die darauf abzielt, eine Bestellung zu kopieren, und sie wird von dieser Unterabfrage abhängen, um zu funktionieren.
-
Klicken Sie in App Workbench > Rules auf + Rule.
-
Geben Sie im Feld Name
Order (OrderNumber + 1)ein. -
Wählen Sie im Feld Purpose Subquery aus.
-
Wählen Sie im Feld Target Order aus.
-
Klicken Sie auf Create. Der App Builder erstellt die neue Regel.
-
Der App Builder wählt automatisch den Primärschlüssel der Order-Tabelle aus, aber wir benötigen ihn für diese Regel nicht. Deaktivieren Sie ihn im Tab Tables.
Warum OrderID abwählen?
Wenn man eine Aggregatfunktion wie hier verwendet, führt das Hinzufügen einer anderen Spalte zur Abfrage (wie OrderID) dazu, dass die Datenbank eine
GROUP BY-Klausel für diese Spalte anwendet.Wenn wir OrderID einbeziehen würden, würde der Ausdruck die maximale OrderNumber pro OrderID finden. Dies würde nur die OrderNumber für jede Bestellung zurückgeben, was nicht unser Ziel ist.
Um die einzige maximale OrderNumber über die gesamte Tabelle hinweg zu finden, dürfen wir keine anderen Spalten in unsere Abfrage einbeziehen. Deshalb verwenden wir eine Unterabfrage: um diese Aggregatberechnung zuerst durchzuführen, damit sie in einer anderen Regel verwendet werden kann.
-
Klicken Sie im Tab Spalten auf + Spalte. Der Dialog Spalte - Spalte hinzufügen öffnet sich.
-
Geben Sie im Feld Spalte oder Ausdruck den Ausdruck
Max(O.OrderNumber) + 1ein. Die SyntaxMax()ruft die Max-Funktion auf, die den größten Wert in der SpalteO.OrderNumberfindet. Dann wird eins hinzugefügt. -
Geben Sie im Feld Alias und Ziel einen geeigneten Alias für diese Spalte ein, wie z.B.
MaxOrderNumber. -
Wählen Sie im Feld Logischer Datentyp Zahl aus, da OrderNumber kein UUID-Wert, sondern eine natürliche Zahl ist.
-
Klicken Sie auf Speichern.
-
Überprüfen Sie, ob die Regel korrekt funktioniert, indem Sie auf die Schaltfläche Ergebnisse klicken. Es sollte nur eine Zeile mit einer Bestellnummer geben, die um eins höher sein sollte als die größte Bestellnummer, die derzeit in der Bestell-Tabelle vorhanden ist.
Jetzt erstellen wir eine CRUD-Regel, die in der Lage ist, eine Bestellung zu kopieren. Diese CRUD-Regel wird auf der Unterabfrage-Regel basieren, die wir gerade erstellt haben.
-
Klicken Sie in App Workbench > Regeln auf + Regel.
-
Geben Sie im Feld Name
Bestellung (Bestellung kopieren)ein. -
Wählen Sie im Feld Zweck CRUD aus.
-
Wählen Sie im Feld Aktion Einfügen aus.
-
Wählen Sie im Feld Zielschicht Datenebene aus.
-
Wählen Sie im Feld Ziel Bestellung aus.
-
Klicken Sie auf Erstellen. Der App Builder wird die Regel erstellen.
Sobald die Regel erstellt ist, müssen Sie ihre Details konfigurieren.
-
Im Tab Tabellen hat der App Builder automatisch die Bestellung-Tabelle hinzugefügt, aber wir benötigen mehr. Klicken Sie auf + Tabellen.
-
Wählen Sie die Unterabfrage-Regel aus, die wir zu diesem Zweck erstellt haben, Bestellung (Bestellnummer + 1). Klicken Sie auf Hinzufügen.
-
Jetzt wählen wir die Spalten aus, die wir benötigen:
-
Wählen Sie aus der Bestellung-Tabelle alle Spalten aus, außer den Spalten, die für die Audit Lite erstellt wurden. Wir schließen KundenID, MitarbeiterID und VersanddienstleisterID ein, um die kopierte Bestellung vollständiger zu machen.
-
Wählen Sie aus der Unterabfrage-Regel Bestellung (Bestellnummer + 1) deren einzige Spalte, MaxBestellnummer.
-
-
Im Tab Spalten müssen wir die Zielwerte der Regel konfigurieren. Das Ziel einer Regel definiert, welche Spalte in der Basistabelle den Wert aus dem Quellausdruck erhält.
-
Suchen Sie die Zeile OON.MaxBestellnummer und wählen Sie im Dropdown Ziel Bestellnummer aus. Dies ordnet unsere neue, inkrementierte Nummer der richtigen Spalte zu.
-
Suchen Sie die Zeile BestellID. Stellen Sie sicher, dass das Dropdown Ziel auf Keine eingestellt ist. Dies schließt BestellID in die Regel ein, sodass wir sie für Bindungen verwenden können, verhindert jedoch, dass die Regel versucht, die ursprüngliche BestellID zu kopieren, was den Primärschlüsselbeschränkungen widersprechen würde.
-
Überprüfen Sie, ob alle anderen Spalten (wie KundenID, Bestelldatum usw.) auf ihre entsprechenden Spalten abzielen.
Weiterführende Informationen
Erfahren Sie mehr über dieses Konzept in Ziel in Geschäftsobjektregeln.
-
-
Klicken Sie im Regel-Panel auf Ergebnisse, um zu überprüfen, ob die Regel korrekt funktioniert.
Wir haben nun die Regel erstellt, die vorhandene Bestellungen kopiert. Lassen Sie uns diese an ein benutzerdefiniertes Ereignis anhängen.
-
Gehen Sie zu App Workbench > Regeln, suchen Sie die Bestellung (Quelle)-Tabelle und wählen Sie sie aus.
-
Klicken Sie im Regel-Panel auf Ereignisse. Der Dialog Alle Ereignisse (Bestellung (Quelle)) öffnet sich.
-
Klicken Sie auf + Regelereignis. Die Seite Ereignis öffnet sich, auf der Sie die Details des neuen Ereignisses hinzufügen können:
-
Geben Sie unter Ereignisinformationen im Feld Name
Bestellung kopierenein. -
Geben Sie unter Nachrichten im Feld Bestätigung die Bestätigungsnachricht ein, die den Benutzern vor der Ausführung des Ereignisses angezeigt wird.
-
Lassen Sie die anderen Felder mit ihren Standardauswahlen und klicken Sie auf Speichern.
Weiterführende Informationen
Lesen Sie über die anderen Felder in Ereignisdetaileinstellungen.
-
-
Das Ereignis wurde erstellt. Klicken Sie im Aktionen-Panel auf Registrieren, um unsere neue Regel hinzuzufügen. Der Aktion-Dialog öffnet sich:
-
Wählen Sie im Feld Typ Regel aus.
-
Wählen Sie im Feld Regel Bestellung (Bestellung kopieren) aus.
-
Klicken Sie im Bindings-Panel auf + Binding und wählen Sie OrderID als Quellspalte und OrderID als Regelspalte aus. Die Verwendung von OrderID (einem Primärschlüssel) für das Binding ist zuverlässiger als die Verwendung von OrderNumber, die möglicherweise nicht eindeutig ist.
-
-
Jetzt, da die neue Regel konfiguriert und an ein Ereignis angehängt ist, fügen Sie eine Schaltfläche im Bestellungen-Panel auf der Bestellungen-Seite hinzu, die sie auslöst. Wiederholen Sie die Schritte, die wir im Abschnitt Ereignisse auslösen unternommen haben, aber fügen Sie diesmal die neue Bestellung (Bestellung kopieren)-Regel hinzu.
-
Überprüfen Sie schließlich, ob Ihre neue Schaltfläche wie erwartet funktioniert, indem Sie die Vorschau der Bestellungen-Seite besuchen und darauf klicken.
Validierungen
Validierungsregeln werden verwendet, um sicherzustellen, dass die in den App Builder eingegebenen Daten gültig sind, bevor sie gespeichert werden. In Lektion 7 haben wir eine einfache "Pflichtfeld"-Validierung behandelt. Jetzt werden wir ein komplexeres Validierungsszenario erkunden, das benutzerdefinierte Logik und dynamische Fehlermeldungen umfasst.
Wie andere Regeln müssen auch Validierungsregeln an ein Ereignis angehängt werden, um verwendet zu werden. Die Wahl des Ereignisses hängt vom Anwendungsfall ab:
-
Intrinsisches Ereignis: Verwenden Sie dies, wenn die Validierung automatisch während der Standardoperationen ausgeführt werden soll (z. B. das Verhindern eines Speicherns, wenn die Daten ungültig sind).
-
Benutzerdefiniertes Ereignis: Verwenden Sie dies, wenn Sie die Validierung auf Anfrage von einer bestimmten Steuerung (z. B. einem Schaltflächenklick) auslösen möchten.
Lassen Sie uns eine Validierungsregel erstellen, um sicherzustellen, dass ein Rabatt auf eine Bestellung niemals größer als 10 % ist. Wir möchten, dass dies jedes Mal ausgeführt wird, wenn ein OrderDetail-Datensatz gespeichert wird, daher werden wir es an das intrinsische Speichereignis anhängen.
-
In App Workbench > Regeln, klicken Sie auf + Regel.
-
Geben Sie im Feld Name
OrderDetail (Rabatt validieren)ein. -
Wählen Sie im Feld Zweck Validierung aus.
-
Wählen Sie im Feld Ziel OrderDetail aus.
-
Klicken Sie auf Erstellen.
-
Wählen Sie im Tab Tabellen die Spalte Rabatt aus (Sie können OrderDetailID abwählen).
-
Klicken Sie im Tab Wo auf + Where-Klausel. Ein Dialog öffnet sich, in dem Sie
WHERE-Klauseln erstellen können:
-
Geben Sie im Feld Linker Ausdruck
OD.Rabattein. -
Wählen Sie im Feld Operator
>aus. -
Geben Sie im Feld Rechter Ausdruck
0.1ein.
-
-
Klicken Sie auf Speichern.
Die Regel ist jetzt erstellt. Sie ist dazu gedacht, "schlechte" Daten (Datensätze, bei denen der Rabatt über 10 % liegt) zu finden.
Validierungsregel anhängen
Jetzt hängen wir unsere Validierungsregel an das intrinsische Speicherevent für OrderDetail an.
-
In App Workbench > Regeln, suchen Sie das Geschäftobjekt OrderDetail (Quelle) und öffnen Sie es.
-
Klicken Sie im Panel Regel auf Ereignisse. Der Dialog Alle Ereignisse (OrderDetail (Quelle)) öffnet sich.
-
Suchen Sie das Speicherevent und klicken Sie auf Regelereignisdetails.
-
Klicken Sie im Panel Validierungen auf Registrieren. Der Dialog Validierung öffnet sich:

-
Wählen Sie im Feld Typ Regel aus.
-
Wählen Sie im Feld Regel OrderDetail (Rabatt validieren), die Validierungsregel, die wir gerade erstellt haben.
-
Wählen Sie im Feld Bindung Implizit aus.
Hinweis
Implizite Bindung validiert gegen die Daten, die sich derzeit "im Speicher" auf dem Bildschirm des Benutzers befinden. Dies ist der Wert, den der Benutzer eingegeben hat, bevor er in die Datenbank gespeichert wurde. Wir verwenden hier die implizite Bindung, weil wir den Benutzer daran hindern möchten, einen neuen Datensatz zu speichern, während der Rabatt-Wert ungültig ist (d.h. größer als 10 %). Andererseits validiert Explizite Bindung gegen die Daten, die bereits in der Datenbank gespeichert sind.
Um dies zu veranschaulichen, stellen Sie sich vor, ein Datensatz wurde mit einem ungültigen Rabatt von 50 % gespeichert. Ein Benutzer öffnet diesen Datensatz, korrigiert das Feld Rabatt auf einen gültigen Wert wie 7 % und reicht ihn ein. Wenn das Validierungsereignis eine explizite Bindung verwendet, wird es die Datenbank überprüfen, den ursprünglichen Wert von 50 % sehen und die Validierung fehlschlagen. Wenn das Validierungsereignis jedoch eine implizite Bindung verwendet, wird es den im Speicher befindlichen Wert (7 %) überprüfen, feststellen, dass dieser nicht größer als 10 % ist, und die Validierung bestehen, wodurch das Speichern ermöglicht wird.
Lesen Sie mehr in Implizite und explizite Bindung.
-
Wählen Sie im Feld Fehler Fehler bei zurückgegebenen Daten aus.
Hinweis
Die Validierungen im App Builder können auf zwei Arten konfiguriert werden. Die Standardkonfiguration, die wir verwenden, ist Fehler bei zurückgegebenen Daten. Das bedeutet, dass die Validierungsregel so geschrieben ist, dass sie die fehlerhaften Daten findet (z. B. Rabatt ist größer als 10 %). Wenn die Regel Datensätze findet, die diesem "schlechten" Kriterium entsprechen, schlägt sie fehl und zeigt die Fehlermeldung an. Die Alternative ist Fehler bei keinen zurückgegebenen Daten, die verwendet wird, wenn eine Regel geschrieben wird, um gute Daten zu finden.
-
Geben Sie im Feld Nachricht eine beschreibende, aber einfache Nachricht ein, etwas wie:
Rabatt darf nicht größer als 10 % sein. Dieses Feld darf nicht leer gelassen werden. -
Klicken Sie auf Speichern, um den Dialog zu schließen.
Die Validierung ist angehängt. Um sie zu testen, gehen Sie zur Vorschau der Bestellungen-Seite, wählen Sie eine Bestellung aus und versuchen Sie, einen Bestellposition-Artikel mit einem Rabatt von mehr als 10 % zu bearbeiten. Wenn Sie auf Speichern klicken, sollten Sie die von Ihnen geschriebene Fehlermeldung sehen.
Übungszeit: Dynamische Substitution in Validierungsnachrichten
Anstatt den Rabatt, den Benutzer direkt über eine Regel wie die, die wir gerade erstellt haben, anwenden können, zu begrenzen, können wir auch das Rabattlimit zu einem Wert machen, den Benutzer ändern können. Der Weg, wie wir das tun können, besteht darin, es als anwendungsspezifischen Parameter hinzuzufügen und in der Parameter-Tabelle zu speichern.
-
Navigieren Sie in App Workbench > Seiten zur Parameter-Seite, die in Lektion 4 erstellt wurde.
-
Gehe zum Panel-Tab, finde das Feld Panel-Quelle und klicke auf das Tabellen-Symbol. Dies bringt dich zum Bearbeitungsbildschirm der Parameter-Tabelle.
-
Füge im Spalten-Tab eine neue Spalte hinzu, indem du auf + Spalte klickst.
-
Gib ihr den Namen
DiscountMaximum. -
Wähle im Feld Logisch Zahl aus.
-
Wähle im Feld Physisch Dezimal aus.
-
Klicke auf Speichern.
-
Jetzt fügen wir die neue Spalte zum Geschäftsobjekt hinzu, das auf dem Parameter-Tab basiert. Du kannst es entweder in App Workbench > Regeln finden oder indem du zum vorherigen Bildschirm zurückkehrst und dann auf das Symbol für Geschäftslogik neben dem Feld Panel-Quelle klickst.
-
Sobald du im Bearbeitungsbildschirm der Regel Parameter (Quelle) bist, gehe zum Tabellen-Tab und finde die neue DiscountMaximum-Spalte in der Liste der Spalten aus der Parameter-Tabelle. Klicke auf das Häkchen, um sie auszuwählen.
-
Kehre jetzt zur Parameter-Seite zurück, entweder indem du sie in App Workbench > Seiten findest oder indem du zum vorherigen Bildschirm zurückkehrst. Füge die neue DiscountMaximum-Spalte zur Liste der Steuerelemente im Parameter-Panel hinzu.
-
Jetzt verwende im Vorschau der Parameter-Seite die Schaltfläche Bearbeiten, um den maximalen Rabatt auszuwählen, den du möchtest. Zum Beispiel, gib
.3ein, um Rabatte von bis zu 30% zuzulassen.
Weiterführende Informationen
Für weitere Techniken zur Sicherstellung der Datenintegrität siehe Validierungstipps.
Bearbeite die Validierungsregel, um den neuen Parameterwert zu verwenden
Obwohl wir unseren Benutzern erlauben möchten, den maximalen Rabatt festzulegen, verwendet die Validierungsregel, die wir zuvor erstellt haben, einen festen, hartcodierten maximalen Rabatt, sodass sie immer noch keine Rabatte größer als 10% toleriert. Lass uns diese bearbeiten, um den Wert zu verwenden, den wir auf der Parameter-Seite eingeben. Folge diesen Schritten:
-
Gehe zu App Workbench > Regeln und öffne die Regel OrderDetail (Rabattvalidierung).
-
Klicke im Tabellen-Tab auf + Tabellen.
-
Klicke auf Hinzufügen für die Parameter-Tabelle.
-
Jetzt, da die Parameter-Tabelle auch im Tabellen-Tab angezeigt wird, wählen Sie die DiscountMaximum-Spalte aus.
-
Gehen Sie zum Where-Tab. Wir müssen die
WHERE-Klausel, die wir erstellt haben, bearbeiten, da wir hier keinen fest codierten Wert mehr verwenden möchten. Klicken Sie auf das Stiftsymbol, um sie zu bearbeiten. -
Geben Sie im Feld Rechter Ausdruck
P.DiscountMaximumein. Der App Builder benötigt einen Moment, um zu speichern. -
Besuchen Sie nun die Vorschau der Bestellungen-Seite erneut. Wenn Sie versuchen, ein neues Produkt im Bestelldetails-Panel hinzuzufügen, werden Sie sehen, dass Sie jetzt Rabatte von bis zu 30 % gewähren dürfen.
Wenn Sie jetzt versuchen, einen Rabatt über 30 % zu gewähren, wird Ihnen dies nicht erlaubt. Die Fehlermeldung sagt jedoch immer noch das vorherige Limit von 10 %, da wir dies auch fest codiert haben, als wir die Validierungsregel zuerst erstellt haben. Um zu vermeiden, dass wir die Nachricht jedes Mal bearbeiten müssen, wenn sich das Limit ändert, werden wir dynamische Substitution verwenden, um die Nachricht automatisch zusammen mit dem Limit zu aktualisieren.
-
In App Workbench > Regeln, navigieren Sie zur Regel OrderDetail (Quelle).
-
Diese Regel zieht derzeit nur Daten aus der OrderDetail-Tabelle, also klicken Sie im Tabellen-Tab auf + Tabelle und wählen Sie die Parameter-Tabelle aus. Wenn sie erscheint, wählen Sie die DiscountMaximum-Spalte aus.
-
Jetzt hat die Regel Zugriff auf den neuesten maximalen Rabatt und kann "sehen", wenn sich dieser ändert. Es ist eine gute Praxis, ihr einen Alias zu geben, den wir in der Nachricht verwenden werden, also geben Sie
MaxDiscountin dieses Feld ein. Um sicherzustellen, dass die Zahl korrekt in der Benutzeroberfläche angezeigt wird, gehen Sie zum Spalten-Tab und casten Sie sie als Prozent. -
Navigieren Sie als Nächstes zurück zur Fehlermeldung, die wir zuvor geschrieben haben, indem Sie zum Regel-Panel gehen und auf Ereignisse klicken. Wenn der Dialog geöffnet wird, suchen Sie die Zeile Speichern und klicken Sie auf Regelereignisdetails. Die von uns implementierte Validierung wird im Validierungen-Panel angezeigt. Klicken Sie, um sie zu bearbeiten.
-
Schließlich ersetzen Sie im Feld Nachricht den fest codierten
10%durch{{ MaxDiscount }}. Das Umgeben des Alias mit den doppelten geschweiften Klammern sorgt dafür, dass der App Builder dynamische Substitution anwendet, um den aktuellen maximalen Rabatt anzuzeigen, anstatt einen festen, unveränderlichen Wert.
Weiterführendes Lernen
Dies schließt diesen tiefen Einblick in die Details der Geschäftsschicht des App Builders ab. Siehe Anhang A für einen genaueren Blick auf die Datenschicht oder Anhang C für die UI-Schicht.