12. Statische Aktionen implementieren
- Die Message Class
ZTRAVELerstellen - Die Nachrichtenklasse
ZCM_TRAVELerstellen - Die Behavior Definition
ZR_TRAVELTPum eine Aktion zum Anzeigen einer Nachricht erweitern - Die Verhaltensimplementierung
ZBP_TRAVELTPum eine Behandlermethode zum Anzeigen einer Nachricht erweitern - Die Behavior Projection
ZC_TRAVELTPum eine Aktion zum Anzeigen einer Nachricht erweitern - Die Metadata Extension
ZC_TRAVELTPum Annotationen für eine Aktion zum Anzeigen einer Nachricht erweitern
Message Class ZTRAVEL
| Nachrichtennummer | Nachricht |
|---|---|
| 001 | This is a Test Message from &1 |
Nachrichtenklasse ZCM_TRAVEL
ZCM_TRAVEL.abap
CLASS zcm_travel DEFINITION PUBLIC
INHERITING FROM cx_static_check FINAL CREATE PUBLIC.
PUBLIC SECTION.
" Interfaces
INTERFACES if_abap_behv_message.
INTERFACES if_t100_message.
INTERFACES if_t100_dyn_msg.
" Message Constants
CONSTANTS:
BEGIN OF test_message,
msgid TYPE symsgid VALUE 'ZTRAVEL',
msgno TYPE symsgno VALUE '001',
attr1 TYPE scx_attrname VALUE 'USER_NAME',
attr2 TYPE scx_attrname VALUE '',
attr3 TYPE scx_attrname VALUE '',
attr4 TYPE scx_attrname VALUE '',
END OF test_message.
" Attributs
DATA user_name TYPE syuname.
" Constructor
METHODS constructor
IMPORTING severity TYPE if_abap_behv_message=>t_severity DEFAULT if_abap_behv_message=>severity-error
textid LIKE if_t100_message=>t100key DEFAULT if_t100_message=>default_textid
!previous LIKE previous OPTIONAL
user_name TYPE syuname OPTIONAL.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS zcm_travel IMPLEMENTATION.
METHOD constructor ##ADT_SUPPRESS_GENERATION.
super->constructor( previous = previous ).
if_t100_message~t100key = textid.
if_abap_behv_message~m_severity = severity.
me->user_name = user_name.
ENDMETHOD.
ENDCLASS.
Behavior Definition ZR_TRAVELTP
managed implementation in class zbp_traveltp unique;
strict ( 2 );
define behavior for ZR_TravelTP alias Travel
persistent table ztravel_a
lock master
authorization master ( instance )
//etag master <field_name>
{
create;
update;
delete;
association _Bookings { create; }
static action ShowTestMessage;
field ( readonly, numbering : managed ) TravelUuid;
mapping for ztravel_a corresponding
{
AgencyId = agency_id;
BeginDate = begin_date;
BookingFee = booking_fee;
CreatedAt = created_at;
CreatedBy = created_by;
CurrencyCode = currency_code;
CustomerId = customer_id;
Description = description;
EndDate = end_date;
LastChangedAt = last_changed_at;
LastChangedBy = last_changed_by;
Status = status;
TotalPrice = total_price;
TravelId = travel_id;
TravelUuid = travel_uuid;
}
}
define behavior for ZR_BookingTP alias Booking
persistent table zbooking_a
lock dependent by _Travel
authorization dependent by _Travel
//etag master <field_name>
{
update;
delete;
association _Travel;
field ( readonly, numbering : managed ) BookingUuid;
field ( readonly ) TravelUuid;
mapping for zbooking_a corresponding
{
BookingDate = booking_Date;
BookingId = booking_id;
BookingUuid = booking_uuid;
CarrierId = carrier_id;
ConnectionId = connection_id;
CurrencyCode = currency_code;
FlightDate = flight_date;
FlightPrice = flight_price;
TravelUuid = Travel_uuid;
}
}
Verhaltensimplementierung ZBP_TRAVELTP
Global Class ZBP_TRAVELTP
ZBP_TRAVELTP.abap
CLASS zbp_traveltp DEFINITION PUBLIC ABSTRACT FINAL FOR BEHAVIOR OF zi_traveltp.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS zbp_traveltp IMPLEMENTATION.
ENDCLASS.
Local Type LHC_TRAVEL
ZBP_TRAVELTP.abap
CLASS lhc_travel DEFINITION INHERITING FROM cl_abap_behavior_handler.
PRIVATE SECTION.
METHODS get_instance_authorizations FOR INSTANCE AUTHORIZATION
IMPORTING keys REQUEST requested_authorizations FOR Travel RESULT result.
METHODS showtestmessage FOR MODIFY
IMPORTING keys FOR ACTION travel~showtestmessage.
ENDCLASS.
CLASS lhc_travel IMPLEMENTATION.
METHOD get_instance_authorizations.
ENDMETHOD.
METHOD showtestmessage.
DATA message TYPE REF TO zcm_travel.
message = NEW zcm_travel( severity = if_abap_behv_message=>severity-success
textid = zcm_travel=>test_message
user_name = sy-uname ).
APPEND message TO reported-%other.
ENDMETHOD.
ENDCLASS.
Behavior Projection ZC_TRAVELTP
projection;
strict ( 2 );
define behavior for ZC_TravelTP alias Travel
{
use create;
use update;
use delete;
use association _Bookings { create; }
use action ShowTestMessage;
}
define behavior for ZC_BookingTP alias Booking
{
use update;
use delete;
use association _Travel;
}
Metadata Extension ZC_TRAVELTP
@Metadata.layer: #CUSTOMER
@UI.headerInfo:
{
typeNamePlural: 'Travels',
typeName: 'Travel',
title.value: 'TravelId',
description.value: 'Description'
}
@UI.presentationVariant: [{sortOrder: [{ by: 'BeginDate', direction: #DESC }]}]
annotate view ZC_TravelTP with
{
/* Facets */
@UI.facet:
[
{ position: 10, targetQualifier: 'TravelDetails', label: 'Travel Details', type: #FIELDGROUP_REFERENCE },
{ position: 20, targetQualifier: 'AdminData', label: 'Administrative Data', type: #FIELDGROUP_REFERENCE },
{ position: 30, targetElement: '_Bookings', label: 'Bookings', type: #LINEITEM_REFERENCE }
]
/* Actions */
@UI.lineItem: [{ position: 10, dataAction: 'ShowTestMessage', label: 'Show Test Message', type: #FOR_ACTION }]
/* Fields */
@UI.fieldGroup: [{ position: 10, qualifier: 'AdminData' }]
TravelUuid;
@UI.lineItem: [{ position: 10 }]
@UI.fieldGroup: [{ position: 10, qualifier: 'TravelDetails' }]
TravelId;
@UI.lineItem: [{ position: 20 }]
@UI.selectionField: [{ position: 10 }]
@UI.fieldGroup: [{ position: 20, qualifier: 'TravelDetails' }]
AgencyId;
@UI.lineItem: [{ position: 30 }]
@UI.selectionField: [{ position: 20 }]
@UI.fieldGroup: [{ position: 30, qualifier: 'TravelDetails' }]
CustomerId;
@UI.lineItem: [{ position: 40 }]
@UI.selectionField: [{ position: 30 }]
@UI.fieldGroup: [{ position: 40, qualifier: 'TravelDetails' }]
BeginDate;
@UI.lineItem: [{ position: 50 }]
@UI.selectionField: [{ position: 40 }]
@UI.fieldGroup: [{ position: 50, qualifier: 'TravelDetails' }]
EndDate;
@UI.fieldGroup: [{ position: 60, qualifier: 'TravelDetails' }]
BookingFee;
@UI.lineItem: [{ position: 60 }]
@UI.selectionField: [{ position: 50 }]
@UI.fieldGroup: [{ position: 70, qualifier: 'TravelDetails' }]
TotalPrice;
// CurrencyCode;
@UI.lineItem: [{ position: 70, criticality: 'BeginDateCriticality', criticalityRepresentation: #WITHOUT_ICON }]
@UI.fieldGroup: [{ position: 80, qualifier: 'TravelDetails' }]
Description;
@UI.lineItem: [{ position: 80, criticality: 'StatusCriticality', criticalityRepresentation: #WITHOUT_ICON }]
@UI.selectionField: [{ position: 60 }]
@UI.fieldGroup: [{ position: 90, qualifier: 'TravelDetails', criticality: 'StatusCriticality', criticalityRepresentation: #WITHOUT_ICON }]
Status;
@UI.fieldGroup: [{ position: 20, qualifier: 'AdminData' }]
Createdby;
@UI.fieldGroup: [{ position: 30, qualifier: 'AdminData' }]
Createdat;
@UI.fieldGroup: [{ position: 40, qualifier: 'AdminData' }]
Lastchangedby;
@UI.fieldGroup: [{ position: 50, qualifier: 'AdminData' }]
Lastchangedat;
}