Inhaltsverzeichnis
DT280 - CLOUD ERP EXTENSIBILITY ......................................................................................... 2
REFERENCE MATERIAL ........................................................................................................... 2
GETTING STARTED .................................................................................................................. 2
EX1: NEW APP ON STACK (DEVELOPER EXTENSIBILITY).................................................................. 3
GO TO RELEASED OBJECTS AND SELECT API I_BANKTP .................................................................. 3
GENERATE ABAP REPOSITORY OBJECTS ....................................................................................... 4
CHANGED THE NAMES ABAP REP.OBJECTS................................................................................... 5
GENERATE THE OBJECTS AND PROVIDE THE TRANSPORT REQUEST ...................................................... 10
PUBLISH THE SERVICE AND ACTIVATE SERVICE BINDING ................................................................. 11
PREVIEW THE SERVICE BINDING ............................................................................................... 11
TEST OUTPUT ...................................................................................................................... 12
CREATE NEW BANK COUNTRY ................................................................................................. 12
CHECK THE KNOWLEDGE TRANSFER DOCUMENT ......................................................................... 14
CHECK FOR AUTHORIZATION OBJECT ........................................................................................ 14
ADDED NEW BANK NAME ....................................................................................................... 19
EX.2 BEHAVIOR EXTENSION .................................................................................................. 19
ADD IMPLEMENTATION CODE ................................................................................................... 21
ACTIVATE IT AND CREATE BEHAVIOR IMPLEMENTATION .................................................................... 23
OPEN THE SERVICE BINDING ................................................................................................... 24
PREVIEW THE SHOP RAP BO................................................................................................... 25
EX.3 EXTEND THE BEHAVIOR DEFINITION WITH DETERMINATION . ....................................................... 26
ADD DETERMINATION ............................................................................................................ 27
FINAL OUTPUT .................................................................................................................... 29
EX.2.3: EXTEND THE BEHAVIOR DEFINITION WITH SIDE EFFECTS ..................................................... 29
ADD THE CODE FOR SIDE EFFECTS ............................................................................................ 29
EX.3 EXTEND THE CDS DATA MODEL OF THE EXTENSIBLE RAP BO .................................................. 30
ADD NEW FIELD ................................................................................................................... 33
TEST THE EXTENSION FIELD ..................................................................................................... 36
EX:4 EXTEND THE BUSINESS OBJECT WITH AN ACTION .................................................................. 37
CREATE AN ABSTRACT ENTITY ................................................................................................... 37
ADD ABSTRACT ENTITY CODE ................................................................................................... 38
EXTEND THE BEHAVIOR DEFINITION ........................................................................................... 39
ADD ACTION CODE ............................................................................................................... 39
ADD METHOD IMPLEMENTATION ............................................................................................... 40
EX 4.4 EXTEND THE PROJECTION BDEF ..................................................................................... 41
ADD ACTION CODE............................................................................................................... 42
ADD UI ANNOTATION ............................................................................................................ 42
FINAL OUTPUT UPDATE FEEDBACK ............................................................................................ 44
DT280 - Cloud ERP Extensibility
Reference Material
https://github.com/SAP-samples/teched2024-
DT280/blob/main/README.md#requirements-for-attending-this-workshop
Getting started
Execute the class
Now two packages will be created
Please add the below packages into Favorite Packages
Ex1: New App on stack (Developer Extensibility)
In this exercise , you will build a custom UI on top of the released API I_BankTP.
Go to Released objects and select API I_BANKTP
Generate ABAP Repository objects
Changed the names ABAP Rep.objects
• Service Projection Entities
• Service Projection Behavior
• Service Definition
• Service Binding
Generate the objects and provide the transport request
Publish the service and Activate Service Binding
Preview the service binding
Test Output
Create New Bank Country
Check the Knowledge Transfer Document
Check for Authorization Object
Ex 1.2 Use a Released RAP BO in Custom Application
Please replace the value for '###' with a string that only contains numbers( I have
used 991).
CLASS zcl_test_abap_cloud_991 DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
INTERFACES:if_oo_adt_classrun.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS .
CLASS zcl_test_abap_cloud_991 IMPLEMENTATION.
METHOD if_oo_adt_classrun~main.
DATA create_bank TYPE STRUCTURE FOR CREATE i_banktp.
DATA bank_id_number TYPE i_banktp-BankInternalID VALUE '8###'.
create_bank = VALUE #( bankcountry = 'CZ'
bankinternalid = bank_id_number
longbankname = 'Bank name'
longbankbranch = 'Bank branch'
banknumber = bank_id_number
bankcategory = ''
banknetworkgrouping = ''
swiftcode = 'SABMGB2LACP'
ismarkedfordeletion = ''
).
MODIFY ENTITIES OF i_banktp
ENTITY bank
CREATE FIELDS ( bankcountry
bankinternalid
longbankname
longbankbranch
banknumber
bankcategory
banknetworkgrouping
swiftcode
IsMarkedForDeletion
WITH VALUE #( (
%cid = 'cid1'
bankcountry = create_bank-bankcountry
bankinternalid = create_bank-bankinternalid
longbankname = create_bank-longbankname
longbankbranch = create_bank-longbankbranch
banknumber = create_bank-banknumber
bankcategory = create_bank-bankcategory
banknetworkgrouping = create_bank-banknetworkgrouping
SWIFTCode = create_bank-SWIFTCode
IsMarkedForDeletion = create_bank-IsMarkedForDeletion
) )
MAPPED DATA(mapped)
REPORTED DATA(reported)
FAILED DATA(failed).
LOOP AT reported-bank INTO DATA(reported_error_1).
DATA(exc_create_bank) = cl_message_helper=>get_longtext_for_message(
EXPORTING
text = reported_error_1-%msg
).
out->write( |error { exc_create_bank } | ).
ENDLOOP.
COMMIT ENTITIES
RESPONSE OF i_banktp
FAILED DATA(failed_commit)
REPORTED DATA(reported_commit).
LOOP AT reported_commit-bank INTO DATA(reported_error_2).
DATA(exc_create_bank2) = cl_message_helper=>get_longtext_for_message(
EXPORTING
text = reported_error_2-%msg
).
out->write( |error { exc_create_bank2 } | ).
ENDLOOP.
IF reported_commit-bank IS INITIAL.
COMMIT WORK.
SELECT SINGLE * FROM I_Bank_2 WHERE BankInternalID = @bank_id_number INTO @DATA(my_bank).
out->write( |my new bank { my_bank-BankName } { my_bank-BankInternalID }| ).
ENDIF.
ENDMETHOD.
ENDCLASS.
Activate the class.
Added new Bank Name
We have learned about how to leverage API I_BANKTP in ABAP Cloud.
Ex.2 Behavior Extension
We will learn here ,how to add a validation, determination and side-effects to the
behavior of the RAP BO.
Add implementation code
extend behavior for Shop
{
validation zz_validateDeliverydate on save { create; field DeliveryDate; }
extend draft determine action Prepare
{
validation zz_validateDeliveryDate;
}
}
Activate it and Create behavior implementation
CLASS lhc_shop DEFINITION INHERITING FROM cl_abap_behavior_handler.
PUBLIC SECTION.
CONSTANTS state_area_check_delivery_date TYPE string VALUE
'CHECK_DELIVERYDATE' ##NO_TEXT.
PRIVATE SECTION.
METHODS zz_validateDeliverydate FOR VALIDATE ON SAVE
IMPORTING keys FOR Shop~zz_validateDeliverydate.
ENDCLASS.
CLASS lhc_shop IMPLEMENTATION.
METHOD zz_validateDeliverydate.
READ ENTITIES OF ZRAP630i_ShopTP_05e IN LOCAL MODE
ENTITY Shop
FIELDS ( DeliveryDate OverallStatus )
WITH CORRESPONDING #( keys )
RESULT DATA(onlineorders).
LOOP AT onlineorders INTO DATA(onlineorder).
APPEND VALUE #( %tky = onlineorder-%tky
%state_area = state_area_check_delivery_date )
TO reported-shop.
DATA(deliverydate) = onlineorder-DeliveryDate -
cl_abap_context_info=>get_system_date( ).
IF onlineorder-deliverydate IS INITIAL .
APPEND VALUE #( %tky = onlineorder-%tky ) TO failed-shop.
APPEND VALUE #( %tky = onlineorder-%tky
%state_area = state_area_check_delivery_date
%msg = new_message_with_text(
severity = if_abap_behv_message=>severity-error
text = 'delivery period cannot be initial'
))
TO reported-shop.
ENDIF.
ENDLOOP.
ENDMETHOD.
ENDCLASS.
I have used “05E” as my identifier for this exercise.
Open the service binding
Preview the shop RAP BO
Click “create”
Then Select “OrderItem”
But do not select “Delivery Date” and create it.
You will get below message .That is the end of this exercise.
Ex.3 Extend the behavior definition with determination.
Select the behavior
Add determination
METHOD ZZ_setOverallStatus.
DATA update_bo TYPE TABLE FOR UPDATE ZRAP630i_ShopTP_05E\\Shop.
DATA update_bo_line TYPE STRUCTURE FOR UPDATE ZRAP630i_ShopTP_05E\\Shop .
READ ENTITIES OF ZRAP630I_ShopTP_05E IN LOCAL MODE
ENTITY Shop
ALL FIELDS " ( OrderItemPrice OrderID )
WITH CORRESPONDING #( keys )
RESULT DATA(OnlineOrders)
FAILED DATA(onlineorders_failed)
REPORTED DATA(onlineorders_reported).
DATA(product_value_help) = NEW zrap630_cl_vh_product_05E( ).
data(products) = product_value_help->get_products( ).
LOOP AT onlineorders INTO DATA(onlineorder).
update_bo_line-%tky = onlineorder-%tky.
SELECT SINGLE * FROM @products as hugo
WHERE Product = @onlineorder-OrderedItem INTO @data(product).
update_bo_line-OrderItemPrice = product-Price.
update_bo_line-CurrencyCode = product-Currency.
IF product-Price > 1000.
update_bo_line-OverallStatus = 'Awaiting approval'.
ELSE.
update_bo_line-OverallStatus = 'Automatically approved'.
ENDIF.
APPEND update_bo_line TO update_bo.
ENDLOOP.
MODIFY ENTITIES OF zrap630i_shoptp_05E IN LOCAL MODE
ENTITY Shop
UPDATE FIELDS (
OverallStatus
CurrencyCode
OrderItemPrice
)
WITH update_bo
REPORTED DATA(update_reported).
reported = CORRESPONDING #( DEEP update_reported ).
ENDMETHOD.
Final Output
On the draft ,overall status is updated
Ex.2.3: Extend the behavior definition with side effects
Add the code for side effects
Below 1000 Euro, overall is status updated with “Automatically approved”
Now more than 1000 Euro, the overall status is updated with “Awaiting approval”
Now we have extended the behavior of the base RAP BO
Ex.3 Extend the CDS data model of the extensible RAP BO
Add new field
Test the extension Field
Ex:4 Extend the business object with an action
Create an abstract entity
Add abstract entity code
@EndUserText.label: 'Pass feedback as a parameter'
define abstract entity ZRAP630_A_Feedback_05E
{
feedback : abap.char(100);
}
Extend the behavior definition
Add action code
field ( readonly ) zzfeedbackzaa;
action ( authorization : global, features : instance ) ZZ_ProvideFeedback parameter
ZRAP630_A_Feedback_05e result [1] $self;
Add method implementation
Add the feedback implementation
MODIFY ENTITIES OF ZRAP630I_ShopTP_05E IN LOCAL MODE
ENTITY Shop
UPDATE FIELDS ( zzfeedbackzaa )
WITH VALUE #( FOR key IN keys ( %tky = key-%tky
zzfeedbackzaa = key-%param-feedback ) ).
"Read the changed data for action result
READ ENTITIES OF ZRAP630I_ShopTP_05e IN LOCAL MODE
ENTITY Shop
ALL FIELDS WITH
CORRESPONDING #( keys )
RESULT DATA(result_read).
"return result entities
result = VALUE #( FOR order_2 IN result_read ( %tky = order_2-%tky
%param = order_2 ) ).
Ex 4.4 Extend the projection BDEF
Add Action code
use action ZZ_ProvideFeedback;
Add UI Annotation
extend view entity ZRAP630C_ShopTP_05E with
{
@EndUserText.label: 'Feedback'
@UI.dataFieldDefault: [{hidden: false}]
@UI.identification: [{hidden: false},
{type: #FOR_ACTION, dataAction: 'ZZ_ProvideFeedback', label: 'Update feedback' } ]
@UI.lineItem: [{hidden: false},
{type: #FOR_ACTION, dataAction: 'ZZ_ProvideFeedback', label: 'Update feedback' } ]
Shop.ZZFEEDBACKZAA as ZZFEEDBACKZAA
}
Final Output update Feedback