Since ABAP release 7.88, SAP BTP ABAP Environment 2205, CDS view entities are feature complete. In this blog series, you find a complete list of new features, improvements, and differences of CDS view entities compared to CDS DDIC-based views.
Introduction and Overview
Part l: New features
Part ll: Improvements
Part lll: Differences
CDS view entities offer the following new features:
Release info: Typed literals are available since ABAP release 7.83, SAP BTP ABAP Environment 2102.
CDS DDIC-based view | CDS view entity |
|
|
CDS DDIC-based views offer untyped character literals and untyped numeric literals of an integer type or of type FLTP. By contrast, CDS view entities offer typed literals that cover almost all data types. This reduces the need for casting and conversions. What’s more, typed literals explicitly define their data type, ensuring more type-safe handling. Type compatibility is checked in your IDE during design time.
A typed literal is a literal whose data type is defined by specifying an ABAP Dictionary type explicitly.
Syntax: datatype'<literal>'
Example: abap.decfloat34'123.456E789'
datatype specifies the required data type with the type namespace abap. as prefix, followed by the character-like representation of the value in single quotes ('). Almost all built-in ABAP Dictionary types are possible: INT1, INT2, INT4, INT8, DEC, DECFLOAT16, DF16_DEC, DF16_RAW, DECFLOAT34, DF34_DEC, DF34_RAW, FLTP, CHAR, SSTRING, STRING, RAW, RAWSTRING, DATN, DATS, TIMN, TIMS, UTCLONG, NUMC, CLNT, LANG, CURR, CUKY, QUAN, UNIT.
<literal> specifies the value in single quotes. The value must match the data type specified under datatype. Otherwise, a syntax check error occurs.
Here’s an example for a CDS view entity using date and timestamp typed literals:
@EndUserText.label: 'CDS view entity, typed literals' define view entity DEMO_CDS_DATE_AND_TIME_TYP_LIT as select from demo_ddic_types { key id, utcl_add_seconds(abap.utcl'2020-01-02 23:59:59,1234567', 200) as add_seconds, datn_add_months(abap.datn'20200104', 13) as add_months, case when datn < abap.datn'20200101' then abap.char'<' else abap.char'>' end as caseExpressionField } where utcl <> abap.utcl'2018-02-21 23:59:59.1234567'
For further details, see ABAP Keyword Documentation on SAP Help Portal: CDS DDL - CDS View Entity, Typed Literals
Release info: EXCEPT and INTERSECT are available since ABAP release 7.85, SAP BTP ABAP Environment 2108.
While CDS DDIC-based views offer only the UNION set operator, CDS view entities offer UNION, EXCEPT, and INTERSECT.
Set operators merge the result sets of multiple queries into a single result set. In CDS view entities, the following set operators are available:
The following image illustrates how each set operator merges several result sets:
Example for an EXCEPT view
The following CDS view entity combines the result sets of two SELECT statements using EXCEPT. It returns all flights that cost less than 2000, at the same time excluding all flights that cost between 600 and 900.
@AccessControl.authorizationCheck: #NOT_REQUIRED @EndUserText.label: 'CDS view entity, set operator EXCEPT' @Metadata.ignorePropagatedAnnotations: true define view entity DEMO_CDS_EXCEPT as select from sflight { carrid, connid, @Semantics.amount.currencyCode: 'currency' price, currency } where price < 2000 except select from sflight { carrid, connid, price, currency } where price between 600 and 900
For further details, see ABAP Keyword Documentation on SAP Help Portal: CDS DDL - CDS View Entity, Set Operators.
Release info: Calculated quantities with calculated unit reference are available since ABAP release 7.84, SAP BTP ABAP Environment 2105.
In CDS view entities, a new type of quantity field is available: the calculated quantity with calculated unit reference.
Example
Arithmetic expression | Result |
770 € (Amount) / 100m² (Quantity) | 7,70€/m² (Calculated Quantity) |
The arithmetic expression 770€ / 100 m2 calculates cost per square meter. It divides an amount by a quantity. The result of this calculation is a calculated quantity that has calculated unit reference assigned. This calculated unit is not registered in the unit check table T006.
Calculated quantity:
Calculated unit:
Note: A CDS view entity selecting from another CDS view entity inherits the calculated quantity characteristic.
Example
In the following CDS view entity, the field rent_per_size divides the amount of the rent for an apartment by the apartment size. The result is the cost per square meter.
@AccessControl.authorizationCheck: #NOT_ALLOWED @EndUserText.label: 'CDS view entity, calculated quantity' define view entity DEMO_CDS_CALCULATED_QUANTITY as select from demo_rent { key apartment_id as ApartmentId, apartment_size as ApartmentSize, apartment_unit as ApartmentUnit, currency as Currency, // currency field and unit field in arith expression @Semantics.quantity.unitOfMeasure: 'calculatedUnit' rent_decfloat34 / apartment_size as rent_per_size, concat( concat(currency, '/' ), apartment_unit ) as calculatedUnit }
If data is inserted into the underlying database talbe demo_rent, the data preview might look as follows:
For further details, see ABAP Keyword Documentation on SAP Help Portal: ABAP CDS - Calculated Quantity with Calculated Unit.
Release info: Available since ABAP release 7.87, SAP BTP ABAP Environment 2202.
In CDS DDIC-based views, buffering is configured via annotations.
In CDS view entities, these annotations are not supported. A new buffer handling has been implemented to provide more flexibility in buffering settings and to enable customers to change the buffering settings of SAP-delivered objects.
First of all, in a CDS view entity, buffering is prepared with the annotation @AbapCatalog.entityBuffer.definitionAllowed: true|false.
If buffering is allowed, the actual buffering type can be defined by a separate CDS tuning object, called CDS entity buffer, with the DDL statement: DEFINE VIEW ENTITY BUFFER ON cds_view_entity.
Syntax
DEFINE VIEW ENTITY BUFFER ON <entity_name> TYPE SINGLE|GENERIC|FULL LAYER CORE|LOCALIZATION|INDUSTRY|PARTNER|CUSTOMER [NUMBER OF KEY ELEMENTS <number>] // Needed for buffer type "GENERIC"
The CDS entity buffer relates the buffering type to one of the layers: core, localization, industry, partner, and customer. For each layer, one buffering type can be defined for a CDS view entity.
For details, see Buffering CDS View Entities | SAP Blogs: this blog post contrasts buffering of CDS DDIC-based views and CDS view entities and describes how to define a CDS view entity buffer.
For further details, see ABAP Keyword Documentation on SAP Help Portal: ABAP CDS - Table Buffering of CDS View Entities.
Release info: Available since ABAP release 7.78.
Extension to a CDS DDIC-based view:
@AbapCatalog.sqlViewAppendName: 'DEMO_CDS_EXTENS' extend view demo_cds_original_view with demo_cds_view_extension { spfli.distance, spfli.distid as unit, _assoc };
Extension to a CDS view entity:
extend view entity demo_cds_original_view_ve with { _assoc }
Differences:
Additional advantages of CDS view entity extensions:
Further details are described in the blog post ABAP Core Data Services: New syntax for extending CDS entities | SAP Blogs.
For further details, see ABAP Keyword Documentation on SAP Help Portal:
CDS DDL - EXTEND VIEW ENTITY.
CDS view entities offer new built-in functions.
REPLACE_REGEXPR
Release info: Available since ABAP release 7.81, SAP BTP ABAP Environment 2208.
The built-in function REPLACE_REGEXPR is available in CDS view entities and also in ABAP SQL. It replaces a character string within a text by another character string.
Syntax
REPLACE_REGEXPR( PCRE => pcre, VALUE => arg1, WITH => arg2, RESULT_LENGTH => res[, OCCURRENCE => occ][, CASE_SENSITIVE => case][, SINGLE_LINE => bool][, MULTI_LINE => bool][, UNGREEDY => bool])
Effect: A Perl Compatible Regular Expression (PCRE) pcre is replaced in a given string (specified after VALUE) with a character string specified after the keyword parameter WITH. The keyword parameter OCCURRENCE is optional and determines the number of occurrences of pcre to be replaced. By default, all occurrences are replaced. The search is case-sensitive by default, but this can be overridden using the parameter CASE_SENSITIVE. Single-line, multiline, and ungreedy regular expression matching can be set with the respective parameters, SINGLE_LINE, MULTI_LINE, and UNGREEDY.
Example
@AccessControl.authorizationCheck: #NOT_REQUIRED define view entity demo_cds_sql_func_string_ve as select from demo_expressions { replace_regexpr( pcre => '\\Cg', value => char2, with => 'bb', result_length => 4 ) as r_replace_regexpr }
For further details, see ABAP Keyword Documentation on SAP Help Portal: CDS DDL - CDS View Entity, String Functions.
GET_NUMERIC_VALUE
Release info: Available since ABAP release 7.83, SAP BTP ABAP Environment 2102.
GET_NUMERIC_VALUE returns the numeric value of a currency or quantity field without its currency or unit key. This function has been introduced to support the overhauled currency and quantity handling. If an operand position does not accept an amount or quantity field, due to stricter syntax checks, GET_NUMERIC_VALUE can be used to remove the reference to a unit or currency key.
Example
@AccessControl.authorizationCheck: #NOT_REQUIRED @EndUserText.label: 'CDS view entity, GET_NUMERIC_VALUE' @Metadata.ignorePropagatedAnnotations: true define view entity DEMO_CDS_GET_NUMERIC_VALUE
as select from sflight { key carrid, key connid, key fldate, @Semantics.amount.currencyCode: 'currency' price, currency, @Semantics.amount.currencyCode: 'currency' paymentsum, GET_NUMERIC_VALUE( paymentsum ) / GET_NUMERIC_VALUE( price ) as number_of_bookings }
For further details, see ABAP Keyword Documentation on SAP Help Portal: CDS DDL - CDS View Entity, Unit and Currency Conversion Functions, Variant 3.
CURR_TO_DECFLOAT_AMOUNT
Release info: Available since ABAP release 7.83, SAP BTP ABAP Environment 2102.
CURR_TO_DECFLOAT_AMOUNT converts a currency field of data type CURR into a currency field of data type DECFLOAT34. This function has been introduced to support the overhauled currency and quantity handling. It is required if you want to use a currency field in an expression, for example in an arithmetic expression, since CDS currency fields are generally not supported as operands of expressions.
Example
@AccessControl.authorizationCheck: #NOT_REQUIRED @EndUserText.label: 'CDS view entity, CURR_TO_DEC' define view entity DEMO_CDS_CURR_TO_DEC as select from demo_ddic_types { key id, cuky as currency, @Semantics.amount.currencyCode: 'currency' curr10_4 as amount, @Semantics.amount.currencyCode: 'currency' CURR_TO_DECFLOAT_AMOUNT(curr10_4) as curr_conv }
For further details, see ABAP Keyword Documentation on SAP Help Portal: CDS DDL - CDS View Entity, Unit and Currency Conversion Functions, Variant 4.
Release info: Available since ABAP release 7.84, SAP BTP ABAP Environment 2105.
CDS view entities support the syntax $PROJECTION.element to reuse an expression that was defined in the SELECT statement of the same CDS view entity. A reuse expression can be used in the SELECT list as part of an expression, or in the ON clause of a CDS association.
Example:
The following CDS view entity reuses a field, a literal, a case expression, a string function, and a cast expression in different operand positions of the SELECT statement.
@AccessControl.authorizationCheck: #NOT_REQUIRED @EndUserText.label: 'CDS view entity, expression reuse' define view entity DEMO_CDS_EXPRESSION_REUSE as select from demo_expressions { //field key id as field1, concat($projection.field1, $projection.case1) as field_reuse, //literal abap.char'hallo' as lit1, concat($projection.lit1, $projection.case_reuse) as lit_reuse, //arithmetic expression abap.decfloat34'123.45E6' as arith, $projection.arith * $projection.builtIn_reuse as arith_reuse, //cast expression cast(char1 as abap.dec(10)) as cast1, coalesce($projection.cast1, $projection.arith_reuse) as cast_reuse, //built-in function abs(dec1) as builtIn, cast($projection.builtIn as abap.int4) as builtIn_reuse, //case distinction case char2 when 'Anna' then 'X' when 'Lisa' then 'Y' else '-' end as case1, left($projection.case1, 1) as case_reuse }
To find a list of all expressions that can be reused, plus all operand positions that accept $PROJECTION.element, see the ABAP Keyword Documentation on SAP Help Portal: CDS DDL - CDS View Entity, $projection.
Release info: Available since ABAP release 7.88, SAP BTP ABAP Environment 2205.
Refactoring of view stacks has become much faster and easier for CDS view entities. If a developer wants to rename a field or an association across a view stack, they can manually edit all affected DDL files, and then activate those DDL files together with the mass activation button. This improved refactoring works for fields and associations, also associations of type to-parent or composition.
Here’s an example:
Scenario: You want to rename a field that is used in multiple views that select from each other and build a view stack.
Issue when working with a CDS DDIC-based view: An activation error occurs when you try to mass-activate the changed objects, saying that field my_field is still used in another source.
Workaround to solve the issue:
Solution available in CDS view entities: Renaming of fields across a view stack is possible via mass activation.
Conclusion: Fields and associations can be renamed consistently across the stack and the affected objects can be activated in one mass activation. This makes refactoring much faster and easier since the intermediate steps of the workaround are no longer necessary.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
4 | |
2 | |
2 | |
2 | |
2 | |
2 | |
1 | |
1 | |
1 | |
1 |