ABAP Clean Code

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
68 Beiträge • Vorherige Seite 4 von 5 (current) Nächste
68 Beiträge Vorherige Seite 4 von 5 (current) Nächste

Re: ABAP Clean Code

Beitrag von ralf.wenzel (Top Expert / 3935 / 200 / 281 ) »
Er wollte mal Persistenzschicht üben. Die MARA hab ich als Beispiel genommen, weil es die überall gibt.

Übungsbeispiele müssen nicht sinnvoll sein. Ich habe die halbe Lehrzeit damit zugebracht, Zeugs zu feilen, das man nach der Benotung wegwirft.


Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: ABAP Clean Code

Beitrag von GastX (Specialist / 277 / 4 / 18 ) »
@Ralf: ich fand das Beispiel gut.
Bei Sortierungen u.ä. sehe ich die Anwendung auch sofort (und den Sinn, es nicht auf den Datenbankserver machen zu lassen).

Schwerer vorstellbar wird es für mich, wenn es um Auswertungen geht: da habe ich ggfs. mehrere Tabellen, die nicht zu einem Objekt gehören aber in Beziehung zu einander stehen. Und dort wären speziell gebaute Joins, die gleich die Menge der Daten radikal einschränken, hilfreich. Passt für mich aber nicht so zu "Persistenzklasse für einzelne Tabelle" oder "Persistenzklasse für ein Geschäftsobjekt".

Wie würdest Du das angehen?

Re: ABAP Clean Code

Beitrag von ralf.wenzel (Top Expert / 3935 / 200 / 281 ) »
Redefinition der SELECT-Methode.


Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: ABAP Clean Code

Beitrag von GastX (Specialist / 277 / 4 / 18 ) »
Redefinition der SELECT-Methode
Eine etwas generische Antwort... :-)

Was ich meinte: wenn man anfängt und für seine Geschäftsobjekte, oder für einzelne Tabellen, jeweils eine Persistenzklasse zu stricken, die gerne viel Komplexität abfackeln und vor dem Aufrufer verbergen darf (wäre ja einer der Vorteile) und nun die Anforderung hat, eine Auswertung zu bauen, die sich
a) die Daten aus mehreren Quellen (Persistenzklassen, bzw. am Ende Tabellen) beschaffen muss und
b) sich Joins geradezu anbieten, um Treffermenge und Datenmenge einzuschränken
Also Tabelle A und B und ihre Persistenzklassen CLA und CLB.
Dann finde ich es "unschön", einen Join der A und B betrifft in CLA oder CLB unterzubringen. Die Daten erst über CLA und CLB zusammenzulesen und dann erst einzudampfen, dürfte auch ungeschickt sein.
Bleibt, hierfür eine spezialisierte Persistenzklasse CLAB zu bauen. Oder?

Re: ABAP Clean Code

Beitrag von ralf.wenzel (Top Expert / 3935 / 200 / 281 ) »
Genau das meinte ich. Und weil

* ein JOIN eine etwas andere Schreibweise hat
* aus mehreren Tabellen bestehen
* und weiteren Gründen

musst du die SELECT-Methode redefinieren.


Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: ABAP Clean Code

Beitrag von DeathAndPain (Top Expert / 1952 / 259 / 413 ) »
Darum geht es ja gar nicht, es geht darum, dass viele mit Cluster-Tabellen gar nicht umgehen können
Zum Glück ist das auch nicht mehr wirklich notwendig, da die SAP Clustertabellen schon vor geraumer Zeit für deprecated erklärt hat und eine nach der anderen in transparente Tabellen umwandelt.

Re: ABAP Clean Code

Beitrag von ralf.wenzel (Top Expert / 3935 / 200 / 281 ) »
Trotzdem kann man sie gut gebrauchen, um beliebig (!) strukturierte Daten abzulegen.

Außerdem arbeitet das SBAL auch heute noch mit Clustertabellen, um z. B. Daten zur Meldung zu speichern (den betreffenden Beleg, den Dateiauszug, etc.), deren Struktur man zwangsläufig nicht allgemein festlegen kann.

Zumal es ja noch den Fall gibt „die Daten liegen nicht im SAP, die holt er sich aus einer anderen DB“. Und das, ohne dass den Entwickler interessieren muss. Der sagt nur, was er hat und was er braucht.

Aber auch wenn es nur eine theoretische Möglichkeit zu sein scheint (wer weiß, was morgen ist) kann man die ganze Datenablage nicht nur vereinheitlichen, sondern eben auch zentral umstellen.


Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: ABAP Clean Code

Beitrag von black_adept (Top Expert / 4098 / 128 / 941 ) »
ralf.wenzel hat geschrieben:
24.05.2019 18:46
Trotzdem kann man sie gut gebrauchen, um beliebig (!) strukturierte Daten abzulegen.
Ralf
Kann ich nur bestätigen. Persönlich bevorzuge ich inzwischen stattdessen Tabellen mit einem Stringfeld als zentrale Datenablage, da man eigentlich all das was man in ein Cluster schreiben kann via ID-Transformation in einen String oder zurück umwandeln kann
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: ABAP Clean Code

Beitrag von deejey (Specialist / 422 / 129 / 45 ) »
Ist das euer Ernst? Wie wertet ihr das aus?

Re: ABAP Clean Code

Beitrag von ralf.wenzel (Top Expert / 3935 / 200 / 281 ) »
black_adept hat geschrieben:
25.05.2019 22:08
Kann ich nur bestätigen. Persönlich bevorzuge ich inzwischen stattdessen Tabellen mit einem Stringfeld als zentrale Datenablage, da man eigentlich all das was man in ein Cluster schreiben kann via ID-Transformation in einen String oder zurück umwandeln kann
Richtig, habe ich auch schon gemacht. XML in Stringtab. Ich überlege derzeit, was besser ist.
deejey hat geschrieben:
26.05.2019 01:05
Ist das euer Ernst? Wie wertet ihr das aus?
Ich verstehe die Frage nicht. Satz einlesen, XML zurück transformieren und mit dem so erhaltenen Datenobjekt arbeiten.



Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: ABAP Clean Code

Beitrag von ewx (Top Expert / 4849 / 313 / 642 ) »
ralf.wenzel hat geschrieben:
26.05.2019 07:53
black_adept hat geschrieben:
25.05.2019 22:08
Kann ich nur bestätigen. Persönlich bevorzuge ich inzwischen stattdessen Tabellen mit einem Stringfeld als zentrale Datenablage, da man eigentlich all das was man in ein Cluster schreiben kann via ID-Transformation in einen String oder zurück umwandeln kann
Richtig, habe ich auch schon gemacht. XML in Stringtab. Ich überlege derzeit, was besser ist.
XML-Transformation IMHO. weil deutlich robuster gegen Strukturänderungen.

Re: ABAP Clean Code

Beitrag von IHe (Specialist / 150 / 36 / 49 ) »
ralf.wenzel hat geschrieben:
26.05.2019 07:53
black_adept hat geschrieben:
25.05.2019 22:08
Kann ich nur bestätigen. Persönlich bevorzuge ich inzwischen stattdessen Tabellen mit einem Stringfeld als zentrale Datenablage, da man eigentlich all das was man in ein Cluster schreiben kann via ID-Transformation in einen String oder zurück umwandeln kann
Richtig, habe ich auch schon gemacht. XML in Stringtab. Ich überlege derzeit, was besser ist.
deejey hat geschrieben:
26.05.2019 01:05
Ist das euer Ernst? Wie wertet ihr das aus?
Ich verstehe die Frage nicht. Satz einlesen, XML zurück transformieren und mit dem so erhaltenen Datenobjekt arbeiten.
Wie darf ich mir das vorstellen? Ich habe komplexe Datenobjekte, welche ich als XML-String mit eindeutiger ID in einer Tabelle speichere und per Transformation lesen/schreiben kann. Gehen wir als einfaches Beispiel von einem Lieferscheinobjekt aus. Wenn ich nun zu einem Lieferzeitraum die Menge von spezifischen ausgelieferten Materialien ermitteln möchte würde ich ja nicht sämtlich vorhandene Objekte transformieren und anhand Kopf- sowie Positionskriterium auswerten wollen. Werden dann auswertungsrelevante Daten zusätzlich in Tabellenfelder gespeichert? Aber das wäre ja eine gewaltige Datenredundanz.
Ingo Hoffmann

ECC|S/4HANA|BTP
dbh SAP Solutions

Re: ABAP Clean Code

Beitrag von a-dead-trousers (Top Expert / 4399 / 223 / 1182 ) »
IHe hat geschrieben:
27.05.2019 13:28
Wie darf ich mir das vorstellen? Ich habe komplexe Datenobjekte, welche ich als XML-String mit eindeutiger ID in einer Tabelle speichere und per Transformation lesen/schreiben kann. Gehen wir als einfaches Beispiel von einem Lieferscheinobjekt aus. Wenn ich nun zu einem Lieferzeitraum die Menge von spezifischen ausgelieferten Materialien ermitteln möchte würde ich ja nicht sämtlich vorhandene Objekte transformieren und anhand Kopf- sowie Positionskriterium auswerten wollen. Werden dann auswertungsrelevante Daten zusätzlich in Tabellenfelder gespeichert? Aber das wäre ja eine gewaltige Datenredundanz.
Ein Beispiel näher aus der Praxis:
Die Konfiguration eines Geschäftsfalles ist im Programmlauf als Objekt einer Klasse abgelegt. Es kommt zu einem Fehler und nun möchte man den "Kontext" unter dem dieser Fehler aufgetreten ist nachvollziehbar abgelegt haben. Dazu könnte man einerseits die Inhalte aus den einzelnen Variablen in den beteiligten Objekten zusammensuchen und in dafür vorgesehene (Protokoll-)Tabellen mit entsprechender Struktur ablegen ODER anderseits einfach die betroffenen Objekte "transformieren" (serialisieren) und als String ablegen.

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
IHe

Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: ABAP Clean Code

Beitrag von ewx (Top Expert / 4849 / 313 / 642 ) »
IHe hat geschrieben:
27.05.2019 13:28
Wie darf ich mir das vorstellen? Ich habe komplexe Datenobjekte, welche ich als XML-String mit eindeutiger ID in einer Tabelle speichere und per Transformation lesen/schreiben kann. Gehen wir als einfaches Beispiel von einem Lieferscheinobjekt aus. Wenn ich nun zu einem Lieferzeitraum die Menge von spezifischen ausgelieferten Materialien ermitteln möchte würde ich ja nicht sämtlich vorhandene Objekte transformieren und anhand Kopf- sowie Positionskriterium auswerten wollen. Werden dann auswertungsrelevante Daten zusätzlich in Tabellenfelder gespeichert? Aber das wäre ja eine gewaltige Datenredundanz.
Clustertabellen werden in der Regel als "Datengrab" verwendet und nicht als Stamm- oder Bewegungsdatenspeicher. Immer mal wieder kommt es vor, dass man einen "Programmzustand" protokollieren möchte, weil an bestimmten Stellen "irgendwas" nicht so funktioniert, wie gedacht. Dann ist es sehr einfach, alle Objekte, Strukturen und/ oder interne Tabellen zu serialisieren und unter der Objekt-ID + Timestamp + User + ApplicationServer abzuspeichern. Wenn du hier für jede intern definierte Tabelle oder Struktur eine eigene Datenbanktabelle erstellen möchtest, dann die Daten in den entsprechenden Tabellen speichern und hinterher wieder sinnvoll zusammen setzen möchtest... Dann viel Spaß... ;)

Hier ein paar Links zu der Serialisierung:
https://www.volker-wegert.de/en/content ... -idontwork
https://tricktresor.de/blog/serialize-me/
https://rvanmil.wordpress.com/2011/05/20/serialization/

Wofür man das dann letztendlich benötigt, weiß man meistens erst, wenn es soweit ist.

Die Vorteile der Serialisierung und Deserialisierung per CALL TRANSFORMATION id ggü. {EXPORT TO / IMPORT FROM} DATABASE abc(id):
* Sehr variabel/ robust. Du kannst Felder aus der Struktur entfernen oder hinzufügen und die Deserialisierung funktioniert trotzdem.
* Klartext. Zur Not, wenn doch irgendwas nicht funktionieren sollte, kannst du dir den String als Text anzeigen lassen und hast die Informationen.

Die Serialisierung ist sehr schnell. Keine Ahnung, ob sie schneller ist, als die Speicherung in einer Clustertabelle. Müsste man mal ausprobieren.

Obwohl die De-/Serialisierung von Klasseninstanzen funktioniert, klappt das leider nicht mit GUI-Controls. Das wäre sonst sehr schön, wenn man ein Control einfach unter Angabe eines neuen PARENT wieder Deserialisieren könnte... ;)

Folgende Benutzer bedankten sich beim Autor ewx für den Beitrag (Insgesamt 2):
IHeqyurryus


Re: ABAP Clean Code

Beitrag von IHe (Specialist / 150 / 36 / 49 ) »
Danke für das praktische Beispiel + Infos. Da wir häufig externe Java-Anwendungen mittels XML-Schnittstellen anbinden werden Transformationen ebenso häufig verwendet. Das Thema Serialisierung war mir grundsätzlich bekannt, aber aus dem Fokus gerückt. Ich werde dies für unsere nächste interne Entwicklerrunde aufnehmen, damit uns diese Möglichkeit bewusst ist wenn bzw. falls wir sie benötigen.
Ingo Hoffmann

ECC|S/4HANA|BTP
dbh SAP Solutions

Vergleichbare Themen

3
Antw.
2299
Views
Diskussionsthema: Clean Code
von c oco » 19.07.2017 14:19 • Verfasst in SAP - Allgemeines
4
Antw.
3358
Views
PAP aus ABAP-Code
von BesenWesen » 21.06.2006 09:49 • Verfasst in ABAP® Core
0
Antw.
1524
Views
ABAP-Code im Info-Set
von helwie » 22.09.2006 23:26 • Verfasst in ABAP® Core
0
Antw.
1695
Views
RSA-Algorithmus im ABAP-Code
von stefan76 » 05.10.2006 17:31 • Verfasst in ABAP® Core
1
Antw.
1807
Views
Testen von ABAP Code
von DavidHenn » 07.07.2011 10:27 • Verfasst in ABAP® Core

Aktuelle Forenbeiträge

Regex in where
vor 2 Stunden von edwin 1 / 41
Programm anlegen mit Vorlage
vor 6 Stunden von DeathAndPain 2 / 95
IT0024 Qualifikationen CP-ID
vor 6 Stunden von DeathAndPain 2 / 337
BUSOBJEKT zu CMIS PHIO ermitteln
vor 8 Stunden von snooga87 1 / 70

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Aktuelle Forenbeiträge

Regex in where
vor 2 Stunden von edwin 1 / 41
Programm anlegen mit Vorlage
vor 6 Stunden von DeathAndPain 2 / 95
IT0024 Qualifikationen CP-ID
vor 6 Stunden von DeathAndPain 2 / 337
BUSOBJEKT zu CMIS PHIO ermitteln
vor 8 Stunden von snooga87 1 / 70

Unbeantwortete Forenbeiträge

Regex in where
vor 2 Stunden von edwin 1 / 41
BUSOBJEKT zu CMIS PHIO ermitteln
vor 8 Stunden von snooga87 1 / 70
aRFC im OO-Kontext
vor 5 Wochen von ralf.wenzel 1 / 3249