Professional Documents
Culture Documents
openSAP A4h1 Week 4 Source Code
openSAP A4h1 Week 4 Source Code
https://open.sap.com/courses/a4h1
Version 1 - 15.10.2014
2
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_AMDP_SIMPLE_00
CLASS zcl_amdp_simple_00 DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
INTERFACES: if_amdp_marker_hdb.
TYPES:
BEGIN OF ty_customer_info,
customer_id TYPE snwd_bpa-bp_id,
customer_name TYPE snwd_bpa-company_name,
currency_code TYPE snwd_so-currency_code,
total_gross_amount TYPE snwd_so-gross_amount,
undefined TYPE i,
END OF ty_customer_info ,
METHODS get_customer_infos
EXPORTING
VALUE(et_customer_info) TYPE tt_customer_info
RAISING cx_amdp_error.
ENDCLASS.
3
CLASS ZCL_AMDP_SIMPLE_00 IMPLEMENTATION.
METHOD get_customer_infos
by DATABASE PROCEDURE
FOR HDB
LANGUAGE SQLSCRIPT
options read-ONLY
using snwd_bpa snwd_so.
et_customer_info =
SELECT BP_ID as customer_id,
COMPANY_NAME as customer_name,
SO.CURRENCY_CODE,
SUM( SO.GROSS_AMOUNT )
as TOTAL_GROSS_AMOUNT
,
( 1 / :lv_zero ) as undefined
FROM SNWD_BPA AS BPA
INNER JOIN SNWD_SO AS SO
ON SO.BUYER_GUID = BPA.NODE_KEY
GROUP BY BP_ID, COMPANY_NAME, SO.CURRENCY_CODE
ORDER BY BP_ID;
ENDMETHOD.
ENDCLASS.
ZCL_A4H1_AMDP_BADI
CLASS zcl_a4h1_amdp_badi DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
INTERFACES if_amdp_marker_hdb.
4
INTERFACES if_badi_interface .
INTERFACES zif_a4h1_amdp_badi .
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
METHOD zif_a4h1_amdp_badi~get_customer_infos
BY DATABASE PROCEDURE
FOR HDB
LANGUAGE SQLSCRIPT
OPTIONS READ-ONLY
USING snwd_so snwd_bpa.
et_customer_info =
SELECT BP_ID as customer_id,
COMPANY_NAME as customer_name,
SO.CURRENCY_CODE,
SUM( SO.GROSS_AMOUNT )
as TOTAL_GROSS_AMOUNT
FROM SNWD_BPA AS BPA
INNER JOIN SNWD_SO AS SO
ON SO.BUYER_GUID = BPA.NODE_KEY
GROUP BY BP_ID, COMPANY_NAME, SO.CURRENCY_CODE
ORDER BY BP_ID;
ENDMETHOD.
ENDCLASS.
ZCL_A4H1_BADI_IMPL_01
CLASS zcl_a4h1_badi_impl_01 DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
INTERFACES if_amdp_marker_hdb.
INTERFACES if_badi_interface .
INTERFACES zif_a4h1_amdp_badi .
PROTECTED SECTION.
5
PRIVATE SECTION.
ENDCLASS.
METHOD zif_a4h1_amdp_badi~get_customer_infos
BY DATABASE PROCEDURE
FOR HDB
LANGUAGE SQLSCRIPT
OPTIONS READ-ONLY
USING snwd_so snwd_bpa.
et_customer_info =
SELECT BP_ID as customer_id,
COMPANY_NAME as customer_name,
SO.CURRENCY_CODE,
SUM( SO.GROSS_AMOUNT )
as TOTAL_GROSS_AMOUNT
FROM SNWD_BPA AS BPA
INNER JOIN SNWD_SO AS SO
ON SO.BUYER_GUID = BPA.NODE_KEY
GROUP BY BP_ID, COMPANY_NAME, SO.CURRENCY_CODE
ORDER BY BP_ID;
ENDMETHOD.
ENDCLASS.
ZCL_A4H1_BADI_IMPL_02
CLASS zcl_a4h1_badi_impl_02 DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
INTERFACES if_amdp_marker_hdb.
INTERFACES if_badi_interface .
INTERFACES zif_a4h1_amdp_badi .
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
6
CLASS zcl_a4h1_badi_impl_02 IMPLEMENTATION.
METHOD zif_a4h1_amdp_badi~get_customer_infos
BY DATABASE PROCEDURE
FOR HDB
LANGUAGE SQLSCRIPT
OPTIONS READ-ONLY
USING snwd_so snwd_bpa.
et_customer_info =
SELECT BP_ID as customer_id,
COMPANY_NAME as customer_name,
SO.CURRENCY_CODE,
SUM( SO.GROSS_AMOUNT )
as TOTAL_GROSS_AMOUNT
FROM SNWD_BPA AS BPA
INNER JOIN SNWD_SO AS SO
ON SO.BUYER_GUID = BPA.NODE_KEY
GROUP BY BP_ID, COMPANY_NAME, SO.CURRENCY_CODE
HAVING SUM( SO.GROSS_AMOUNT ) > 10000000
ORDER BY BP_ID;
ENDMETHOD.
ENDCLASS.
ZCL_A4H1_CALL_AMDP_BADI
CLASS zcl_a4h1_call_amdp_badi DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
INTERFACES: if_amdp_marker_hdb.
class-METHODS:
call_badi
EXPORTING value(et_customer_info) type
zif_a4h1_amdp_badi=>tt_customer_info.
PROTECTED SECTION.
PRIVATE SECTION.
7
ENDCLASS.
METHOD call_badi
by DATABASE PROCEDURE
FOR HDB
LANGUAGE SQLSCRIPT
options read-only
using ZA4H1_AMDP_BADI=>get_customer_infos.
call "ZA4H1_AMDP_BADI=>GET_CUSTOMER_INFOS"(
et_customer_info => et_customer_info );
ENDMETHOD.
ENDCLASS.
ZCL_A4H1_E2E_CUST_OPEN_INVOICE
CLASS zcl_a4h1_e2e_cust_open_invoice DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
INTERFACES: if_amdp_marker_hdb.
TYPES:
tt_cust_info TYPE STANDARD TABLE OF
za4h1_e2e_customer_info WITH KEY customer_id,
tt_inv_info TYPE STANDARD TABLE OF
za4h1_e2e_invoice_info WITH KEY customer_id.
METHODS:
get_customer_info
IMPORTING
VALUE(iv_client) TYPE symandt
VALUE(iv_bupaid)
TYPE za4h1_e2e_customer_info-customer_id
EXPORTING
VALUE(et_bpinfo) TYPE tt_cust_info,
get_invoice_info
IMPORTING
8
VALUE(iv_client) TYPE symandt
VALUE(iv_bupaid)
TYPE za4h1_e2e_customer_info-customer_id
EXPORTING
VALUE(et_invinfo) TYPE tt_inv_info.
PROTECTED SECTION.
PRIVATE SECTION.
TYPES:
BEGIN OF ty_rel_items,
client TYPE snwd_so_inv_item-client,
inv_i_guid TYPE snwd_so_inv_item-node_key,
inv_guid TYPE snwd_so_inv_head-node_key,
buyer_guid TYPE snwd_bpa-node_key,
customer_id TYPE snwd_bpa-bp_id,
invoice_date TYPE snwd_so_inv_head-created_at,
gross_amount
TYPE snwd_so_inv_item-gross_amount,
currency_code_conv
TYPE snwd_so_inv_item-currency_code,
END OF ty_rel_items,
tt_rel_items TYPE
STANDARD TABLE OF ty_rel_items.
METHODS:
get_curr_conv_relevant_items
IMPORTING
VALUE(iv_client) TYPE symandt
VALUE(iv_bupaid)
TYPE za4h1_e2e_customer_info-customer_id
EXPORTING
VALUE(et_conv_items) TYPE tt_rel_items.
ENDCLASS.
9
LANGUAGE SQLSCRIPT
OPTIONS READ-ONLY
USING snwd_bpa snwd_so_inv_head snwd_so_inv_item.
10
reference_date =
:lv_today,
client = :iv_client ],
[gross_amount] ) ;
ENDMETHOD.
call
"ZCL_A4H1_E2E_CUST_OPEN_INVOICE=>GET_CURR_CONV_RELEVANT_ITEMS"
(
iv_client => :iv_client,
iv_bupaid => :iv_bupaid,
et_conv_items => :lt_converted_items );
ENDMETHOD.
11
METHOD get_customer_info BY DATABASE PROCEDURE
FOR HDB
LANGUAGE SQLSCRIPT
OPTIONS READ-ONLY
USING snwd_bpa snwd_ad
zcl_a4h1_e2e_cust_open_invoice=>get_curr_conv_relevant_items.
call
"ZCL_A4H1_E2E_CUST_OPEN_INVOICE=>GET_CURR_CONV_RELEVANT_ITEMS"
(
iv_client => :iv_client,
iv_bupaid => :iv_bupaid,
et_conv_items => :lt_converted_items );
ENDMETHOD.
ENDCLASS.
ZCL_ZA4H1_E2E_CUST_INF_DPC_EXT
CLASS zcl_za4h1_e2e_cust_inf_dpc_ext DEFINITION
PUBLIC
12
INHERITING FROM zcl_za4h1_e2e_cust_inf_dpc
CREATE PUBLIC .
PUBLIC SECTION.
PROTECTED SECTION.
METHODS invoiceinfos_get_entityset REDEFINITION.
METHODS customerinfos_get_entity REDEFINITION.
PRIVATE SECTION.
ENDCLASS.
METHOD invoiceinfos_get_entityset.
DATA ls_cust_classification TYPE
zcl_za4h1_e2e_cust_inf_mpc=>ts_customerclassification.
"Entity can only be accessed via the navigation property
ToInvoiceInfo
"of entity type CustomerClassification and if the key
CustomerId is provided
IF iv_source_name <>
zcl_za4h1_e2e_cust_inf_mpc=>gc_customerclassification.
RAISE EXCEPTION TYPE /iwbep/cx_mgw_tech_exception.
ENDIF.
io_tech_request_context->get_converted_source_keys(
IMPORTING
es_key_values = ls_cust_classification ).
13
et_invinfo = DATA(lt_entityset)
).
ENDMETHOD.
METHOD customerinfos_get_entity.
DATA ls_cust_classification TYPE
zcl_za4h1_e2e_cust_inf_mpc=>ts_customerclassification.
"Entity can only be accessed via the navigation property
ToCustomerInfo
"of entity type CustomerClassification and if the key
CustomerId is provided
IF iv_source_name <>
zcl_za4h1_e2e_cust_inf_mpc=>gc_customerclassification.
RAISE EXCEPTION TYPE /iwbep/cx_mgw_tech_exception.
ENDIF.
io_tech_request_context->get_converted_source_keys(
IMPORTING
es_key_values = ls_cust_classification ).
14
RAISE EXCEPTION TYPE /iwbep/cx_mgw_busi_exception
EXPORTING
message_unlimited = | Problem in Customer Info; {
lines( lt_entity ) } <> 1 |
textid =
/iwbep/cx_mgw_busi_exception=>business_error_unlimited.
ENDIF.
ENDCLASS.
ABAP PROGRAMS
ZR_ADBC_PROC_CALL
REPORT zr_adbc_proc_call.
"lot of type definitions
TYPES:
BEGIN OF ty_overview,
value TYPE string,
table TYPE string,
END OF ty_overview,
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,
15
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 .
lv_stmt = | CALL
"SAPHANAABAP"."ZCL_DEMO_PAID_ON_DATE_AMDP=>PAID_ON_DATE" | &&
| ( '20140912', NULL, NULL, NULL
) WITH OVERVIEW |.
TRY.
lo_stmt = NEW cl_sql_statement( ).
lo_res = lo_stmt->execute_query( lv_stmt ).
16
lo_res_tab->set_param_table( REF #( lt_inv_item ) ).
ELSEIF ls_overview-value CS 'ET_INVOICE_HEAD'.
"prepare the result set
lo_res_tab->set_param_table( REF #( lt_inv_head ) ).
ELSEIF ls_overview-value CS 'ET_CUSTOMER_INFO'.
"prepare the result set
lo_res_tab->set_param_table( REF #( lt_cust_info ) ).
ENDIF.
"fetch the content of the database tables into the
internal tables
lo_res_tab->next_package( ).
ENDLOOP.
lo_res->close( ).
TYPES:
BEGIN OF ty_res,
bp_id TYPE snwd_bpa-bp_id,
company_name TYPE snwd_bpa-company_name,
currency_code TYPE snwd_so-currency_code,
total_gross_amount TYPE snwd_so-gross_amount,
END OF ty_res.
17
| INNER JOIN SNWD_SO AS SO
| &&
| ON SO.BUYER_GUID = BPA.NODE_KEY
| &&
| GROUP BY BP_ID, COMPANY_NAME, SO.CURRENCY_CODE
|.
TRY.
"1. create statement object
lo_stmt = NEW cl_sql_statement( ).
"2. execute the query
lo_res = lo_stmt->execute_query( lv_stmt ).
"3. set the output parameter
lo_res->set_param_table( REF #( lt_result ) ).
"4. fetch the result
lo_res->next_package( ).
"5. release the resources
lo_res->close( ).
cl_demo_output=>display_data( lt_result ).
ZR_AMDP_01_SIMPLE_CALL
REPORT zr_amdp_01_simple_call.
TRY.
lo_amdp->get_customer_infos(
IMPORTING
et_customer_info = DATA(lt_result) ).
cl_demo_output=>display_data( lt_result ).
18
/ |{ lx->sql_message }|.
ENDTRY.
ZR_AMDP_BADI_CALL
REPORT zr_amdp_badi_call.
INTERFACES if_badi_interface .
TYPES:
BEGIN OF ty_customer_info,
customer_id TYPE snwd_bpa-bp_id,
customer_name TYPE snwd_bpa-company_name,
currency_code TYPE snwd_so-currency_code,
total_gross_amount TYPE snwd_so-gross_amount,
END OF ty_customer_info ,
19
tt_customer_info TYPE STANDARD TABLE OF ty_customer_info.
METHODS get_customer_infos
EXPORTING
VALUE(et_customer_info) TYPE tt_customer_info
RAISING cx_amdp_error .
ENDINTERFACE.
20
www.sap.com