gelöst Multiton oder Flyweight Pattern


Getting started ... Alles für einen gelungenen Start.

Moderatoren: Jan, Steff

gelöst Multiton oder Flyweight Pattern

Beitragvon Norl » 05.10.2017, 14:52

Hallo,
dies ist mein erster Beitrag hier, daher entschuldigt bitte, sollte nicht alles so flüssig laufen.

Ich sitzte momentan an meiner Bachelorarbeit und entwickle dafür eine Art Event Sourcing Lösung in ABAP.
Da ich mit ABAP nicht besonders vertraut bin, fällt mir vieles noch etwas schwer und habe momentan folgendes Problem:

Ich vergleiche den alten und neuen Stand eines Objektes (beispielsweise eines Vertrags) und prüfe, ob es eine Änderung gegeben hat.
Diese Änderung soll, je nach Datentyp, in einer eigenen Tabelle(nennen wir sie DataStore) gespeichert werden(nur der aktuelle/neue Wert). Um im Nachhinein bestimmen zu können, aus welcher Tabelle und welchem Datenfeld dieser Wert kommt, habe ich eine weitere Tabelle erzeugt, in der jeder Kombination von Tabelle+Feldname eine Zahl zugewiesen ist. Diese Zahl ist teil des Schlüssels der "DataStore" Tabellen.
Nun habe ich eine Klasse erstellt, um diesen Schlüssel zu erzeugen bzw. abzuspeichern und komme hier nicht weiter.
Feldname und Tabellenname des betreffenden Wertes bekommt die Klasse übergeben, wie kann ich daraus nun einen zusammenhängenden Datensatz, sprich: Tabelle A + Feldname B = Key 1,Tabelle A + Feldname C = Key 2 usw., bilden?
Als Tipp wurde mir das Multiton oder Flyweight Pattern nahegelegt, komme aber so auf keine wirkliche Lösung.

Freundliche Grüße
Norl
ForumUser
 
Beiträge: 2
Registriert: 05.10.2017, 14:09
Dank erhalten: 0 mal
Ich bin: Student/in

Sponsor

Alte ABAP-Entwicklerweisheit: Weißt du weder aus noch ein, baust du einen BADI ein

Re: Multiton oder Flyweight Pattern

Beitragvon ewx » 05.10.2017, 16:34

In SAP gibt es Änderungsbelege. Hier wird genau beschrieben welches Feld wie (alter Wert/ neuer Wert) wann von wem geändert wurde.
Hierfür generiert man für die zu überwachenden Strukturen und Tabellen einen Funktionsbaustein, der am Ende der Transaktion/ Verarbeitung aufgerufen wird.

Wenn du prüfen möchtest, ob überhaupt eine Änderung vorgenommen wurde, kannst du entweder alle verwendeten Felder in einem komplexen Datenobjekt definieren und fragst ab "IF alt <> neu."
Oder das Objekt protokolliert selber, ob eine Änderung stattgefunden hat.

Das Verfahren mit deinem DataStore kenne ich nicht und ich halte das auch für sehr aufwändig und schwerfällig. Wie prüfst du denn z.B. Änderungen in einer Tabelle, z.B. Vertragspositionen? Dann müsstest du zu deiner DataStore-Zahl auch noch einen Index verwalten.
Warum verwendest du überhaupt eine "Zahl" und nimmst nicht gleich die Kombination aus Tabelle + Feldname?
ewx
Top Expert
 
Beiträge: 3391
Registriert: 04.08.2003, 19:55
Wohnort: Schleswig-Holstein
Dank erhalten: 205 mal

Re: Multiton oder Flyweight Pattern

Beitragvon Thomas R. » 06.10.2017, 05:47

Hallo Norl,
die Sinnhaftigkeit Deiner Thematik hat Enno ja schon zur Diskussion gebracht. Darüber solltest Du nochmals nachdenken!


Zu Deinem konkreten Problem (wenn es unbedingt ein numerischer Schlüssel im "Datastore" sein muss):
Du könntest doch einfach die Anzahl der Datensätze in der "weiteren Tabelle" als Schlüssel verwenden.
Das Vorgehen in Deiner Klassenmethode wäre:
1. Lesen der "weiteren Tabelle" mit dem Schlüssel "Tabelle" "Feldname".
2. Bei einem Treffer den numerischen Schlüsselwert zurück liefern.
3. Ansonsten die Anzahl der Einträge in der Tabelle feststellen und einen neuen Datensatz mit "Tabelle" "Feldname" "Anzahl" in die "weitere Tabelle" einfügen und die "Anzahl" zurückliefern. Wenn man es richtig machen will muss man vor dem "Zählen" die Tabelle komplett gegen Schreiben sperren und diese Sperre nach dem Einfügen wieder aufheben.
4. Es darf keinerlei Löschfunktion von Datensätzen in der "weiteren Tabelle" geben!

MfG
Thomas R.
Thomas R.
Expert
 
Beiträge: 644
Registriert: 11.12.2002, 08:04
Dank erhalten: 21 mal

Re: Multiton oder Flyweight Pattern

Beitragvon Norl » 10.10.2017, 09:46

Hallo,
entschuldigung für de späte Rückmeldung, hatte extreme Probleme mit meinem Internet.
Attribute für alt bzw. neu gibt es bereits, daher frage ich einfach if alt NE neu wie ewx vorgeschlagen hat.

Warum ich einen numerischen Schlüssel gewählt habe weiß ich selbst nicht, hat vielleicht damit zu tun, wie ich sowas in der Uni gelernt habe(sehr theoretisch und nach Lehrbuch).
Habe das aber jetzt so ähnlich gelöst wie in dem Beispiel von Thomas R.

Nun habe ich aber das Problem, wie bekomme ich den Tabellen- und Feldnamen der Änderung raus? Ich habe in der SAP Tabelle DD03L die Felder "Tabname" und "Fieldname" gefunden, können die mir da helfen?


Das ganze Projekt ist nicht unbedingt sauber oder effizient aufgebaut, da es ,aufgrund des sehr begrenzten Zeitrahmens für die Thesis, mir hauptsächlich um das Konzept geht, der Code soll nur als Prototyp zum groben Testen des Konzeptes dienen.

Vielen Dank für die Hilfe

Grüße
Norl
ForumUser
 
Beiträge: 2
Registriert: 05.10.2017, 14:09
Dank erhalten: 0 mal
Ich bin: Student/in


Zurück zu ABAP® für Anfänger

  Aktuelle Beiträge   
gelöst Formatschlüssel Sapscript
vor 8 Stunden von dkast 2 Antw.
Merkmalwert in einer Verkaufsbeleg auslesen
vor einer Stunde von cuncon 4 Antw.
Konfig. Position im SD Beleg Sperren
vor 11 Stunden von carlie 0 Antw.
Mussfelder bei VF01
vor 12 Stunden von Gottschall 0 Antw.
Mini-SAP Insatllation
Gestern von SaskuAc 0 Antw.

  Ähnliche Beiträge beta
Problem bei Select Abfrage mit Contains Pattern (CP)
06.03.2008, 12:50 von edwin 3 Antw.
Funktionsbaustein oder so
30.03.2004, 15:10 von uwe 5 Antw.
Entweder / oder
09.05.2006, 15:49 von donny 8 Antw.
Type oder Like
18.07.2007, 10:44 von black_adept 4 Antw.
SELECT oder WHERE + CONCAT
10.09.2004, 08:17 von Hermann 5 Antw.

 

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder

Feedback ...?

Was können wir verbessern? Hinterlasse deine Kontaktdaten, wenn du eine direkte Antwort möchtest.

... Absenden!