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

1603

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 - Tree View (Deletion behavior)

Category - ABAP

In this article, we'll look at the behavior of deleting nodes in the tree view using RAP. There are some interesting points to note.

04/15/2025

RAP - Tree View

Category - ABAP

Want to easily display a hierarchy in RAP? Learn how to do it in ABAP Cloud in this article.

04/08/2025

RAP - Classic Pattern

Category - ABAP

In this article, we look at the Classic Pattern and discuss the use cases of its implementation in ABAP Cloud.

03/25/2025

RAP - Popup Default values

Category - ABAP

How can you provide the user with default values in the popup of an action in RAP? In this article we will extend our application.

01/21/2025

RAP - Popup Mandatory Fields

Category - ABAP

How can you actually define required fields for a popup in RAP? In this article we will go into the details in more detail.

01/14/2025