You are on page 1of 9

class ZCL_ZJAN_2021_DPC_EXT definition

public
inheriting from ZCL_ZJAN_2021_DPC
create public .

public section.
protected section.

methods PRODUCTSET_GET_ENTITY
redefinition .
methods PRODUCTSET_GET_ENTITYSET
redefinition .
methods SUPPLIERSET_GET_ENTITY
redefinition .
methods SUPPLIERSET_GET_ENTITYSET
redefinition .
methods ORDERITEMSET_GET_ENTITYSET
redefinition .
private section.
ENDCLASS.

CLASS ZCL_ZJAN_2021_DPC_EXT IMPLEMENTATION.

*
<SIGNATURE>------------------------------------------------------------------------
---------------+
* | Instance Protected Method ZCL_ZJAN_2021_DPC_EXT->ORDERITEMSET_GET_ENTITYSET
*
+----------------------------------------------------------------------------------
---------------+
* | [--->] IV_ENTITY_NAME TYPE STRING
* | [--->] IV_ENTITY_SET_NAME TYPE STRING
* | [--->] IV_SOURCE_NAME TYPE STRING
* | [--->] IT_FILTER_SELECT_OPTIONS TYPE /IWBEP/T_MGW_SELECT_OPTION
* | [--->] IS_PAGING TYPE /IWBEP/S_MGW_PAGING
* | [--->] IT_KEY_TAB TYPE /IWBEP/T_MGW_NAME_VALUE_PAIR
* | [--->] IT_NAVIGATION_PATH TYPE /IWBEP/T_MGW_NAVIGATION_PATH
* | [--->] IT_ORDER TYPE /IWBEP/T_MGW_SORTING_ORDER
* | [--->] IV_FILTER_STRING TYPE STRING
* | [--->] IV_SEARCH_STRING TYPE STRING
* | [--->] IO_TECH_REQUEST_CONTEXT TYPE REF TO
/IWBEP/IF_MGW_REQ_ENTITYSET(optional)
* | [<---] ET_ENTITYSET TYPE
ZCL_ZJAN_2021_MPC=>TT_ORDERITEM
* | [<---] ES_RESPONSE_CONTEXT TYPE
/IWBEP/IF_MGW_APPL_SRV_RUNTIME=>TY_S_MGW_RESPONSE_CONTEXT
* | [!CX!] /IWBEP/CX_MGW_BUSI_EXCEPTION
* | [!CX!] /IWBEP/CX_MGW_TECH_EXCEPTION
*
+----------------------------------------------------------------------------------
----</SIGNATURE>
method ORDERITEMSET_GET_ENTITYSET.

data : lv_product_id type BAPI_EPM_PRODUCT_id,


lt_range_prod TYPE TABLE OF BAPI_EPM_PRODUCT_ID_RANGE,
ls_bapi_max type BAPI_EPM_MAX_ROWS,
lt_ord_items type TABLE OF BAPI_EPM_SO_ITEM.

READ TABLE IT_KEY_TAB INTO data(ls_key) INDEX 1.


lv_product_id = ls_key-value.
ls_bapi_max-bapimaxrow = 5.

append VALUE #( sign = 'I' option = 'EQ' LOW = lv_product_id


) to lt_range_prod.

CALL FUNCTION 'BAPI_EPM_SO_GET_LIST'


EXPORTING
MAX_ROWS = ls_bapi_max
TABLES
* SOHEADERDATA =
SOITEMDATA = lt_ord_items
* SELPARAMSOID =
* SELPARAMBUYERNAME =
SELPARAMPRODUCTID = lt_range_prod
* RETURN =
.

ET_ENTITYSET = CORRESPONDING #( lt_ord_items ).

endmethod.

*
<SIGNATURE>------------------------------------------------------------------------
---------------+
* | Instance Protected Method ZCL_ZJAN_2021_DPC_EXT->PRODUCTSET_GET_ENTITY
*
+----------------------------------------------------------------------------------
---------------+
* | [--->] IV_ENTITY_NAME TYPE STRING
* | [--->] IV_ENTITY_SET_NAME TYPE STRING
* | [--->] IV_SOURCE_NAME TYPE STRING
* | [--->] IT_KEY_TAB TYPE /IWBEP/T_MGW_NAME_VALUE_PAIR
* | [--->] IO_REQUEST_OBJECT TYPE REF TO
/IWBEP/IF_MGW_REQ_ENTITY(optional)
* | [--->] IO_TECH_REQUEST_CONTEXT TYPE REF TO
/IWBEP/IF_MGW_REQ_ENTITY(optional)
* | [--->] IT_NAVIGATION_PATH TYPE /IWBEP/T_MGW_NAVIGATION_PATH
* | [<---] ER_ENTITY TYPE ZCL_ZJAN_2021_MPC=>TS_PRODUCT
* | [<---] ES_RESPONSE_CONTEXT TYPE
/IWBEP/IF_MGW_APPL_SRV_RUNTIME=>TY_S_MGW_RESPONSE_ENTITY_CNTXT
* | [!CX!] /IWBEP/CX_MGW_BUSI_EXCEPTION
* | [!CX!] /IWBEP/CX_MGW_TECH_EXCEPTION
*
+----------------------------------------------------------------------------------
----</SIGNATURE>
method PRODUCTSET_GET_ENTITY.

data: lv_prod_id type bapi_epm_product_id,


ls_header type BAPI_EPM_PRODUCT_HEADER,
lt_return type TABLE OF bapiret2,
ls_product type snwd_pd.

"Request
read TABLE IT_KEY_TAB INTO data(ls_key) INDEX 1.
lv_prod_id = ls_key-value.

IF lv_prod_id is INITIAL.
""Blast
raise EXCEPTION type /iwbep/cx_mgw_busi_exception
EXPORTING
* textid =
* previous =
* message_container =
* http_status_code =
* http_header_parameters =
* sap_note_id =
* msg_code =
* exception_category =
* entity_type =
* message =
message_unlimited = |Dude you passed me a wrong product id |
* filter_param =
* operation_no =
.
ENDIF.
"Processing
call FUNCTION 'BAPI_EPM_PRODUCT_GET_DETAIL'
EXPORTING
product_id = lv_prod_id " EPM: Product header data
of BOR object SEPM002
IMPORTING
headerdata = ls_header " EPM: Product header data
of BOR object SEPM002
TABLES
* conversion_factors = " EPM: Product conversion factor
data of BOR object SEPM002
return = lt_return " Return Parameter
.

IF lt_return is NOT INITIAL.

data(lo_msg_obj) = me->mo_context->get_message_container( ).

lo_msg_obj->add_messages_from_bapi(
EXPORTING
it_bapi_messages = lt_return " Return parameter
table
).

raise EXCEPTION type /iwbep/cx_mgw_busi_exception


EXPORTING
message_container = lo_msg_obj
.
ENDIF.
"Response
MOVE-CORRESPONDING ls_header to ER_ENTITY.

"1. Direct Select Query Approach


* select SINGLE * FROM snwd_pd into CORRESPONDING FIELDS OF @ls_product
* WHERE product_id = @lv_prod_id.
*
* select SINGLE * from snwd_bpa into @data(ls_bp) where node_key = @ls_product-
SUPPLIER_GUID.
*
* MOVE-CORRESPONDING ls_product to ER_ENTITY.
* ER_ENTITY-supplier_id = ls_bp-bp_id.
* ER_ENTITY-supplier_name = ls_bp-company_name.

* CHECK ls_key-name = 'PRODUCT_ID'.

endmethod.

*
<SIGNATURE>------------------------------------------------------------------------
---------------+
* | Instance Protected Method ZCL_ZJAN_2021_DPC_EXT->PRODUCTSET_GET_ENTITYSET
*
+----------------------------------------------------------------------------------
---------------+
* | [--->] IV_ENTITY_NAME TYPE STRING
* | [--->] IV_ENTITY_SET_NAME TYPE STRING
* | [--->] IV_SOURCE_NAME TYPE STRING
* | [--->] IT_FILTER_SELECT_OPTIONS TYPE /IWBEP/T_MGW_SELECT_OPTION
* | [--->] IS_PAGING TYPE /IWBEP/S_MGW_PAGING
* | [--->] IT_KEY_TAB TYPE /IWBEP/T_MGW_NAME_VALUE_PAIR
* | [--->] IT_NAVIGATION_PATH TYPE /IWBEP/T_MGW_NAVIGATION_PATH
* | [--->] IT_ORDER TYPE /IWBEP/T_MGW_SORTING_ORDER
* | [--->] IV_FILTER_STRING TYPE STRING
* | [--->] IV_SEARCH_STRING TYPE STRING
* | [--->] IO_TECH_REQUEST_CONTEXT TYPE REF TO
/IWBEP/IF_MGW_REQ_ENTITYSET(optional)
* | [<---] ET_ENTITYSET TYPE ZCL_ZJAN_2021_MPC=>TT_PRODUCT
* | [<---] ES_RESPONSE_CONTEXT TYPE
/IWBEP/IF_MGW_APPL_SRV_RUNTIME=>TY_S_MGW_RESPONSE_CONTEXT
* | [!CX!] /IWBEP/CX_MGW_BUSI_EXCEPTION
* | [!CX!] /IWBEP/CX_MGW_TECH_EXCEPTION
*
+----------------------------------------------------------------------------------
----</SIGNATURE>
method PRODUCTSET_GET_ENTITYSET.

"how do we know here that what was the value of $top user passed?

* append INITIAL LINE TO et_entityset.


DATA: lt_bapi_products type TABLE OF BAPI_EPM_PRODUCT_HEADER,
ls_bapi_max type BAPI_EPM_MAX_ROWS,
ls_entity like LINE OF ET_ENTITYSET,
lt_category type TABLE OF BAPI_EPM_PRODUCT_CATEG_RANGE,
lv_top type i,
lv_skip type i,
lv_total type i.

lv_top = is_paging-top.
lv_skip = is_paging-skip.
lv_total = lv_top + lv_skip.

ls_bapi_max-bapimaxrow = lv_total.
READ TABLE it_filter_select_options INTO data(ls_filter_sel) with key
property = 'CATEGORY'.
IF sy-subrc = 0.
lt_category = CORRESPONDING #( ls_filter_sel-select_options ).
ENDIF.

"Step 1: Call the BAPI where all the product data is available
* call FUNCTION 'BAPI_EPM_PRODUCT_GET_LIST'
* EXPORTING
* max_rows = ls_bapi_max " Maximum number of
lines of hits
* TABLES
* headerdata = lt_bapi_products " EPM: Product
header data of BOR object SEPM002
** selparamproductid = " EPM: BAPI range table for
product ids
** selparamsuppliernames = " EPM: BAPI range table for
company names
* selparamcategories = lt_category " EPM: Range table
for product categories
** return = " Return Parameter
* .

select * FROM snwd_pd as prod INNER JOIN snwd_texts as desc on


prod~desc_guid = desc~parent_key and desc~language
= @sy-langu
into CORRESPONDING FIELDS OF table @lt_bapi_products WHERE
prod~category IN @lt_category.

"Step 2: Map this data from the BAPI to my EntitySet output table
IF lv_total > 0.
LOOP AT lt_bapi_products INTO data(ls_bapi_product) FROM lv_skip + 1 to
lv_total.
MOVE-CORRESPONDING ls_bapi_product to ls_entity.
append ls_entity to ET_ENTITYSET.
ENDLOOP.
else.
ET_ENTITYSET = CORRESPONDING #( lt_bapi_products ).
ENDIF.

endmethod.

*
<SIGNATURE>------------------------------------------------------------------------
---------------+
* | Instance Protected Method ZCL_ZJAN_2021_DPC_EXT->SUPPLIERSET_GET_ENTITY
*
+----------------------------------------------------------------------------------
---------------+
* | [--->] IV_ENTITY_NAME TYPE STRING
* | [--->] IV_ENTITY_SET_NAME TYPE STRING
* | [--->] IV_SOURCE_NAME TYPE STRING
* | [--->] IT_KEY_TAB TYPE /IWBEP/T_MGW_NAME_VALUE_PAIR
* | [--->] IO_REQUEST_OBJECT TYPE REF TO
/IWBEP/IF_MGW_REQ_ENTITY(optional)
* | [--->] IO_TECH_REQUEST_CONTEXT TYPE REF TO
/IWBEP/IF_MGW_REQ_ENTITY(optional)
* | [--->] IT_NAVIGATION_PATH TYPE /IWBEP/T_MGW_NAVIGATION_PATH
* | [<---] ER_ENTITY TYPE
ZCL_ZJAN_2021_MPC=>TS_SUPPLIER
* | [<---] ES_RESPONSE_CONTEXT TYPE
/IWBEP/IF_MGW_APPL_SRV_RUNTIME=>TY_S_MGW_RESPONSE_ENTITY_CNTXT
* | [!CX!] /IWBEP/CX_MGW_BUSI_EXCEPTION
* | [!CX!] /IWBEP/CX_MGW_TECH_EXCEPTION
*
+----------------------------------------------------------------------------------
----</SIGNATURE>
method SUPPLIERSET_GET_ENTITY.

data: lv_bp_id type bapi_epm_bp_id,


ls_header type BAPI_EPM_BP_HEADER,
lt_return type TABLE OF bapiret2,
ls_product type snwd_bpa.

"Request
read TABLE IT_KEY_TAB INTO data(ls_key) INDEX 1.
IF ls_key-name = 'PRODUCT_ID'.
SELECT SINGLE BP_ID INTO @lv_bp_id from snwD_bpa as bpa INNER JOIN snwd_pd as
pda
on bpa~node_key = pda~SUPPLIER_GUID.
else.
lv_bp_id = ls_key-value.
ENDIF.

IF lv_bp_id is INITIAL.
""Blast
raise EXCEPTION type /iwbep/cx_mgw_busi_exception
EXPORTING
message_unlimited = |Dude you passed me a wrong partner id |
.
ENDIF.
"Processing
call FUNCTION 'BAPI_EPM_BP_GET_DETAIL'
EXPORTING
bp_id = lv_bp_id " EPM: Business Partner ID to be
used in BAPIs
IMPORTING
headerdata = ls_header " EPM: Business Partner header data
( BOR SEPM004 )
TABLES
* contactdata = " EPM: Business Partner contact data ( BOR
SEPM004 )
return = lt_return " Return Parameter
.

IF lt_return is NOT INITIAL.

data(lo_msg_obj) = me->mo_context->get_message_container( ).

lo_msg_obj->add_messages_from_bapi(
EXPORTING
it_bapi_messages = lt_return " Return parameter
table
).

raise EXCEPTION type /iwbep/cx_mgw_busi_exception


EXPORTING
message_container = lo_msg_obj
.
ENDIF.
"Response
MOVE-CORRESPONDING ls_header to ER_ENTITY.

endmethod.

*
<SIGNATURE>------------------------------------------------------------------------
---------------+
* | Instance Protected Method ZCL_ZJAN_2021_DPC_EXT->SUPPLIERSET_GET_ENTITYSET
*
+----------------------------------------------------------------------------------
---------------+
* | [--->] IV_ENTITY_NAME TYPE STRING
* | [--->] IV_ENTITY_SET_NAME TYPE STRING
* | [--->] IV_SOURCE_NAME TYPE STRING
* | [--->] IT_FILTER_SELECT_OPTIONS TYPE /IWBEP/T_MGW_SELECT_OPTION
* | [--->] IS_PAGING TYPE /IWBEP/S_MGW_PAGING
* | [--->] IT_KEY_TAB TYPE /IWBEP/T_MGW_NAME_VALUE_PAIR
* | [--->] IT_NAVIGATION_PATH TYPE /IWBEP/T_MGW_NAVIGATION_PATH
* | [--->] IT_ORDER TYPE /IWBEP/T_MGW_SORTING_ORDER
* | [--->] IV_FILTER_STRING TYPE STRING
* | [--->] IV_SEARCH_STRING TYPE STRING
* | [--->] IO_TECH_REQUEST_CONTEXT TYPE REF TO
/IWBEP/IF_MGW_REQ_ENTITYSET(optional)
* | [<---] ET_ENTITYSET TYPE
ZCL_ZJAN_2021_MPC=>TT_SUPPLIER
* | [<---] ES_RESPONSE_CONTEXT TYPE
/IWBEP/IF_MGW_APPL_SRV_RUNTIME=>TY_S_MGW_RESPONSE_CONTEXT
* | [!CX!] /IWBEP/CX_MGW_BUSI_EXCEPTION
* | [!CX!] /IWBEP/CX_MGW_TECH_EXCEPTION
*
+----------------------------------------------------------------------------------
----</SIGNATURE>
method SUPPLIERSET_GET_ENTITYSET.

DATA: lt_bapi_products type TABLE OF BAPI_EPM_PRODUCT_HEADER,


ls_bapi_max type BAPI_EPM_MAX_ROWS,
ls_entity like LINE OF ET_ENTITYSET,
lt_category type RANGE OF SNWD_COMPANY_NAME,
lv_top type i,
lv_skip type i,
lv_total type i.

lv_top = is_paging-top.
lv_skip = is_paging-skip.
lv_total = lv_top + lv_skip.
ls_bapi_max-bapimaxrow = lv_total.

READ TABLE it_filter_select_options INTO data(ls_filter_sel) with key


property = 'COMPANY_NAME'.
IF sy-subrc = 0.
lt_category = CORRESPONDING #( ls_filter_sel-select_options ).
ENDIF.

IF lt_category is INITIAL.
select BP_ID, company_name, STREET, CITY, COUNTRY, BP_ROLE, CURRENCY_CODE,
EMAIL_ADDRESS FROM snwD_bpa as bpa INNER JOIN snwd_ad as desc on
bpa~address_guid = desc~node_key
into table @data(lt_bps) .
else.
select BP_ID, company_name, STREET, CITY, COUNTRY, BP_ROLE, CURRENCY_CODE,
EMAIL_ADDRESS FROM snwD_bpa as bpa INNER JOIN snwd_ad as desc on
bpa~address_guid = desc~node_key
into table @lt_bps WHERE bpa~company_name in @lt_category.
ENDIF.

"Step 2: Map this data from the BAPI to my EntitySet output table
IF lv_total > 0.
LOOP AT lt_bps INTO data(ls_bps) FROM lv_skip + 1 to lv_total.
MOVE-CORRESPONDING ls_bps to ls_entity.
append ls_entity to ET_ENTITYSET.
ENDLOOP.
else.
ET_ENTITYSET = CORRESPONDING #( lt_bps ).
ENDIF.

endmethod.
ENDCLASS.

append INITIAL LINE TO et_entityset.


DATA: lt_bapi_products type TABLE OF BAPI_EPM_PRODUCT_HEADER,
ls_bapi_max type BAPI_EPM_MAX_ROWS,
ls_entity like LINE OF ET_ENTITYSET,
lt_category type TABLE OF BAPI_EPM_PRODUCT_CATEG_RANGE,
lv_top type i,
lv_skip type i,
lv_total type i.

lv_top = is_paging-top.
lv_skip = is_paging-skip.
lv_total = lv_top + lv_skip.

ls_bapi_max-bapimaxrow = lv_total.

READ TABLE it_filter_select_options INTO data(ls_filter_sel) with key


property = 'CATEGORY'.
IF sy-subrc = 0.
lt_category = CORRESPONDING #( ls_filter_sel-select_options ).
ENDIF.
"Step 1: Call the BAPI where all the product data is available
* call FUNCTION 'BAPI_EPM_PRODUCT_GET_LIST'
* EXPORTING
* max_rows = ls_bapi_max " Maximum number of
lines of hits
* TABLES
* headerdata = lt_bapi_products " EPM: Product
header data of BOR object SEPM002
** selparamproductid = " EPM: BAPI range table for
product ids
** selparamsuppliernames = " EPM: BAPI range table for
company names
* selparamcategories = lt_category " EPM: Range table
for product categories
** return = " Return Parameter
* .

select * FROM snwd_pd as prod INNER JOIN snwd_texts as desc on


prod~desc_guid = desc~parent_key and desc~language
= @sy-langu
into CORRESPONDING FIELDS OF table @lt_bapi_products WHERE
prod~category IN @lt_category.

"Step 2: Map this data from the BAPI to my EntitySet output table
IF lv_total > 0.
LOOP AT lt_bapi_products INTO data(ls_bapi_product) FROM lv_skip + 1 to
lv_total.
MOVE-CORRESPONDING ls_bapi_product to ls_entity.
append ls_entity to ET_ENTITYSET.
ENDLOOP.
else.
ET_ENTITYSET = CORRESPONDING #( lt_bapi_products ).
ENDIF.

You might also like