a-dead-trousers hat geschrieben: ↑31.07.2024 07:25
Ein SAP-System kann man mit einem Webserver vergleichen:
Es werden immer ganze Seiten ausgeliefert auf denen der Benutzer etwas eingeben/ansehen und mit einem Funktionscode (Tastendruck, Mausklick, etc.) bestätigen kann. Danach werden die Daten wieder an den Server zurückgeschickt, der dann die entsprechende Verarbeitung auslöst und wieder eine (neue) Seite ausliefert.
Ein gemeinsames "Observerobjekt" kann man hiermit schon per Definition nicht einsetzen, weil die Benutzersessions unabhängig voneinander ablaufen. Streng genommen wäre "die Datenbank" oder "eine Datei am Applikationsserver" eine solche gemeinsame "Ressource". Wie rob_abc schon angemerkt hat, hat die SAP hier mehrere Ansätze (versucht) um dieses Dilemma etwas abzufedern:
ABAP Channels - Wobei ich hier nicht sicher bin, dass die über mehrere Benutzersessions funktionieren.
Shared Memory - Guter Ansatz um Daten am Server vorzuhalten und nicht jedes Mal die Datenbank zu "belasten". Besonders für Customzing, das sich nicht oft ändert geeignet. Für Bewegungsdaten eher schlecht geeignet. Hat sich aber meines Erachtens mit HANA erledigt.
Allen Ansätzen gemeinsam ist aber nachwievor das Ur-Patttern: Formular ausliefern > Eingabe von Daten > Formular abschicken > rinse and repeat
Einen "Observer" wird man damit nicht hinbekommen. Was aber ganz gut funktioniert ist ein automatisches "Polling". Sprich die laufende Applikation holt sich in bestimmten Intervallen die aktuellsten Infos von der Datenbank und bringt sie zur Anzeige.
Unter SAPgui (Dynpros) gibt es hierfür die Klasse CL_GUI_TIMER die dafür sorgt, dass der PAI/PBO Lauf kontinuierlich ausgelöst wird.
Unter "WebGUI" (BSP, Webdynpro, UI5, Fiori, etc) kann man das mittels JavaScript erreichen (teilweise out-of-the-box mit SAP Mitteln) um die ganze Seite (Refresh) oder nur einzelene Bereiche ("AJAX") zu aktualisieren
Das muss man dann aber auch so umsetzen, dass Benutzer nicht gleichtzeitig an einem Datensatz (Locking) oder mit veralteten Daten (Refresh vor der Bearbeitung) arbeiten.
P.S.: Ob man das in OO umsetzt oder in einer prozeduralen Anwendung ist Geschmacksache.