ABAP Development For SAP HANA: Source Code of Week 1
ABAP Development For SAP HANA: Source Code of Week 1
https://open.sap.com/courses/a4h1
Version 1 - 15.10.2014
1
Contents
CDS DDL Sources..........................................................................................................................................4
ZDDLS_CDS_40_ANNOTATION.....................................................................................................................5
ABAP Classes................................................................................................................................................6
ZCL_DEMO_PAID_ON_DATE........................................................................................................................7
ZCL_DEMO_PAID_ON_DATE_AMDP..........................................................................................................11
ABAP Programs..........................................................................................................................................13
ZR_HELLO_WORLD.....................................................................................................................................14
ZR_EPM_SET_INVOICE_PAID.....................................................................................................................15
ZR_PAID_ON_DATE....................................................................................................................................20
ZR_PAID_ON_DATE_AMDP........................................................................................................................21
CDS DDL Sources
ZDDLS_CDS_40_ANNOTATION
@AbapCatalog.sqlViewName: 'ZDDLS_CDS_40'
@ClientDependent: true
@AbapCatalog.Buffering.status: #SWITCHED_OFF
define view zcdsv_annotation_simple as select from snwd_so
{
key so_id as customer_id,
@Semantics.currencyCode: true
currency_code,
@Semantics.amount.currencyCode: 'currency_code'
gross_amount
}
ABAP Classes
ZCL_DEMO_PAID_ON_DATE
PUBLIC SECTION.
TYPES:
BEGIN OF ty_invoice_header,
invoice_guid TYPE snwd_so_inv_head-node_key,
created_at TYPE snwd_so_inv_head-created_at,
paid_at TYPE snwd_so_inv_head-changed_at,
buyer_guid TYPE snwd_so_inv_head-buyer_guid,
END OF ty_invoice_header .
TYPES:
BEGIN OF ty_invoice_item,
item_guid TYPE snwd_so_inv_item-node_key,
invoice_guid TYPE snwd_so_inv_head-node_key,
product_guid TYPE snwd_so_inv_item-product_guid,
gross_amount TYPE snwd_so_inv_item-gross_amount,
currency_code TYPE snwd_so_inv_item-currency_code,
END OF ty_invoice_item .
TYPES:
BEGIN OF ty_customer_info,
customer_guid TYPE snwd_bpa-node_key,
customer_id TYPE snwd_bpa-bp_id,
customer_name TYPE snwd_bpa-company_name,
country TYPE snwd_ad-country,
postal_code TYPE snwd_ad-postal_code,
city TYPE snwd_ad-city,
END OF ty_customer_info .
TYPES:
tt_invoice_header TYPE STANDARD TABLE OF
ty_invoice_header WITH KEY invoice_guid .
TYPES:
tt_invoice_item TYPE STANDARD TABLE OF ty_invoice_item .
TYPES:
tt_customer_info TYPE STANDARD TABLE OF ty_customer_info
.
METHODS paid_on_date
IMPORTING
VALUE(iv_payment_date) TYPE d
EXPORTING
VALUE(et_invoice_header) TYPE tt_invoice_header
VALUE(et_invoice_item) TYPE tt_invoice_item
VALUE(et_customer_info) TYPE tt_customer_info .
ENDCLASS.
METHOD paid_on_date.
"! selection of invoices paid on a specified date
"! plus business partner and product information
CLEAR lt_invoice_item.
CLEAR lt_customer_info.
"remove duplicates
SORT et_customer_info BY customer_name.
DELETE ADJACENT DUPLICATES FROM et_customer_info.
ENDMETHOD.
ENDCLASS.
ZCL_DEMO_PAID_ON_DATE_AMDP
PUBLIC SECTION.
INTERFACES if_amdp_marker_hdb.
METHODS paid_on_date REDEFINITION.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
et_invoice_header = SELECT
node_key AS invoice_guid,
created_at AS created_at,
changed_at AS paid_at,
buyer_guid
FROM
snwd_so_inv_head
WHERE
payment_status = 'P'
AND LEFT(changed_at,8) = :iv_payment_date;
et_invoice_item =
SELECT
node_key AS item_guid,
parent_key AS invoice_guid,
product_guid,
gross_amount,
currency_code
FROM snwd_so_inv_item
WHERE parent_key in ( select invoice_guid
from :et_invoice_header );
ENDMETHOD.
ENDCLASS.
ABAP Programs
ZR_HELLO_WORLD
REPORT zr_hello_world.
lv_name = cl_abap_syst=>get_user_name( ).
lv_string = |Hello { lv_name }, welcome to the ABAP
Development for SAP HANA!|.
WRITE: lv_string.
ZR_EPM_SET_INVOICE_PAID
REPORT zr_epm_set_invoice_paid.
PUBLIC SECTION.
CLASS-DATA mv_test_mode TYPE abap_bool.
CLASS-METHODS execute
IMPORTING
iv_bupa_id TYPE snwd_bpa-bp_id
iv_count TYPE i
EXPORTING
ev_open TYPE i
et_so TYPE if_epm_so_header=>tt_node_data
RAISING
cx_epm_api_exception
cx_epm_system_exception.
ENDCLASS.
METHOD execute.
DATA(mo_message_buffer) =
cl_epm_service_facade=>get_message_buffer( ).
IF <ls_invoice>-payment_status = space.
APPEND <ls_invoice>-node_key TO lt_invoice_key.
INSERT <ls_invoice> INTO TABLE lt_paid_invoice.
lv_count = lv_count - 1.
ENDIF.
ENDLOOP.
ev_open = lv_count.
IF lv_count > 0.
RETURN.
ENDIF.
DATA(lt_messages) = mo_message_buffer->get_messages( ).
LOOP AT lt_messages ASSIGNING FIELD-SYMBOL(<ls_message>).
DATA(lv_text) = <ls_message>->to_string( ).
WRITE: / lv_text.
ENDLOOP.
cl_epm_service_facade=>save(
iv_suppress_commit = mv_test_mode
ii_message_buffer = mo_message_buffer ).
lt_messages = mo_message_buffer->get_messages( ).
LOOP AT lt_messages ASSIGNING <ls_message>.
lv_text = <ls_message>->to_string( ).
WRITE: / lv_text.
ENDLOOP.
mo_invoice-
>if_epm_so_invoice_header~navigate_to_sales_order(
EXPORTING it_source_node_keys = lt_invoice_key
IMPORTING et_data = et_so
).
ENDMETHOD.
ENDCLASS.
PRIVATE SECTION.
METHODS setup.
METHODS teardown.
METHODS do_test FOR TESTING RAISING cx_epm_api_exception
cx_epm_system_exception.
ENDCLASS.
METHOD setup.
lcl_set_invoice_paid=>mv_test_mode = abap_true.
ENDMETHOD.
METHOD do_test.
DATA lv_bpa TYPE snwd_bpa-bp_id.
cl_abap_unit_assert=>assert_subrc(
msg = 'no corresponding data in the DB' ##no_text
level = if_aunit_constants=>tolerable
quit = if_aunit_constants=>method ).
lcl_set_invoice_paid=>execute(
EXPORTING
iv_bupa_id = lv_bpa
iv_count = 1
IMPORTING
ev_open = DATA(lv_open)
et_so = DATA(lt_so)
).
ENDMETHOD.
METHOD teardown.
lcl_set_invoice_paid=>mv_test_mode = abap_false.
ROLLBACK WORK.
ENDMETHOD.
ENDCLASS.
IF lv_open > 0.
WRITE: / 'not enough unpaid invoices available'(001).
ELSE.
WRITE: / 'sales orders marked as paid:'(002).
LOOP AT lt_so ASSIGNING FIELD-SYMBOL(<ls_paid>).
WRITE: / <ls_paid>-so_id, <ls_paid>-gross_amount,
<ls_paid>-currency_code.
ENDLOOP.
ENDIF.
ZR_PAID_ON_DATE
PROGRAM zr_paid_on_date.
DATA(lo_timer) = cl_abap_runtime=>create_hr_timer( ).
DATA(lo_info_list) = NEW zcl_demo_paid_on_date( ).
DATA(t1) = lo_timer->get_runtime( ).
lo_info_list->paid_on_date(
EXPORTING
iv_payment_date = p_date
IMPORTING
et_invoice_header =
DATA(lt_invoice_head)
et_invoice_item =
DATA(lt_invoice_item)
et_customer_info =
DATA(lt_customer_info) ).
DATA(t2) = lo_timer->get_runtime( ).
DATA(elapsed_time) = ( t2 - t1 ) / 1000.
cl_demo_output=>display( ).
ZR_PAID_ON_DATE_AMDP
PROGRAM zr_paid_on_date_amdp.
DATA(lo_timer) = cl_abap_runtime=>create_hr_timer( ).
DATA(lo_info_list) = NEW zcl_demo_paid_on_date_amdp( ).
DATA(t1) = lo_timer->get_runtime( ).
lo_info_list->paid_on_date(
EXPORTING
iv_payment_date = p_date
IMPORTING
et_invoice_header =
DATA(lt_invoice_head)
et_invoice_item =
DATA(lt_invoice_item)
et_customer_info =
DATA(lt_customer_info) ).
DATA(t2) = lo_timer->get_runtime( ).
DATA(elapsed_time) = ( t2 - t1 ) / 1000.
cl_demo_output=>display( ).
www.sap.com