Bei Meshes handelt es sich um eine etwas undurchsichtige Technik, die allerdings schon mit ABAP 7.40 SP05 eingeführt wurde. Wirklich sinnvoll verwendet habe ich diese bis jetzt allerdings nie was allerdings auch an mangelnden Anwendungsfällen liegen kann. Sicherlich ist auch ein Grund dafür, dass Meshes und Mesh-Typen nicht unbedingt immer einfach zu verstehen bzw. einfach in sinnvollem Kontext anzuwenden sind. Grundsätzlich ermöglicht es diese Technik interne Tabellen über unterschiedliche Kriterien gegeneinander aufzulösen. Damit das funktioniert müssen die Mesh-Typen entsprechend definiert werden und darin enthaltene interne Tabellen verknüpft werden. Hier kommen die bekannten Assoziationen ins Spiel.
Am einfachsten lassen sich Meshes vielleicht als Art Inner-Joins für interne Tabellen verstehen.
Dazu folgend der Quellcode mit entsprechenden Erklärungen. Die Knackpunkte sind sicherlich die Mesh-Pfade, welche in der SAP Help im Detail erklärt sind. Diese habe ich auch in der Demo versucht einfach einzubinden. Die Beispiele habe ich mir aus Demoprogrammen und der SAP-Help „zusammengeschustert“
TYPES:
t_scarr TYPE HASHED TABLE OF scarr
WITH UNIQUE KEY carrid,
t_spfli TYPE HASHED TABLE OF spfli
WITH UNIQUE KEY carrid connid ,
t_sflight TYPE HASHED TABLE OF sflight
WITH UNIQUE KEY carrid connid fldate,
t_sairport TYPE HASHED TABLE OF sairport
WITH UNIQUE KEY id,
BEGIN OF MESH t_flights,
scarr TYPE t_scarr
ASSOCIATION _spfli TO spfli
ON carrid = carrid,
spfli TYPE t_spfli
ASSOCIATION _sflight TO sflight
ON carrid = carrid AND
connid = connid
ASSOCIATION _sairport TO sairport
ON id = airpfrom,
sflight TYPE t_sflight,
sairport TYPE t_sairport,
END OF MESH t_flights.
DATA:
flights TYPE t_flights,
name TYPE scarr-carrname VALUE 'Lufthansa',
id TYPE spfli-carrid VALUE 'LH',
connection TYPE spfli-connid VALUE '0400',
date TYPE sflight-fldate.
SELECT *
FROM scarr
INTO TABLE @flights-scarr.
SELECT *
FROM spfli
INTO TABLE @flights-spfli.
SELECT *
FROM sflight
INTO TABLE @flights-sflight.
SELECT *
FROM sairport
INTO TABLE @flights-sairport.
date = flights-sflight[ carrid = id
connid = connection ]-fldate.
BREAK-POINT.
"Inner Join von scarr und spfli mit den entsprechenden Bedingungen im Tabellenausdruck
"scarr und spfli sind über eine Assoziation miteinander verbunden
DATA(spfli_wa) =
flights-scarr\_spfli[ flights-scarr[ carrname = name ]
connid = connection ].
"Die Assoziation wird jetzt quasi rückwärts gegangen, da scarr auf spfli zeigt
DATA(scarr_wa) =
flights-spfli\^_spfli~scarr[
flights-spfli[ carrid = id connid = connection ] ].
"Erstes Beispiel + eine Verlängerung auf das Ergebnis des Tabellenausrucks mit der Assoziation sflight
DATA(sflight_wa) =
flights-scarr\_spfli[ flights-scarr[ carrname = name ]
connid = connection
]\_sflight[ fldate = date ].
"Das obige Beispiel erweitert um einen Feldzugriff aus der Workarea
DATA(price) =
flights-scarr\_spfli[ flights-scarr[ carrname = name ]
connid = connection
]\_sflight[ fldate = date ]-price.
"Feldsymbol Zuweisung
ASSIGN
flights-scarr\_spfli[ flights-scarr[ carrname = name ]
connid = connection
]\_sflight[ fldate = date ]
TO FIELD-SYMBOL(<sflight_wa>).
"Zuweisung eines Wertes über Assoziation bzw. MESH-Pfade
flights-scarr\_spfli[ flights-scarr[ carrname = name ]
connid = connection
]\_sflight[ fldate = date
]-price = price - 10.
"Prüfung ob eine Zeile innerhalb des MESHES existiert
IF line_exists(
flights-scarr\_spfli[ flights-scarr[ carrname = name ]
connid = connection
]\_sflight[ fldate = date
price = price - 10 ] ).
ENDIF.
Be First to Comment