ORDA – Einstieg in die berührende Veranstaltung

Automatisch übersetzt von Deepl

ORDA ist ein wichtiges langfristiges Feature , das eine Welt neuer Möglichkeiten in 4D eröffnet.

Wir entwickeln ORDA ständig weiter, um leistungsstarken Code zu liefern. Dadurch werden Ihre Anwendungen einfach zu entwickeln und zu pflegen. Und vor allem werden sie mit großer Leistung für Ihre Endbenutzer optimiert.

Deshalb freuen wir uns, eine neue Funktion in 4D 20 R10 einzuführen, die Ereignisse auf Daten im Speicher betrifft.

Bei einer typischen Benutzerreise werden die vom Benutzer benötigten Daten in den Speicher geladen. Dann werden sie entsprechend den Aktionen des Benutzers geändert und schließlich gespeichert, wenn der Benutzer auf eine Schaltfläche zum Speichern klickt.

Wie wäre es, wenn die Geschäftslogik automatisch ausgelöst wird, wenn sich bestimmte Daten im Speicher ändern? Es ist nun möglich, die Daten so früh wie möglich vor dem Speichern zu formatieren oder vorzubereiten , damit die Daten in einem speicherfertigen Zustand sind.

Dies geschieht dank des ORDA-Ereignisses „Touched“ für Daten, und der Nutzen ist beträchtlich.

Möchten Sie mehr erfahren? Lesen Sie weiter!

HDI_ORDA_Events_touched

ORDA deckt bereits so viele Aspekte ab, wie in diesem Blogpost beschrieben. Die ORDA-Abstraktionsschicht wird leistungsfähiger als je zuvor! Sie ist nun in der Lage, auf jede Änderung der Daten im Speicher zu reagieren .

Erinnern Sie sich daran, dass Daten mit ORDA über Entitäten gehandhabt werden, die durch eine Leseaktion (z.B. eine Abfrage ) in den Speicher geladen werden.

Mit dem 4D 20 R10 wird das Konzept der Ereignisse eingeführt. Das Ereignis “ touched“ ist das erste einer Reihe von Ereignissen, und da es keine Entsprechung im klassischen 4D Code hat, lohnt es sich, es zu verwenden.

Ein Touched Event erlaubt die Implementierung eines zentralisierten Codes, um Geschäftslogik auszulösen, wenn Attributwerte in einer im Speicher geladenen Entität geändert werden.

Geschäftslogik auslösen, wenn ein Entitätsattribut geändert wird

Während einer User Journey können Sie nun auf Datenänderungen im Speicher reagieren, um eine entsprechende Geschäftslogik auszulösen und schließlich dem Endbenutzer das Ergebnis anzuzeigen.

Bei der Arbeit mit einer Entität können Sie sich auf ein bestimmtes Attribut konzentrieren und einen Code auslösen, wenn sich dessen Wert ändert.

Hier sind einige Anwendungsfälle, bei denen der Nutzen groß ist:

  • Groß- oder Kleinschreibung von Daten
  • einige Aktualisierungen auf andere Attribute im Modell übertragen

Beispiel 1

Im folgenden Beispiel wird eine Personenentität aktualisiert. title wird auf die ersten sechs Zeichen gekürzt, lastname und city werden in Großbuchstaben geschrieben.

Um einen solchen Anwendungsfall auszuführen, mussten Siefrüher Ereignisse wie „On losing focus“ für jedes Ihrer Formularobjekte behandeln und den entsprechenden Code an vielen Stellen in Ihrem Code ausführen.

Jetzt können die touched Ereignisse für einige Attribute dank der touched und event Schlüsselwörter. Der Code wird in der entsprechenden Entity-Klasse zentralisiert und ausgeführt, sobald sich ein Attributwert an einer beliebigen Stelle in Ihrer Anwendung ändert.

In diesem Beispiel wurde ein touched Ereignis für einige Attribute in der PeopleEntity-Klasse implementiert:

Class extends Entity

Function event touched title($event : Object)
	This.title:=Substring(This.title; 1; 6)
	
Function event touched lastname($event : Object)
	This.lastname:=Uppercase(This.lastname)
	
Function event touched city($event : Object)
	This.city:=Uppercase(This.city)

Beispiel #2

In diesem anderen Beispiel wird das Ereignis touched verwendet, um die Verarbeitung eines berechneten Attributs zu vermeiden, die zu einer schlechten Leistung führen könnte. In einer Autovermietungsanwendung mit der Datenklasse Booking wird ein Attribut benötigt, um festzustellen, ob das Abfahrts- und das Ankunftsdatum übereinstimmen.

Seine Implementierung sollte dies sein:

exposed function get sameDay(): Boolean
return (This.departureDate = This. arrivalDate)

Aber die Abfrage dieses Attributs kann keine Indizes verwenden und ist daher nicht sehr optimiert.

Daher kann ein sameDay -Attribut in der Datenklasse erstellt werden und ein touched -Ereignis kann wie unten für die Attribute departureDate und arrivalDate implementiert werden. Damit dieses sameDay -Attribut immer auf dem neuesten Stand ist.

Function event touched departureDate($event : Object)
	This.sameDay:=(This.departureDate=This.arrivalDate)

Function event touched arrivalDate($event : Object)
	This.sameDay:=(This.departureDate=This.arrivalDate)

Geschäftslogik auslösen, wenn ein Attribut geändert wird

Müssen Sie auf jede Datenänderung im Speicher während einer Benutzerreise reagieren? Was auch immer der Zweck ist: Debugging oder Datenaktualisierung im laufenden Betrieb, es ist jetzt möglich.

Sie können ein berührtes Ereignis auf Entitätsebene auslösen. Wenn ein Wert eines Entitätsattributs geändert wird, wird das Ereignis ausgelöst und liefert nützliche Informationen.

So wird dies implementiert

Fügen Sie in der Klasse Entity die Funktion touched Ereignisfunktion hinzu, die das Ereignis als Objektparameter empfängt.

Hier ist zum Beispiel die PeopleEntity-Klasse.

Class extends Entity

Function event touched($event : Object)

Anwendungsfall 1

In Ihrer Anwendung haben Sie festgestellt, dass eine People-Entität aktualisiert wurde, aber Sie wissen nicht, wo. Implementieren Sie das berührte Ereignis und setzen Sie einen Haltepunkt, um die Aufrufkette zu überprüfen.

Hier ist eine einfache updatePeople Projekt-Methode:

$people:=ds.People.all().first()

updateCivilInfo($people)

updateAddress($people)

Und das Debug-Fenster zeigt die Aufrufkette mit der Methode, die das Ereignis touched (updateCivilInfo) auslöst.

Beachten Sie, dass das Ereignisobjekt den Attributnamen enthält.

blank

Anwendungsfall #2

Sie können einen Attributwert in Großbuchstaben schreiben, wenn sein Typ Text ist, unabhängig vom Attribut.

Implementieren Sie dazu diesen Code:

Class extends Entity

Function event touched($event : Object)
	
	If (Value type(This[$event.attributeName])=Is text)
		This[$event.attributeName]:=Uppercase(This[$event.attributeName])
	End if

Und prüfen Sie, ob es funktioniert:

blank

Wie Sie verstehen können, wird das Ereignis touched wahrscheinlich sehr oft ausgelöst werden. Deshalb muss der implementierte Code schnell ausgeführt werden und leicht sein, um eine gute Leistung zu erhalten. Das letzte Beispiel oben ist relevant, wenn die Datenklasse nur einige wenige Attribute enthält.

Wenn Sie mehr darüber erfahren möchten, wie sich dieses Ereignis in C/S oder mit 4D Qodly pro verhält oder wenn Sie mit einem entfernten Datenspeicher arbeiten, lesen Sie diesen Blogpost.

Lesen Sie die Dokumentation und spielen Sie mit HDI, um mehr zu erfahren.

Avatar
- Product Owner - Marie-Sophie Landrieu-Yvert ist seit 2017 als Product Owner im 4D Produktteam tätig. Als Product Owner ist sie für das Schreiben der User Stories und deren Umsetzung in funktionale Spezifikationen zuständig. Ihre Aufgabe ist es auch, sicherzustellen, dass die Implementierung der Funktionen den Anforderungen des Kunden entspricht. Marie-Sophie ist Absolventin der ESIGELEC Ingenieurschule und begann ihre Karriere als Ingenieurin bei IBM im Jahr 1995. Sie nahm an verschiedenen Projekten teil (Wartungs- oder Build-Projekte) und arbeitete als Cobol-Entwicklerin. Dann arbeitete sie als UML-Designerin und Java-Entwicklerin. In letzter Zeit bestand ihre Hauptaufgabe darin, funktionale Anforderungen zu analysieren und zu schreiben sowie Geschäfts- und Entwicklungsteams zu koordinieren.