This is a test message to test the length of the message box.
ABAP CDS Virtual fields
Created by Software-Heroes

CDS - Virtual fields


This article is about virtual fields in Core Data Services and how you can subsequently deliver such complex data.

Today we will show you how to insert virtual elements into CDS Views and how to fill them with data. We will also go into the special features that you should consider.



Virtual items, as the name suggests, are not persistent data from the database, but are created to retrieve the data. This goes hand in hand with some special features that you should consider when using them:

  • The data is filled using the SADL class, so it is not possible to display the data using Data Preview, the field there remains empty.
  • In terms of performance, the virtual element is unsuitable for selection and filtering via the service or the Fiori interface.


Virtual elements

To do this, we create a core data service and create a virtual column "PricePerUnit". The column also needs an annotation "@ObjectModel.virtualElementCalculatedBy" so that it is announced via which class the content is generated.

@AbapCatalog.sqlViewName: 'ZBSIDMOPRIPERUNI'
@EndUserText.label: 'Exit in CDS'
define view ZBS_C_DmoPricePerUnit
  as select from ZBS_I_DmoPosition
  key DocumentNumber,
  key PositionNumber,
      @ObjectModel.virtualElementCalculatedBy: 'ABAP:ZCL_BS_DEMO_CDS_EXIT'
      cast( 0 as abap.curr(15,2) ) as PricePerUnit



You then have to implement the exit to fill the field with data. To do this, create the class with the previously defined name and implement the "if_sadl_exit_calc_element_read" interface.

    INTERFACES if_sadl_exit_calc_element_read.


CLASS zcl_bs_demo_cds_exit IMPLEMENTATION.
  METHOD if_sadl_exit_calc_element_read~calculate.
      lt_view_data TYPE STANDARD TABLE OF ZBS_C_DmoPricePerUnit WITH EMPTY KEY.

    lt_view_data = CORRESPONDING #( it_original_data ).

    LOOP AT lt_view_data REFERENCE INTO DATA(lr_view_data).
      lr_view_data->PricePerUnit = lr_view_data->PositionPrice / lr_view_data->PositionQuantity.

    ct_calculated_data = CORRESPONDING #( lt_view_data ).

  METHOD if_sadl_exit_calc_element_read~get_calculation_info.


The interface provides two methods. In the first step, the "GET_CALCULATE_INFO" method is called, where the fields and information to be determined are transferred again. In the "CALCULATE" method you then calculate or fill in the fields. However, the changing parameter only contains the elements to be calculated.



If we now look at the data via Data Preview in Eclipse, then we get an empty column. The SADL exit is not run through with this form of display and the data is therefore not enriched.


If we now build an app via RAP to view the data in an OData in a Fiori Elements app, the corresponding exit is called, the data is now also filled and displayed. The CDS view can also simply be published as an OData service; the display in the browser would then work just as well. The annotation "@OData.publish: true" can also be used for this:



If you ever have to derive complex data and you cannot map it as a CDS view, then you also have the option of reading additional data and integrating complex logic into the view. However, you must note that the logic then only works in the remote scenario.

Included topics:
CDSCore Data ServiceVirtual fields
Comments (0)

And further ...

Are you satisfied with the content of the article? We post new content in the ABAP area every Friday and irregularly in all other areas. Take a look at our tools and apps, we provide them free of charge.

ABAP Tools - Work with Eclipse (CDS Analysis)

Category - ABAP

In the complex world of CDS views, it is important to have the right tool at hand to ensure an analysis of the structures and data sources.


CDS - View Entity

Category - ABAP

In this article you will learn more about the new Core Data Service entities, what they bring and what makes them different from the old views.


CDS - Learnings

Category - ABAP

In this article we summarize the learned content and show you the way for what you will need the CDS Views in the future.


CDS - Authority check

Category - ABAP

How and where are the permissions for a Core Data Service delimited? Check out this article for the details.


CDS - Extension of Views

Category - ABAP

This article is about the extension of views to include customer-specific fields or to provide missing information.