ABAP Clean Code

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

Re: ABAP Clean Code

Beitrag von deejey (Specialist / 200 / 48 / 17 ) » 28. Mai 2019 19:05

ralf.wenzel hat geschrieben:
26. Mai 2019 07:53
Ich verstehe die Frage nicht. Satz einlesen, XML zurück transformieren und mit dem so erhaltenen Datenobjekt arbeiten.
Es war gemeint wie wertest du das z.B. mit SQL/Query aus? Und wieso erinnert mich das an Satzarten vor 30 Jahren?


Re: ABAP Clean Code

Beitrag von ralf.wenzel (Top Expert / 3418 / 150 / 220 ) » 28. Mai 2019 19:18

Das werte ich gar nicht mit SQL/Query aus. Ich hab doch gesagt, was für Daten da drinstehen.

Sieh einen solchen Satz als Container für beliebige Datenobjekte.


Ralf

Re: ABAP Clean Code

Beitrag von ewx (Top Expert / 3982 / 164 / 372 ) » 5. Jun 2019 08:36

black_adept hat geschrieben:
22. Mai 2019 09:50
Wann hat denn SAP irgendwann mal so etwas gemacht, dass ich auf die MARA ( oder irgend eine andere Standardtabelle ) nicht mehr lesend so zugreifen kann wie bisher.
[...]
Die Wahrscheinlichkeit, dass SAP die MARA so ändert, dass ich jemals meine Selects anpassen müsste halte ich für mehr als unwahrscheinlich.
Das passiert gerade mit S4/HANA...
Du darfst z.B. nicht mehr direkt auf die Preisfindungstabellen zugreifen, sondern musst eine API benutzen. Das sieht dann z.B. so aus:

Code: Alles auswählen.

TRY.
 cl_prc_result_factory=>get_instance( )->get_prc_result( )-
 >get_price_element_db_by_key(
 EXPORTING
 iv_knumv = komk-knumv
 IMPORTING
 et_prc_element_classic_format = hkomv ).
 CATCH cx_prc_result ##NO_HANDLER. "implement suitable error handling
ENDTRY.
In der Cloud (SAP Cloud Platform ABAP Environment) kannst du so gut wie gar nicht mehr auf irgendwelche SAP Tabellen zugreifen (Released Objects).

Folgende Benutzer bedankten sich beim Autor ewx für den Beitrag (Insgesamt 4):
ralf.wenzel (5. Jun 2019 08:53) • IHe (5. Jun 2019 10:26) • Icke0801 (6. Jun 2019 15:40) • moo_jo (18. Jun 2019 10:46)


Re: ABAP Clean Code

Beitrag von ralf.wenzel (Top Expert / 3418 / 150 / 220 ) » 5. Jun 2019 08:54

Damit passiert endlich mal, was mich schon lange stört: Dass jeder Hinz und Kunz mit wirklich schlechten DB-Zugriffen überall drauf zugreifen darf. Diese API verbirgt übrigens nichts anderes als eine *tadaaaaa* generische Persistenzschicht ;)


Ralf

Re: ABAP Clean Code

Beitrag von erp-bt (Specialist / 158 / 4 / 20 ) » 6. Jun 2019 07:36

ewx hat geschrieben:
5. Jun 2019 08:36
Das passiert gerade mit S4/HANA...
Du darfst z.B. nicht mehr direkt auf die Preisfindungstabellen zugreifen, sondern musst eine

In der Cloud (SAP Cloud Platform ABAP Environment) kannst du so gut wie gar nicht mehr auf irgendwelche SAP Tabellen zugreifen (Released Objects).
Bei S4 Cloud weiss ich es nicht, aber bei S4 On Premise kannst Du Dir ja in der ABAP Cloud Platform relativ einfach Deine eigene API bauen, in der Du dann natürlich Deine eigenen Selects basteln kannst.

https://blogs.sap.com/2019/03/01/how-to ... n-modules/

Viele Grüße, Tapio
...entwickelnder Berater...beratender Entwickler

Re: ABAP Clean Code

Beitrag von ralf.wenzel (Top Expert / 3418 / 150 / 220 ) » 6. Jun 2019 07:39

Naja, das ist nichts anderes als ein Persistenzlayer.....


Ralf

Re: ABAP Clean Code

Beitrag von Icke0801 (ForumUser / 95 / 53 / 5 ) » 17. Jun 2019 10:51

Hallo Ralf,

vielen Dank für diese ausführliche Erklärung. Generell ja ein sehr spannendes und wichtiges Thema:

ralf.wenzel hat geschrieben:
20. Mai 2019 18:32
Sowas wie die WHERE-Bedingung wird dann aus den Inhalten von selkrit generiert.

Mich würde ja mal interessieren, wie selkrit deklariert ist, insbesondere um FOR ALL ENTRIES mitzugeben. Da hänge ich irgendwie.

Vielen Dank im voraus
--
Grüße aus der Endlosschleife
-= Icke0801 =-

Re: ABAP Clean Code

Beitrag von ralf.wenzel (Top Expert / 3418 / 150 / 220 ) » 17. Jun 2019 19:00

FOR ALL ENTRIES bedarf einiger Kniffe, weil wir auf die Notwendigkeit erst später kamen.

Lösen kann man das z. B. durch einen optionalen Parameter, der die Tabelle enthält oder eine zweite Methode read4all( ) die beide Parameter in der Schnittstelle hat, die Tabelle in einem Attribut speichert und dann die übliche read( ) aufruft.

selkrit ist vom Typ any. Dann muss man in der read-Methode erstmal folgende Schritte durchführen:

Ist es eine Struktur oder eine Tabelle? Wenn Tabelle: Von welcher Struktur?

Egal ob man eine oder mehrere Zeilen hat, muss man sodann für jedes Feld der Zeilenstruktur ermitteln, ob es ein Feld ist oder eine SelOpt-Struktur oder eine Selopt-Tabelle.

Je nachdem, was dabei rauskommt, ermittelt man die WHERE-Clause bzw. füllt die WHERE-Tabelle.

Da man das ja vererbt, kann man das hochgenerisch machen, dann schreibt man das Coding nur einmal für alle Tabellen.

Will man etwas anderes (weil man leere Selektionen zulassen will oder eine Clustertsbelle hat oder eine Stringtabelle mit GUID und XML, oder....), kann man redefinieren.


Ralf

Folgende Benutzer bedankten sich beim Autor ralf.wenzel für den Beitrag:
Icke0801 (17. Jun 2019 19:53)


Vorherige Seite 5 von 5 (current)

Aktuelle Forenbeiträge

Spaltennummer-Umwandlung Excel.
vor 7 Stunden von black_adept 5 / 59
Dynamische SELECT-Anweisung gelöst
vor 9 Stunden von mareikemei92 3 / 25
Transaktion VL06 Verteilung ausgehender Lieferungen
vor 13 Stunden von SAP_ENTWICKLER 1 / 22
In welcher Tabelle ist die Bezeichnung einer Kostenstelle? gelöst
vor 13 Stunden von wreichelt 2 / 29
Eigener Knopf im Ausgabefenster
vor 13 Stunden von LostDarkness 4 / 190

Unbeantwortete Forenbeiträge

Transaktion VL06 Verteilung ausgehender Lieferungen
vor 13 Stunden von SAP_ENTWICKLER 1 / 22
FuBa EXIT_SAPLVEDC_003 S/4 1809
vor 2 Tagen von SAP_ENTWICKLER 1 / 70
CDS VIEW mit BOPF Framework update
vor 5 Tagen von Abapanfänger 1 / 67
SAP Document Builder: Dokumenterzeugung
vor 6 Tagen von robin.heidrich 1 / 170
Lohnsteuerbescheinigung
vor 6 Tagen von kaim77 1 / 104