Mit unserem minimalistischen Konzept zu "Business Entities"
sind Datensätze gemeint, die einem bestimmten
Datentyp (z.B. "kunde") entsprechen und über einen eindeutigen Schlüssel (key)
verfügen; mit anderen Worten: Business Entities geben den Daten ausreichend Semantik,
um zumindest bei einfachen Operationen wie dem Löschen oder dem Aktualisieren eines
Datensatzes Teile des Codes generisch/abstrakt zu halten.
Sinnvoll sind Business Entities insbesondere bei AJAX-getriebenen single-page-web-apps.
Derselbe Datensatz (oder Teile davon) kann hier in mehreren Panels gleichzeitig
zu sehen sein. Wird dieser in einem Panel geändert oder gelöscht, wird per AJAX-Aufruf
i.d.R. eine Änderung in der Serverdatenbank angestoßen. Die meist asynchron eintreffende
Antwort des Servers kann im success-handler der AJAX-Operation ausgewertet werden.
Enthält die Antwort ein oder mehrere "Entity-Event(s)" mit dem Datentyp
und den eindeutigen Schlüsseln betroffener Entities, können hier Javascript-Event(s)
getriggert werden, die von betroffenen Panel- oder Control-Instanzen
(die mit diesem Datentyp "markiert" sind) ausgewertet werden.
Business Entities werden von unserem Control xw-browse unterstützt, wenn bei der Initialisierung der Name des Datentyps im Property "datatype"
übergeben wird und im Property "meta" die eindeutigen keys definiert werden.
Der Name des Datentyps wird dem Control dann automatisch als
CSS-class mit dem Präfix "xw-datatype-" hinzugefügt (z.B. bei Datentyp
"kunde" also die Klasse "xw-datatype-kunde"). Somit können z.B.
die dem Datentyp "kunde" entsprechenden Controls über
$(".xw-datatype-kunde").trigger(...);
gezielt benachrichtigt werden.
XML-Events
Da unsere Web-Apps über XML-Nachrichten zwischen Client (Browser) und Server kommunizieren,
haben wir für die beiden wichtigen Events "entities-deleted" und "entity-updated"
spezielle XML-Konstrukte definiert, die nach der jeweils erfolgreichen Transaktion am Server
dem Client in der Serverantwort mitgeteilt werden.
<!--Server informiert Client, dass die zwei Kunden mit den
primary keys "180" und "582" erfolgreich gelöscht wurden-->
<response>
<event datatype="kunde" type="entities-deleted">
<key>
<pk>180</pk>
</key>
<key>
<pk>582</pk>
</key>
</event>
</response>
<!--Server informiert Client, dass der Kunde mit
primary key "582" in einigen Feldern verändert wurde-->
<response>
<event datatype="kunde" type="entity-updated">
<key>
<pk>582</pk>
</key>
<values>
<name>Mustermann</name>
<plz>91320</plz>
<ort>Ebermannstadt</ort>
<notiz>
<line>Der Kunde wünscht</line>
<line>keine Werbung per E-Mail.</line>
</notiz>
<titel is-null="true"/>
</values>
</event>
</response>
Triggern der Events im AJAX-success-handler:
Bei mehrsegmentigen Schlüsseln enthalten die key-Elemente mehrere Unterelemente.
Eine Serverantwort darf beliebig viele event-Elemente enthalten.
Javascript Event-Handler
Eigene Panels oder Controls können am Entity-Event-Konzept teilnehmen, indem sie
die Datentyp-Klasse zugeordnet bekommen und die Events verarbeiten, z.B.: