0% found this document useful (0 votes)
24 views4 pages

34 GET Single and Multiple

The document describes OData service methods for retrieving a product entity and product entity set. It uses BAPI calls to retrieve product data from SAP and maps it to the entity and entity set response formats.

Uploaded by

janilkumar
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
24 views4 pages

34 GET Single and Multiple

The document describes OData service methods for retrieving a product entity and product entity set. It uses BAPI calls to retrieve product data from SAP and maps it to the entity and entity set response formats.

Uploaded by

janilkumar
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 4

class ZCL_ZJAN_2021_DPC_EXT definition

public
inheriting from ZCL_ZJAN_2021_DPC
create public .

public section.
protected section.

methods PRODUCTSET_GET_ENTITYSET
redefinition .
methods PRODUCTSET_GET_ENTITY
redefinition .
private section.
ENDCLASS.

CLASS ZCL_ZJAN_2021_DPC_EXT IMPLEMENTATION.

*
<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.
ENDCLASS.

You might also like