In CDS View/Entity, the data source for the selection is either some persistent data model( may be DB table/ CDS view). Virtual element is some field you want to add to the consumption/projection model whose value can’t provided by the persistence layer but calculated by the ABAP.
A simple may be hypothetical use case- The sales order header view need to show the no.of line items it has.
The CDS view build on VBAK table.
Add a virtual element and provide the necessary annotation and ABAP EXIT Class name.
Create a class and implement the interface- IF_SADL_EXIT_CALC_ELEMENT_READ
The two methods with signatures-
Do the preview, the class/method won;t trigger as it is executed on DB level.
Let’s make the view as a consumption view- make oData publish and register the service in gateway.
In tx- /IWFND/MAINT_SERVICE register the service-
Test the service in gateway client-
Service is working fine-
Provide the entity and execute GET request-
Here the SADL(query framework) calls the exit class of the virtual element-
So all record noofitems = 0 as we don’t have implemented any logic.
Let’s build our logic. Prepare a range table of sales order header and make selection on VBAP and then for each VBELN, get the no of lines and then we calculate our noofitems .
We got the output-