By

Understanding EML in ABAP: A Comprehensive Guide

What is EML?

Suppose we need to access RAP functionality in ABAP. We can do this using EML (Entity Manipulation Language) in ABAP. EML allows us to perform create and update operations without using OData or an API.

Use cases include:

– Consuming RAP functionality directly within plain ABAP code.

– Developing specialised business logic.

– Generating test data.

– Integrating with classic code.

Syntax

Read:

READ ENTITIES OF /DMO/R_Travel_D IN LOCAL MODE
ENTITY Booking BY \_Travel
FIELDS ( TravelUUID )
WITH CORRESPONDING #( keys )
RESULT DATA(travels)
LINK DATA(link)
FAILED DATA(failed)
REPORTED DATA(reported).

Update:

MODIFY ENTITIES OF /DMO/R_Travel_D
ENTITY Booking
UPDATE FIELDS ( BookingStatus )
WITH VALUE #( ( BookingUUID = '<Booking_UUID>'
%is_draft = if_abap_behv=>mk-off
BookingStatus = 'A' )
( BookingUUID = '<Booking_UUID>'
%is_draft = if_abap_behv=>mk-off
BookingStatus = 'A' ) )
FAILED DATA(failed)
REPORTED DATA(reported).
COMMIT ENTITIES.

Delete:

MODIFY ENTITIES OF /DMO/R_Travel_D
ENTITY TRAVEL
DELETE FROM VALUE #( ( TravelUUID = '<Travel_UUID>'
%is_draft = if_abap_behv=>mk-off ) )
FAILED DATA(failed)
REPORTED DATA(reported).
COMMIT ENTITIES.

Example

  1. Create a Class
Dropdown menu showing options for creating new objects in an ABAP development environment, with 'ABAP Class' highlighted.

Screenshot of the 'New ABAP Class' dialog box in a programming interface, showing fields for project, package, name, description, original language, superclass, and interfaces.
User interface for creating a new ABAP class, showing options for selecting and entering a transport request.
CLASS zcl_ha_sa_eml DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
data: lv_operation TYPE char1 VALUE 'C'.
INTERFACES if_oo_adt_classrun.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS zcl_ha_sa_eml IMPLEMENTATION.
METHOD if_oo_adt_classrun~main.
CASE lv_operation.
WHEN 'R'. "read
READ ENTITIES OF ZHA_SA_TRAVEL
ENTITY Travel
FIELDS ( travelid agencyid customerid overallstatus ) WITH
VALUE #( ( TravelId = '00000017' )
( TravelId = '00000055' )
( TravelId = '00000089' ) )
RESULT DATA(lt_result)
FAILED DATA(lt_failed)
REPORTED DATA(lt_messages).
when 'C'."Create
DATA(lv_description) = 'Sangeeta RAP'.
DATA(lv_agency) = '080088'.
DATA(lv_customer) = '0008756'.
MODIFY ENTITIES OF ZHA_SA_TRAVEL
ENTITY Travel
CREATE FIELDS ( TravelId AgencyId CurrencyCode BeginDate EndDate Description OverallStatus )
WITH VALUE #(
(
%CID = 'SAN'
TravelId = '0007894'
AgencyId = lv_agency
CustomerId = lv_customer
BeginDate = cl_abap_context_info=>get_system_date( )
EndDate = cl_abap_context_info=>get_system_date( ) + 30
Description = lv_description
OverallStatus = 'O'
)
( %CID = 'SAN-1'
TravelId = '000717894'
AgencyId = lv_agency
CustomerId = lv_customer
BeginDate = cl_abap_context_info=>get_system_date( )
EndDate = cl_abap_context_info=>get_system_date( ) + 30
Description = lv_description
OverallStatus = 'O'
)
(
%CID = 'SAN-2'
TravelId = '00000060'
AgencyId = lv_agency
CustomerId = lv_customer
BeginDate = cl_abap_context_info=>get_system_date( )
EndDate = cl_abap_context_info=>get_system_date( ) + 30
Description = lv_description
OverallStatus = 'O'
)
)
MAPPED DATA(lt_map)
FAILED lt_failed
REPORTED lt_messages.
COMMIT ENTITIES.
out->write(
EXPORTING
data = lt_map ).
out->write(
EXPORTING
data = lt_failed ).
WHEN 'U'."Update
lv_description = 'Update'.
lv_agency = '080036'.
MODIFY ENTITIES OF ZHA_SA_TRAVEL
ENTITY Travel
UPDATE FIELDS ( AgencyId Description )
WITH VALUE #(
( TravelId = '00001133'
AgencyId = lv_agency
Description = lv_description
)
( TravelId = '00001135'
AgencyId = lv_agency
Description = lv_description
)
)
MAPPED lt_map
FAILED lt_failed
REPORTED lt_messages.
COMMIT ENTITIES.
out->write(
EXPORTING
data = lt_map ).
out->write(
EXPORTING
data = lt_failed ).
when 'D'."Delete
MODIFY ENTITIES OF ZHA_SA_TRAVEL
ENTITY Travel
DELETE FROM VALUE #( ( TravelId = '00012678'
) )
MAPPED lt_map
FAILED lt_failed
REPORTED lt_messages.
COMMIT ENTITIES.
out->write(
EXPORTING
data = lt_map ).
out->write(
EXPORTING
data = lt_failed ).
ENDCASE.
ENDMETHOD.
ENDCLASS.

2. Execute class and see the result.

Screenshot showing a dropdown menu in an ABAP development environment, highlighting the option '1 ABAP Application (Console)'
Screenshot of an ABAP console displaying data related to travel bookings, including IDs, status codes, and update actions.

Thanks for reading!

Leave a Reply

Discover more from HANAxABAP

Subscribe now to keep reading and get access to the full archive.

Continue reading