This is a test message to test the length of the message box.
Login
ABAP RAP Virtual Elements
Created by Software-Heroes

RAP - Virtual Elements

1852

There are virtual elements around the projections, we show you how to use and implement them to extend your RAP object.



We already discussed virtual elements in CDS views in an older article. Today we present another variant, which is mainly used in projections of RAP objects.

 

Definition

The elements receive their own keyword in the CDS view and again receive the annotation to indicate the implementing class. These virtual elements can only be used in the projection layer and will result in an error for a view or standard entity.

@ObjectModel.virtualElementCalculatedBy: 'ABAP:ZCL_BS_DEMO_CRAP_VE_EXIT' 
virtual NumberOfPositions : abap.int4,

 

Class

The class is implemented again accordingly with the interface IF_SADL_EXIT_CALC_ELEMENT_READ. It is sufficient to fill the CALCULATE method with content. The example implementation of the method could look like this:

LOOP AT it_requested_calc_elements INTO DATA(ld_virtual_field).
  LOOP AT ct_calculated_data ASSIGNING FIELD-SYMBOL(<ls_calculated_data>).
    DATA(ld_tabix) = sy-tabix.
    ASSIGN COMPONENT ld_virtual_field OF STRUCTURE <ls_calculated_data> TO FIELD-SYMBOL(<ld_field>).

    DATA(ls_original) = CORRESPONDING ZBS_C_RAPCInvoice( it_original_data[ ld_tabix ] ).

    IF ls_original-Partner = '1000000002'.
      <ld_field> = 999.

    ELSE.
      SELECT FROM zbs_dmo_position
        FIELDS COUNT( * )
        WHERE document = @ls_original-Document
        INTO @<ld_field>.

    ENDIF.
  ENDLOOP.
ENDLOOP.

 

The method loops over the requested items and then adds the content that was requested. To derive our information from the data, we assign it to an internal variable. Since the data types were defined as ANY, we have to go this route to address the elements by their names. In the end, for a specific partner we set the number to 999 and for all other partners we determine the number of positions. The overall implementation would then look like this:

CLASS zcl_bs_demo_crap_ve_exit DEFINITION
  PUBLIC
  FINAL
  CREATE PUBLIC.

  PUBLIC SECTION.
    INTERFACES if_sadl_exit_calc_element_read.
ENDCLASS.


CLASS zcl_bs_demo_crap_ve_exit IMPLEMENTATION.
  METHOD if_sadl_exit_calc_element_read~calculate.
    LOOP AT it_requested_calc_elements INTO DATA(ld_virtual_field).
      LOOP AT ct_calculated_data ASSIGNING FIELD-SYMBOL(<ls_calculated_data>).
        DATA(ld_tabix) = sy-tabix.
        ASSIGN COMPONENT ld_virtual_field OF STRUCTURE <ls_calculated_data> TO FIELD-SYMBOL(<ld_field>).

        DATA(ls_original) = CORRESPONDING ZBS_C_RAPCInvoice( it_original_data[ ld_tabix ] ).

        IF ls_original-Partner = '1000000002'.
          <ld_field> = 999.

        ELSE.
          SELECT FROM zbs_dmo_position
            FIELDS COUNT( * )
            WHERE document = @ls_original-Document
            INTO @<ld_field>.

        ENDIF.
      ENDLOOP.
    ENDLOOP.
  ENDMETHOD.


  METHOD if_sadl_exit_calc_element_read~get_calculation_info.
  ENDMETHOD.
ENDCLASS.

 

Usage

Within RAP, additional information can be given to the frontend that is not available in the data model. For technical fixed values, readable content could be transferred in this way. The result of the example shown above looks like this:

 

Conclusion

As always, we have committed the current variant to GitHub so that you can understand the changes and examples. Virtual elements are implemented quite simply, but information from JOIN and association should be used preferably.


Included topics:
RAPBTPVirtual ElementsVIRTUAL
Comments (1)



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.


RAP - API Pattern

Category - ABAP

In this article, we look at the API pattern for RAP and how you can use it flexibly in ABAP development to provide interfaces.

06/20/2025

RAP - Multiple filters and settings

Category - ABAP

What happens if we want to set several filters and fields as default in RAP and also need a default sorting?

05/16/2025

RAP - Message Length

Category - ABAP

Is your message truncated when outputting with RAP? Let's look at the problem and a solution.

05/13/2025

RAP - Optimize Search and Keys

Category - ABAP

In this article, we will optimize our search help in the custom pattern, use the additional binding, and make our RAP application fit for the end user.

05/06/2025

RAP - Fixed Value Filter

Category - ABAP

How do you use fixed values from a domain for a filter and customize it to your needs in RAP? Learn more here.

05/02/2025