corresponding - mapping - switch

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

corresponding - mapping - switch

Beitrag von ralf.wenzel (Top Expert / 3921 / 200 / 280 ) »
Moin,

gegeben sei folgende Anweisung:

Code: Alles auswählen.

zielstruc = CORRESPONDING #( quellstruc MAPPING field1 = switch #( quellstruc-field1
when 'B' then 'B'
else 'P' ) ).
Gemeint ist: move-corresponding von quellstruc nach zielstruc - dabei setze field1 auf 'P' wenn nicht 'B' drin steht.

Fehlermeldung: SWITCH sei kein Komponentenname. Aber ich kann funktionale Ausdrücke doch an funktionalen Operandenpositionen einsetzen.


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: corresponding - mapping - switch

Beitrag von DeathAndPain (Top Expert / 1932 / 252 / 410 ) »
MAPPING erwartet von Dir die Angabe, welcher Spalte der Quellstruktur der Spaltenwert der Zielstruktur entnommen werden soll. Du kannst dort nicht beliebige funktionale Ausdrücke angeben. Insbesondere funktioniert Deine erkennbare Intention nicht, dies variabel (abhängig vom Feldinhalt) zu gestalten. Die MAPPING-Angabe ist immer statisch und gestattet Dir lediglich, CORRESPONDING auch dann zu benutzen, wenn die Spalten in Deinen Strukturen nicht immer gleich heißen.

Wenn Du so eine Anforderung hast, wirst Du um einen LOOP nicht herumkommen, bei dem Du dann zeilenweise das Zielfeld mal von dieser und mal von jener Quellspalte entnehmen kannst.

Re: corresponding - mapping - switch

Beitrag von ralf.wenzel (Top Expert / 3921 / 200 / 280 ) »
Ein LOOP? Worüber? Ich habe zwei STRUKTUREN!

Übrigens klappt

Code: Alles auswählen.

zielstruc = corresponding #( quellstruc mapping field1 = 'X' ).
auch nicht. Das hab ich aber öfters, dass ich einen Move-Corresponding machen muss, aber EINEM der Zielfelder einen festen Wert zuweisen will.

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

Re: corresponding - mapping - switch

Beitrag von black_adept (Top Expert / 4080 / 125 / 934 ) »
Moin Ralf,

so etwa sollte das gehen.

Code: Alles auswählen.

zielstruc = VALUE #( BASE CORRESPONDING #( quellstruc ) 
                          field1 = switch #( quellstruc-field1 when 'B' then 'B' 
                                                                        else 'P' ) 
                   ).

Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
ralf.wenzel

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: corresponding - mapping - switch

Beitrag von DeathAndPain (Top Expert / 1932 / 252 / 410 ) »
Ich habe meine Zweifel, dass diese Version funktioniert, denn auch hier machst Du einen VALUE über die ganze Tabelle und willst dann ohne FOR einzelne Zeilen anders gestalten. Aber vielleicht irre ich mich, dann wäre es sicherlich eine elegante Lösung.
Ralf hat geschrieben:Ein LOOP? Worüber?
Na über die Quellstruktur! Das ist doch der klassische Weg, wenn man etwas "zu Fuß" macht, weil die Automatisierungsfunktionalitäten von ABAP nicht genug hergeben. Das sähe dann so aus:

Code: Alles auswählen.

REFRESH zielstruc.
LOOP AT quellstruc ASSIGNING FIELD-SYMBOL(<q>).
  INSERT SWITCH #( quellstruc-field1 WHEN 'B' THEN CORRESPONDING #( <q> MAPPING field1 = B )
                                              ELSE CORRESPONDING #( <q> MAPPING field1 = P ) ) INTO TABLE zielstruc.
ENDLOOP.
Setzt natürlich voraus, dass die Spalten B bzw. P in der Tabelle zielstruc existieren. Und ich könnte mir gut vorstellen, dass Du in dem Ausdruck die eine oder andere Raute durch den entsprechenden Tabellentyp ersetzen musst, weil ABAP zu dusslig ist, den Datentyp statisch herzuleiten (obgleich das durchaus möglich ist).

Re: corresponding - mapping - switch

Beitrag von DeathAndPain (Top Expert / 1932 / 252 / 410 ) »
Wenn ich so drüber nachdenke, geht meine Variante auch noch eleganter:

Code: Alles auswählen.

zielstruc = VALUE #( FOR <q> IN quellstruc ( SWITCH #( quellstruc-field1 WHEN 'B' THEN CORRESPONDING #( <q> MAPPING field1 = B )
                                                                                  ELSE CORRESPONDING #( <q> MAPPING field1 = P ) ) ) ).
Zuletzt geändert von DeathAndPain am 29.10.2024 12:46, insgesamt 1-mal geändert.

Re: corresponding - mapping - switch

Beitrag von ralf.wenzel (Top Expert / 3921 / 200 / 280 ) »
Ich kann dir gar nicht folgen. Ein VALUE über die ganze Tabelle? Es gibt keine Tabellen, es gibt zwei STRUKTUREN - und es soll auch nicht ohne FOR einzelne Zeilen gestalten, weil es nur STRUKTUREN gibt. Von einer Tabelle ist die ganze Zeit keine Rede (außer von dir).

Ein LOOP über eine STRUKTUR? Einen LOOP kann man nur über eine Tabelle machen, nicht über eine Struktur.


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

Re: corresponding - mapping - switch

Beitrag von DeathAndPain (Top Expert / 1932 / 252 / 410 ) »
Ach so. Ich dachte, Du wolltest einen CORRESPONDING # über eine ganze interne Tabelle machen und quellstruc sei eine solche. Das geht ja auch, doch ich gebe gerne zu, dass der Name "quellstruc" etwas anderes indiziert.

Na dann ist die Anforderung ja noch viel einfacher, und die Lösung sieht so aus:

Code: Alles auswählen.

zielstruc = SWITCH #( quellstruc-field1 WHEN 'B' THEN CORRESPONDING #( quellstruc MAPPING field1 = B )
                                                 ELSE CORRESPONDING #( quellstruc MAPPING field1 = P ) ).
Im Prinzip also Dein ursprünglicher Ansatz, nur muss der SWITCH außen stehen und der CORRESPONDING innen.

Re: corresponding - mapping - switch

Beitrag von ralf.wenzel (Top Expert / 3921 / 200 / 280 ) »
DeathAndPain hat geschrieben:
29.10.2024 12:49
Ich dachte
Damit fasst du das Problem in zwei Worten zusammen 😂


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

Re: corresponding - mapping - switch

Beitrag von DeathAndPain (Top Expert / 1932 / 252 / 410 ) »
Ja, mein Fehler, wie ich schon eingeräumt habe.

Aber Du bist doch derjenige, der sagt, dass er immer alles in Eclipse entwickle. Dann kannst Du ja bitte mal das hier beantworten. 😁

Re: corresponding - mapping - switch

Beitrag von ralf.wenzel (Top Expert / 3921 / 200 / 280 ) »
Hab ich gerade gemacht -- ich habe aber seit Jahren nichts mehr gemacht, was mit Eclipse nicht geht: Dynpros, Erweiterungsimplementierungen, etc.

DARUM kann ich komplett mit Eclipse arbeiten 😉


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

Re: corresponding - mapping - switch

Beitrag von black_adept (Top Expert / 4080 / 125 / 934 ) »
@Ralf: Rein aus Interesse. Du hast mit deiner Frage gezeigt, dass es selbst für langjährig ABAP Erfahrene manchmal kompliziert ist einen komplexeren Ausdruck korrekt zu implementieren. Was spricht eigentlich dagegen eines der deutlich lesbareren Konstrukte

Code: Alles auswählen.

zielstruc = CORRESPONDING #( quellstruc ).
IF zielstruc-field1 <> 'B'.
  zielstruc-field1=  'P'.
ENDIF.
oder

Code: Alles auswählen.

zielstruc = CORRESPONDING #( quellstruc ).
REPLACE REGEX '[^B]' IN zielstruc-field1 WITH 'P'.
zu verwenden. Glaubst du, dass der Entwickler, der den Code dann sieht, sich denkt "Der Wenzel ist zu doof das mit einem einzigen Ausdruck zu schreiben - was für ein Noob"?

Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
tar

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: corresponding - mapping - switch

Beitrag von ralf.wenzel (Top Expert / 3921 / 200 / 280 ) »
black_adept hat geschrieben:
30.10.2024 00:47
@Ralf: Rein aus Interesse. Du hast mit deiner Frage gezeigt, dass es selbst für langjährig ABAP Erfahrene manchmal kompliziert ist einen komplexeren Ausdruck korrekt zu implementieren.
Nein, ich habe gezeigt, dass ich mit corresponding Probleme habe. 😉 Das ist nicht das erste Mal, aber hoffentlich das letzte Mal.


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

Re: corresponding - mapping - switch

Beitrag von black_adept (Top Expert / 4080 / 125 / 934 ) »
Das beantwortet aber nicht meiner Frage, warum du einen deutlich komplexeren Ausdruck mehreren einfacheren vorziehst.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: corresponding - mapping - switch

Beitrag von ralf.wenzel (Top Expert / 3921 / 200 / 280 ) »
Weil ich ein Freund der Kürze bin. Und der ist ja gut zu lesen wenn man den anständig formatiert. Er ist aber schwerer zu konstruieren als zu lesen wenn man mit corresponding Probleme hat. So wie es deutlich leichter ist, auf Englisch etwas zu lesen als es zu schreiben. Zum Lesen muss ich grammatikalische Regeln nicht kennen.

Unlesbares schreibe ich nicht.

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

Vergleichbare Themen

3
Antw.
9472
Views
Switch Case
von Spookykid » 07.04.2011 17:07 • Verfasst in ABAP® für Anfänger
7
Antw.
676
Views
Line_exists in Switch / for Schleife
von RaCDigger » 22.07.2022 10:19 • Verfasst in ABAP® Core
0
Antw.
1430
Views
OR Mapping
von yuro » 27.01.2015 00:11 • Verfasst in ABAP Objects®
6
Antw.
2904
Views
ABAP-Mapping
von Sniper_61 » 20.11.2008 22:40 • Verfasst in ABAP® für Anfänger
3
Antw.
2224
Views
Hilfe bei Mapping
von ABAP_User » 10.05.2011 17:49 • Verfasst in ABAP® für Anfänger

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.