"Neue" Befehle im ABAP - wer verwendet diese

Getting started ... Alles für einen gelungenen Start.
186 Beiträge • Vorherige Seite 6 von 13 (current) Nächste
186 Beiträge Vorherige Seite 6 von 13 (current) Nächste

Re: "Neue" Befehle im ABAP - wer verwendet diese

Beitrag von black_adept (Top Expert / 4139 / 132 / 956 ) »
Zeig her
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

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


Re: "Neue" Befehle im ABAP - wer verwendet diese

Beitrag von ralf.wenzel (Top Expert / 3959 / 204 / 281 ) »
Moin,

ich sitze gerade an keinem System, darum mal aus der hohlen Hand:

Code: Alles auswählen.

" fill me->structure if empty
me->structure = switch( me->structure-charfeld 
                when space then get_structure( )
                else me->structure ).
Da man nicht auf IS INITIAL prüfen kann, muss ich ein Feld nehmen und das prüfen (irgendein Schlüsselfeld gibt es ja meistens, an dem man sehen kann, ob die Struktur gefüllt ist oder nicht). In diesem Fall ist es ein Characterfeld namens charfeld. Bei einem numerischen Feld numc sähe das dann so aus.

Code: Alles auswählen.

" fill me->structure if empty
me->structure = switch( me->structure-numcfeld 
                when 0 then get_structure( )
                else me->structure ).
Man muss sich ein bisschen dran gewöhnen, das zu lesen, aber letztlich sieht das kaum anders aus als ein CASE. An die Kommentarzeilen hab ich mich inzwischen gewöhnt. Man könnte in ELSE auch mit THROW eine Ausnahme werfen (ZCX_STRUC_FULL) oder so.

Besonders interessant ist das, wenn man eine Struktur hat, die aus Unterstrukturen besteht (das mache ich sehr oft, ich halte gern zusammengehörende Daten in einem "Datenobjekt" zusammen) und man für alle Unterstrukturen prüft.

Kleine Denksportaufgabe: Angenommen, me->structure besteht aus fünf Unterstrukturen ustruc1....5 - wie kriegt man eine Prüfung aller Unterstrukturen per FOR in eine Programmzeile? ;)

Ralf

PS: Danke für die Korrektur im nächsten Posting, Enno - ich hab es leider nicht im System nachsehen können.
Zuletzt geändert von ralf.wenzel am 11.09.2017 11:39, insgesamt 1-mal geändert.
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: "Neue" Befehle im ABAP - wer verwendet diese

Beitrag von ewx (Top Expert / 4892 / 321 / 644 ) »
Die Idee ist gut.

Code: Alles auswählen.

  "Check if structure is initial. If not: FILL IT!
  struc1 = COND #( WHEN struc1 IS INITIAL THEN o_test->get( ) ).
  "Check if instance created. If yes: get data
  struc2 = COND #( WHEN o_test IS BOUND THEN o_test->get( ) ).
Ob ich das Coding allerdings trotz Einzeiligkeit besser finde, als ein schlichtes IF xxx IS BOUND oder IS INITIAL, weiß ich noch nicht.

Re: "Neue" Befehle im ABAP - wer verwendet diese

Beitrag von ralf.wenzel (Top Expert / 3959 / 204 / 281 ) »
ewx hat geschrieben:Die Idee ist gut.

Code: Alles auswählen.

  "Check if structure is initial. If not: FILL IT!
  struc1 = COND #( WHEN struc1 IS INITIAL THEN o_test->get( ) ).
  "Check if instance created. If yes: get data
  struc2 = COND #( WHEN o_test IS BOUND THEN o_test->get( ) ).
Ob ich das Coding allerdings trotz Einzeiligkeit besser finde, als ein schlichtes IF xxx IS BOUND oder IS INITIAL, weiß ich noch nicht.
Oh, mit System hätte ich das nachgeguckt, wie ich das gemacht habe - daran, dass IS INITIAL ging, habe ich mich spontan gar nicht erinnert.

Ich denke, das ist im Wesentlichen eine Frage der Gewöhnung, wie so Vieles im Leben ;)


Ralf

PS: Wer löst das FOR-Rätsel? ;)
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: "Neue" Befehle im ABAP - wer verwendet diese

Beitrag von black_adept (Top Expert / 4139 / 132 / 956 ) »

Code: Alles auswählen.

    IF me->structure IS INITIAL. me->structure = get_structure( ). ENDIF.
    me->structure = COND #( WHEN me->structure IS INITIAL THEN get_structure( ) ).
Das ist ein tolles Beispiel was das Problem mit den neuen Befehlen angeht.
Einerseits ist die neue Syntax nicht wirklich kürzer als die alte. Ich sehe hier keinen Mehrwert, es sei denn man will partout die neue Syntax verwenden.
Andererseits ist das Ergebnis der neuen Syntax falsch auch wenn es im ersten Moment nicht danach aussieht, weil sich COND und IF eben nicht gleich verhalten. Da hier wurde kein ELSE angegeben wurde (wie in Ralfs Version ohne System) wird eine initiale Struktur zurückgeliefert wenn vorher was drin stand. Korrekt wäre also eine deutlich längere Syntax

Code: Alles auswählen.

    me->structure = COND #( WHEN me->structure IS INITIAL THEN get_structure( ) ELSE  me->structure )
welche weiterhin dazu führt, dass im ELSE-Fall eine Wertzuweisung von me->structure an sich selbst durchgeführt wird.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: "Neue" Befehle im ABAP - wer verwendet diese

Beitrag von ralf.wenzel (Top Expert / 3959 / 204 / 281 ) »
Naja, der entscheidende Vorteil ist die Einsetzbarkeit an Operandenpositionen. Ein IF kann ich nicht in einen Methodenaufruf schreiben (also nicht als Methodenparameter verwenden).


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

Re: "Neue" Befehle im ABAP - wer verwendet diese

Beitrag von ewx (Top Expert / 4892 / 321 / 644 ) »
black_adept hat geschrieben:Da hier wurde kein ELSE angegeben wurde (wie in Ralfs Version ohne System) wird eine initiale Struktur zurückgeliefert wenn vorher was drin stand.
Böse Falle...! :roll:
Danke für den Hinweis!

Re: "Neue" Befehle im ABAP - wer verwendet diese

Beitrag von black_adept (Top Expert / 4139 / 132 / 956 ) »
@Ralf: Aber deine Aussage war "Sowas kriegt man per COND/SWITCH auf eine Programmzeile minimiert. "
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: "Neue" Befehle im ABAP - wer verwendet diese

Beitrag von ralf.wenzel (Top Expert / 3959 / 204 / 281 ) »
black_adept hat geschrieben:@Ralf: Aber deine Aussage war "Sowas kriegt man per COND/SWITCH auf eine Programmzeile minimiert. "
Das ist richtig, das entspricht meiner Gewohnheit, jede Anweisung in eine neue Zeile zu schreiben. Ein IF / ENDIF würde ich nie in eine Zeile schreiben. Da war ich etwas ungenau.


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

Re: "Neue" Befehle im ABAP - wer verwendet diese

Beitrag von black_adept (Top Expert / 4139 / 132 / 956 ) »
ralf.wenzel hat geschrieben:Kleine Denksportaufgabe: Angenommen, me->structure besteht aus fünf Unterstrukturen ustruc1....5 - wie kriegt man eine Prüfung aller Unterstrukturen per FOR in eine Programmzeile? ;)
Viel zu ungenau formuliert. Wenn es um eine "is initial"-Prüfung gehen sollte wäre die Antwort: "Sinnvollerweise gar nicht", da ein "is initial" auf die Hauptstruktur alle 5 Unterstrukturen auf "is initial" prüft.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: "Neue" Befehle im ABAP - wer verwendet diese

Beitrag von ralf.wenzel (Top Expert / 3959 / 204 / 281 ) »
black_adept hat geschrieben:
ralf.wenzel hat geschrieben:Kleine Denksportaufgabe: Angenommen, me->structure besteht aus fünf Unterstrukturen ustruc1....5 - wie kriegt man eine Prüfung aller Unterstrukturen per FOR in eine Programmzeile? ;)
Viel zu ungenau formuliert. Wenn es um eine "is initial"-Prüfung gehen sollte wäre die Antwort: "Sinnvollerweise gar nicht", da ein "is initial" auf die Hauptstruktur alle 5 Unterstrukturen auf "is initial" prüft.
Richtig, ich möchte die Unterstruktur aber nur füllen, wenn sie leer ist - unabhängig davon, ob andere Unterstrukturen gefüllt sind oder nicht. Ein Prüfen der Hauptstruktur hilft also nicht.


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

Re: "Neue" Befehle im ABAP - wer verwendet diese

Beitrag von black_adept (Top Expert / 4139 / 132 / 956 ) »
Sinnvoll geht das gar nicht mit FOR.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: "Neue" Befehle im ABAP - wer verwendet diese

Beitrag von DeathAndPain (Top Expert / 1982 / 269 / 418 ) »
black_adept hat geschrieben:Korrekt wäre also eine deutlich längere Syntax

Code: Alles auswählen.

    me->structure = COND #( WHEN me->structure IS INITIAL THEN get_structure( ) ELSE  me->structure )
welche weiterhin dazu führt, dass im ELSE-Fall eine Wertzuweisung von me->structure an sich selbst durchgeführt wird.
Kann sich Ralf da nicht retten, indem er mit TRY arbeitet, im ELSE eine Ausnahme wirft und dann den CATCH-Block leer lässt? Dann wird die Zuweisung der Variablen an sich selber vermieden. :-D

Re: "Neue" Befehle im ABAP - wer verwendet diese

Beitrag von ralf.wenzel (Top Expert / 3959 / 204 / 281 ) »
Huch - warum komme ich da nicht drauf???

Code: Alles auswählen.

me->structure = COND #( WHEN me->structure IS INITIAL THEN get_structure( ) ELSE  THROW zcx...- )
Ohne TRY/ENDTRY.... Bricht aber auch die Methode ab.

Ralf *interessanter Ansatz - wenn auch nur aus akademischen Erwägungen
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: "Neue" Befehle im ABAP - wer verwendet diese

Beitrag von black_adept (Top Expert / 4139 / 132 / 956 ) »
DeathAndPain hat geschrieben:
black_adept hat geschrieben:Korrekt wäre also eine deutlich längere Syntax

Code: Alles auswählen.

    me->structure = COND #( WHEN me->structure IS INITIAL THEN get_structure( ) ELSE  me->structure )
welche weiterhin dazu führt, dass im ELSE-Fall eine Wertzuweisung von me->structure an sich selbst durchgeführt wird.
Kann sich Ralf da nicht retten, indem er mit TRY arbeitet, im ELSE eine Ausnahme wirft und dann den CATCH-Block leer lässt? Dann wird die Zuweisung der Variablen an sich selber vermieden. :-D
Klar geht das. Aber der Ausgangspunkt war, dass Ralf zu einem einfachen "IF... ENDIF" sagte: "Das kriege ich auch in eine Zeile" - und das hörte sich so an, als ob es danach übersichtlicher/kürzer/eleganter oder sonst wie wäre. Aber ehrlich gesagt sind alle bisher aufgetauchten Varianten eben das nicht.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Vergleichbare Themen

2
Antw.
1658
Views
ABAP Tabellen in SQL-Befehle exportieren
von cmalthaner » 15.08.2014 22:16 • Verfasst in ABAP® für Anfänger
2
Antw.
6557
Views
Alle ABAP Befehle online?
von MarkusW » 05.04.2007 08:22 • Verfasst in ABAP® für Anfänger
3
Antw.
2182
Views
screen befehle in der Ablauflogik
von JohnLocklay » 22.11.2016 10:21 • Verfasst in ABAP® für Anfänger
4
Antw.
6066
Views
SQL Befehle direkt absetzen
von Nautilus » 21.03.2006 15:53 • Verfasst in Basis
5
Antw.
4109
Views
Wie kann ich in SAPSCRIPT HTML Befehle eingeben.?
von SAPDIDI2 » 18.07.2007 16:11 • Verfasst in ABAP® Core

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.

Unbeantwortete Forenbeiträge

Username als Variable in xdc-Datei?
vor einer Woche von uli3480 1 / 1000
Substitution zum Zeitpunkt 60
vor 3 Wochen von irene 1 / 3325
CDS View Erweitern mit Hierarchie
vor 3 Wochen von Interger 1 / 5916
Intervall mit Beziehungswissen füllen
vor 5 Wochen von wolli 1 / 38919