„CDS Enumerated Types“ sollen eine Alternative zu Domänen mit Festwerten darstellen. Dieser Repository Typ steht seit dem Release „2308 SAP BTP ABAP Environment“ zur Verfügung und ist nicht zu verwechseln mit den bereits existierenden ABAP Enums.
Ob diese neuen Typen alle Erwartungen erfüllen und mit welchen Einschränkungen man bei der Verwendung noch leben muss, wird am Ende des Blogeintrags erläutert.
Definition
Die Definition gestaltet sich ähnlich zu den CDS Simple Types. Es ist zu beachten dass ein „initial“-Wert vergeben werden muss.
Annotationen können sowohl global für den Typen aber auch pro Enum-Wert genutzt werden.
@EndUserText.label: 'Overall Status'
define type ZTEST_OVERALL_STATUS_CWE : abap.char(1) enum
{
@EndUserText.label: ''
no_status = initial;
@EndUserText.label: 'Rejected'
rejected = 'R';
@EndUserText.label: 'Accepted'
accepted = 'A';
}
Verwendung in CDS-Views
Die Verwendung ist wie üblich mit cast( ) möglich, ebenfalls können einzelne Enum-Werte direkt in der CDS-View verwendet werden.
Möchte man Enum-Werte beispielsweise in der WHERE-Bedingung des CDS-Views verwenden, ist ein erneuter cast() auf den Datentypen des Feldes notwendig, auch wenn der Enumerated Type bereits den entsprechenden Base Type des Feldes verwendet.
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Travel'
define root view entity ZTEST_I_TRAVEL_CWE
as select from ztravel_cwe
...
{
...
cast( overall_status as ZTEST_OVERALL_STATUS_CWE ) as OverallStatus,
ZTEST_OVERALL_STATUS_CWE.#accepted as StatusAccepted
}
where
overall_status <> cast( ZTEST_OVERALL_STATUS_CWE.#rejected as abap.char(1) )
Verwendung in ABAP
Ähnlich wie ABAP Enums können Enumerated Types auch in ABAP verwendet werden.
SELECT *
FROM ztravel_cwe
INTO TABLE @DATA(lt_travel)
WHERE overall_status = @ZTEST_OVERALL_STATUS_CWE-accepted.
Fazit & Ausblick
Wie bereits bei den „CDS Simple Types“ ist es nicht möglich Enumerated Types in Datenbanktabellen zu verwenden. Es ist jedoch geplant auch solche Enumerated Types in Datenbanktabellen verfügbar zu machen, dazu kündigte die SAP bereits eine sogenannte „CDS Table Entity“ an.
Eine richtige Alternative zu Domänen mit Festwerten stellen solche Enumerated Types vor allem bei der Verwendung im RESTful ABAP Programming Model nicht dar, da diese schlicht noch nicht unterstützt werden. Die SAP räumt ein, dass dies leider noch nicht auf der Roadmap steht, verspricht aber zugleich dass dies früher oder später der Fall sein wird.
Besonders spannend ist, dass für Enumerated Types dann auch Festwert-Suchhilfen „out of the Box“ zur Verfügung stehen sollen.
Commenti