Zum Hauptinhalt springen

4. RAP BO erweitern

  • Die Anwendungstabelle ZBOOKING_A erstellen
  • Die ABAP-Klasse ZCL_TRAVEL_GENERATOR um Buchungen erweitern
  • Die Basic Interface View ZI_Booking erstellen
  • Die BO Base View ZR_BookingTP inklusive einer Assoziation zur BO Base View ZR_TravelTP erstellen
  • Die BO Base View ZR_TravelTP um eine Assoziation zur BO Base View ZR_BookingTP erweitern

Anwendungstabelle ZBOOKING_A

@EndUserText.label : 'Booking'
@AbapCatalog.enhancement.category : #NOT_EXTENSIBLE
@AbapCatalog.tableCategory : #TRANSPARENT
@AbapCatalog.deliveryClass : #A
@AbapCatalog.dataMaintenance : #RESTRICTED
define table zbooking_a {
key client : abap.clnt not null;
key booking_uuid : sysuuid_x16 not null;
travel_uuid : sysuuid_x16 not null;
booking_id : /dmo/booking_id;
booking_date : /dmo/booking_date;
carrier_id : /dmo/carrier_id;
connection_id : /dmo/connection_id;
flight_date : /dmo/flight_date;
@Semantics.amount.currencyCode : 'zbooking_a.currency_code'
flight_price : /dmo/flight_price;
currency_code : /dmo/currency_code;
}

ABAP-Klasse ZCL_TRAVEL_GENERATOR

ZCL_TRAVEL_GENERATOR.abap
CLASS zcl_travel_generator DEFINITION PUBLIC FINAL CREATE PUBLIC.
PUBLIC SECTION.
INTERFACES if_oo_adt_classrun.
ENDCLASS.

CLASS zcl_travel_generator IMPLEMENTATION.
METHOD if_oo_adt_classrun~main.
DATA travel TYPE ztravel_a.
DATA travels TYPE TABLE OF ztravel_a.
DATA booking TYPE zbooking_a.
DATA bookings TYPE TABLE OF zbooking_a.

" Delete Travels
DELETE FROM ztravel_a.
out->write( |Deleted Travels: { sy-dbcnt }| ).

" Delete Bookings
DELETE FROM zbooking_a.
out->write( |Deleted Bookings: { sy-dbcnt }| ).

" Create Travel
travel-agency_id = '070001'.
travel-begin_date = '20231027'.
travel-booking_fee = '40.95'.
travel-client = sy-mandt.
travel-created_by = 'GENERATOR'.
travel-currency_code = 'EUR'.
travel-customer_id = '000004'.
travel-description = 'Kurztrip nach Hamburg'.
travel-end_date = '20231030'.
travel-last_changed_by = 'GENERATOR'.
travel-status = 'B'.
travel-total_price = '650.50'.
travel-travel_id = '00000001'.
travel-travel_uuid = cl_system_uuid=>create_uuid_x16_static( ).
GET TIME STAMP FIELD travel-created_at.
GET TIME STAMP FIELD travel-last_changed_at.
APPEND travel TO travels.

" Create Booking
booking-booking_date = '20230807'.
booking-booking_id = '3861'.
booking-booking_uuid = cl_system_uuid=>create_uuid_x16_static( ).
booking-carrier_id = 'LH'.
booking-client = sy-mandt.
booking-connection_id = '0300'.
booking-currency_code = 'EUR'.
booking-flight_date = travel-begin_date.
booking-flight_price = '304.00'.
booking-travel_uuid = travel-travel_uuid.
APPEND booking TO bookings.

" Create Booking
booking-booking_date = '20230807'.
booking-booking_id = '2947'.
booking-booking_uuid = cl_system_uuid=>create_uuid_x16_static( ).
booking-carrier_id = 'LH'.
booking-client = sy-mandt.
booking-connection_id = '0350'.
booking-currency_code = 'EUR'.
booking-flight_date = travel-end_date.
booking-flight_price = '305.55'.
booking-travel_uuid = travel-travel_uuid.
APPEND booking TO bookings.

" Create Travel
travel-agency_id = '070023'.
travel-begin_date = '20240707'.
travel-booking_fee = '150.00'.
travel-client = sy-mandt.
travel-created_by = 'GENERATOR'.
travel-currency_code = 'EUR'.
travel-customer_id = '000066'.
travel-description = 'Italienurlaub 2024'.
travel-end_date = '20240723'.
travel-last_changed_by = 'GENERATOR'.
travel-status = 'P'.
travel-total_price = '2188.00'.
travel-travel_id = '00000002'.
travel-travel_uuid = cl_system_uuid=>create_uuid_x16_static( ).
GET TIME STAMP FIELD travel-created_at.
GET TIME STAMP FIELD travel-last_changed_at.
APPEND travel TO travels.

" Create Travel
travel-agency_id = '070045'.
travel-begin_date = '20221231'.
travel-booking_fee = '77.99'.
travel-client = sy-mandt.
travel-created_by = 'GENERATOR'.
travel-currency_code = 'USD'.
travel-customer_id = '000026'.
travel-description = 'Silvester New York'.
travel-end_date = '20230104'.
travel-last_changed_by = 'GENERATOR'.
travel-status = 'B'.
travel-total_price = '389.00'.
travel-travel_id = '00000003'.
travel-travel_uuid = cl_system_uuid=>create_uuid_x16_static( ).
GET TIME STAMP FIELD travel-created_at.
GET TIME STAMP FIELD travel-last_changed_at.
APPEND travel TO travels.

" Create Booking
booking-booking_date = '20221204'.
booking-booking_id = '0021'.
booking-booking_uuid = cl_system_uuid=>create_uuid_x16_static( ).
booking-carrier_id = 'LH'.
booking-client = sy-mandt.
booking-connection_id = '0400'.
booking-currency_code = 'USD'.
booking-flight_date = travel-begin_date.
booking-flight_price = '150.46'.
booking-travel_uuid = travel-travel_uuid.
APPEND booking TO bookings.

" Create Booking
booking-booking_date = '20221204'.
booking-booking_id = '0095'.
booking-booking_uuid = cl_system_uuid=>create_uuid_x16_static( ).
booking-carrier_id = 'LH'.
booking-client = sy-mandt.
booking-connection_id = '0401'.
booking-currency_code = 'USD'.
booking-flight_date = travel-end_date.
booking-flight_price = '160.55'.
booking-travel_uuid = travel-travel_uuid.
APPEND booking TO bookings.

" Create Travel
travel-agency_id = '070045'.
travel-begin_date = '20231101'.
travel-booking_fee = '0.00'.
travel-client = sy-mandt.
travel-created_by = 'GENERATOR'.
travel-currency_code = 'SGD'.
travel-customer_id = '000003'.
travel-description = 'Businesstrip to Singapur'.
travel-end_date = '20231108'.
travel-last_changed_by = 'GENERATOR'.
travel-status = 'N'.
travel-total_price = '1290.00'.
travel-travel_id = '00000004'.
travel-travel_uuid = cl_system_uuid=>create_uuid_x16_static( ).
GET TIME STAMP FIELD travel-created_at.
GET TIME STAMP FIELD travel-last_changed_at.
APPEND travel TO travels.

" Insert Travels
INSERT ztravel_a FROM TABLE @travels.
out->write( |Inserted Travels: { sy-dbcnt }| ).

" Insert Bookings
INSERT zbooking_a FROM TABLE @bookings.
out->write( |Inserted Bookings: { sy-dbcnt }| ).
ENDMETHOD.
ENDCLASS.

Basic Interface View ZI_Booking

@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Booking'
define view entity ZI_Booking
as select from zbooking_a
{
key booking_uuid as BookingUuid,
travel_uuid as TravelUuid,
booking_id as BookingId,
booking_date as BookingDate,
carrier_id as CarrierId,
connection_id as ConnectionId,
flight_date as FlightDate,
@Semantics.amount.currencyCode: 'CurrencyCode'
flight_price as FlightPrice,
currency_code as CurrencyCode
}

BO Base View ZR_BookingTP

@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Booking'
define view entity ZR_BookingTP
as select from ZI_Booking
association to parent ZR_TravelTP as _Travel on $projection.TravelUuid = _Travel.TravelUuid
{
key BookingUuid,
TravelUuid,
BookingId,
BookingDate,
CarrierId,
ConnectionId,
FlightDate,
FlightPrice,
CurrencyCode,

/* Associations */
_Travel
}

BO Base View ZR_TravelTP

@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Travel'
define root view entity ZR_TravelTP
as select from ZI_Travel
composition [0..*] of ZR_BookingTP as _Bookings
{
key TravelUuid,
TravelId,
AgencyId,
CustomerId,
BeginDate,
EndDate,
BookingFee,
TotalPrice,
CurrencyCode,
Description,
Status,

/* Administrative Data */
CreatedBy,
CreatedAt,
LastChangedBy,
LastChangedAt,

/* Associations */
_Bookings
}