Hallo zusammen
ich setze mich seit Kurzem mit dem virtuellen Datenmodell (VDM) der SAP auseinander. Dort werden viele CDS-Views angeboten, die auch in ABAP-Programmen verwendet werden können. Eigentlich ganz praktisch nicht jede DB-Tabelle einzeln lesen zu müssen.
So habe ich zum Beispiel folgendes kleines Programm geschrieben:
Code: Alles auswählen.
SELECT
plant,
storagelocation,
\_storagelocation-storagelocationname,
\_storagelocation-handlingunitisrequired,
product,
batch,
inventorystocktype,
materialbaseunit,
matlwrhsstkqtyinmatlbaseunit
FROM i_stockquantitycurrentvalue_2( p_displaycurrency = 'EUR' )
WHERE product = '4711'
AND valuationareatype = '1' "BWKRS_CUS 1 = plant 3 = company code
INTO TABLE @DATA(l_db).
cl_demo_output=>display( l_db ).
Über die Assoziation _storagelocation, welche in i_stockquantitycurrentvalue_2 definiert ist, kann ich einfach Felder aus der t001l dazu lesen, ohne den join noch mal explizit angeben zu müssen. Funktioniert soweit wunderbar, wenn genau ein Eintrag gefunden wird.
Doch bei Texten, die es zu einem Material in mehreren Sprachen geben kann, oder halt auch gar nicht in der gewünschten Sprache, wird es schon schwerer.
Die Pfadangaben können um Restriktionen erweitert werden. Der Materialname wird in Englisch ausgegeben. Wenn es keinen Text auf Englisch gibt, bleibt das Feld leer. Ohne die Restriktion würde es pro gefundenen Text eine zusätzliche Zeile geben.
Code: Alles auswählen.
SELECT
plant,
storagelocation,
\_storagelocation-storagelocationname,
\_storagelocation-handlingunitisrequired,
product,
batch,
inventorystocktype,
materialbaseunit,
matlwrhsstkqtyinmatlbaseunit,
\_product\_text[ (1) left outer : WHERE language = 'E' ]-productname
FROM i_stockquantitycurrentvalue_2( p_displaycurrency = 'EUR' )
WHERE product = '4711'
AND valuationareatype = '1' "BWKRS_CUS 1 = plant 3 = company code
INTO TABLE @DATA(l_db).
cl_demo_output=>display( l_db ).
Das komische ist nur, wenn ich
Code: Alles auswählen.
\_product\_text[ (1) left outer : WHERE language = 'E' ]-productname
nicht am Ende der Feldliste schreibe, bekomme ich einen Syntaxfehler. Ich darf kein Komma dahinter angeben. Die Hilfe lässt mich etwas ratlos zurück, finde zu der obigen Schreibweise nicht wirklich was. Ich würde gerne mehrerer dieser Angaben in einen Select machen und sie auch nicht nur am Ende angeben können. Nutze aktuell SAP_BASIS 758 SP 1.
Hat wer von euch damit Erfahrung? Wie löst ihr das Problem? Nutz ihr die von der SAP bereitgestellten CDS-Views? Wäre das Thema einfacher zu lösen, indem ich direkt einen neuen (consumption) CDS-View auf Basis des Obigen erstelle anstatt es mit open sql zu lösen?