Professional Documents
Culture Documents
https://open.sap.com/courses/a4h1
Version 1 - 15.10.2014
Contents
CDS DDL Sources............................................................................................................................................ 3
ZDDLS_CDS_40_ANNOTATION ...................................................................................................................... 4
ABAP Classes.................................................................................................................................................. 5
ZCL_DEMO_PAID_ON_DATE ......................................................................................................................... 6
ZCL_DEMO_PAID_ON_DATE_AMDP ............................................................................................................. 9
ABAP Programs ............................................................................................................................................ 11
ZR_HELLO_WORLD ...................................................................................................................................... 12
ZR_EPM_SET_INVOICE_PAID....................................................................................................................... 13
ZR_PAID_ON_DATE ..................................................................................................................................... 18
ZR_PAID_ON_DATE_AMDP ......................................................................................................................... 19
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
CLASS zcl_demo_paid_on_date DEFINITION
PUBLIC
CREATE PUBLIC .
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)
EXPORTING
VALUE(et_invoice_header)
VALUE(et_invoice_item)
VALUE(et_customer_info)
TYPE d
TYPE tt_invoice_header
TYPE tt_invoice_item
TYPE tt_customer_info .
ENDCLASS.
METHOD paid_on_date.
"! selection of invoices paid on a specified date
"! plus business partner and product information
DATA ls_invoice_head TYPE ty_invoice_header.
DATA lt_invoice_item TYPE tt_invoice_item.
DATA lt_customer_info TYPE tt_customer_info.
DATA lv_payment_date_min TYPE timestamp.
DATA lv_payment_date_max TYPE timestamp.
CONVERT DATE iv_payment_date TIME '0000' INTO TIME STAMP
lv_payment_date_min TIME ZONE 'UTC'.
CONVERT DATE iv_payment_date TIME '2359' INTO TIME STAMP
lv_payment_date_max TIME ZONE 'UTC'.
" First we retrieve all invoice header
" which were paid on the requested date
SELECT
node_key
AS invoice_guid
created_at
AS created_at
changed_at
AS paid_at
buyer_guid
FROM
snwd_so_inv_head
INTO ls_invoice_head
WHERE
payment_status = 'P'
ZCL_DEMO_PAID_ON_DATE_AMDP
CLASS zcl_demo_paid_on_date_amdp DEFINITION
PUBLIC
INHERITING FROM zcl_demo_paid_on_date
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
INTERFACES if_amdp_marker_hdb.
METHODS paid_on_date REDEFINITION.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
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 );
ABAP Programs
ZR_HELLO_WORLD
REPORT zr_hello_world.
DATA lv_string TYPE string.
DATA lv_name TYPE sy-uname.
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.
CLASS lcl_set_invoice_paid DEFINITION CREATE PRIVATE.
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.
CLASS lcl_set_invoice_paid IMPLEMENTATION.
METHOD execute.
DATA(mo_message_buffer) =
cl_epm_service_facade=>get_message_buffer( ).
DATA mo_invoice TYPE REF TO if_epm_so_invoice.
mo_invoice ?= cl_epm_service_facade=>get_bo(
if_epm_so_invoice=>gc_bo_name ).
" read the invoices for this bupa
mo_invoice->if_epm_so_invoice_header~query_by_header(
EXPORTING it_sel_par_buyer_ids = VALUE #( ( sign = 'I'
option = 'EQ' low = iv_bupa_id ) )
iv_max_rows = 99999
IMPORTING et_data = DATA(lt_invoices) ).
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.
" mark selected as paid
mo_invoice->if_epm_so_invoice_header~action_mark_as_paid(
EXPORTING
it_node_keys
= lt_invoice_key
ii_message_buffer
= mo_message_buffer
IMPORTING
et_node_key_info
= DATA(lt_node_key_info)
).
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.
CLASS ltc_invoice_paid IMPLEMENTATION.
METHOD setup.
lcl_set_invoice_paid=>mv_test_mode = abap_true.
ENDMETHOD.
METHOD do_test.
##no_text
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)
).
cl_abap_unit_assert=>assert_initial( act = lv_open ).
cl_abap_unit_assert=>assert_not_initial( act = lt_so ).
ENDMETHOD.
METHOD teardown.
lcl_set_invoice_paid=>mv_test_mode = abap_false.
ROLLBACK WORK.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
lcl_set_invoice_paid=>execute(
EXPORTING
iv_bupa_id = bupa
iv_count
= num
IMPORTING
ev_open
= DATA(lv_open)
et_so
= DATA(lt_so)
).
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 p_date TYPE d VALUE '20140912'.
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
IMPORTING
et_invoice_header
DATA(lt_invoice_head)
et_invoice_item
DATA(lt_invoice_item)
et_customer_info
DATA(lt_customer_info) ).
= p_date
=
=
=
DATA(t2) = lo_timer->get_runtime( ).
DATA(elapsed_time) = ( t2 - t1 ) / 1000.
cl_demo_output=>next_section( title = |Runtime (ABAP): {
elapsed_time } ms.| ).
cl_demo_output=>write_data( name = 'Customer Info' value =
lt_customer_info ).
cl_demo_output=>display( ).
ZR_PAID_ON_DATE_AMDP
PROGRAM zr_paid_on_date_amdp.
DATA p_date TYPE d VALUE '20140912'.
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
IMPORTING
et_invoice_header
DATA(lt_invoice_head)
et_invoice_item
DATA(lt_invoice_item)
et_customer_info
DATA(lt_customer_info) ).
= p_date
=
=
=
DATA(t2) = lo_timer->get_runtime( ).
DATA(elapsed_time) = ( t2 - t1 ) / 1000.
cl_demo_output=>next_section( title = |Runtime (AMDP): {
elapsed_time } ms.| ).
cl_demo_output=>write_data( name = 'Customer Info' value =
lt_customer_info ).
cl_demo_output=>display( ).
www.sap.com