Hi Folks,
Finally got some time to write a Blog on something which was a common question from a lot of audience here, so doing my bit of help here .. hope this helps a lot of beginners and not for experts ![]()
SAP Documentation for Expand Understanding
https://help.sap.com/saphelp_gateway20sp08/helpdata/en/ca/c683e803494b77a2e1290b987556e2/content.htm
Some of the Blogs already posted in SCN relevant to Expand and Deep Entity .
Improved Inside-Out Modelling
Step by Step development for CREATE_DEEP_ENTITY operation
Requirement
Considering a basic scenario where i am using BAPI_PO_GETDETAIL which has multiple output tables and input is PO number
![bapipo.JPG]()
Now we shall start with SAP Gateway
Create Project in SEGW
Create three entity types and Entity Sets
Entity Type-1- Header
Entity Type-2- Item
Entity Type-3- Schedule
![po1.JPG]()
Entity Set-1- HeaderSet
Entity Set-2- ItemSet
Entity Set-3- ScheduleSet
![po2.JPG]()
Create Association
Association-1 - AssItem (Without key fields mapping)
Association-2 - AssSchedule (Without key fields mapping)
![po3.JPG]()
Create Navigation
Navigation-1 - NavItem
Navigation-2 - NavSchedule
![po4.JPG]()
Let’s generate runtime artifacts. Click on generate runtime objects button. It will display
popup . Keep the default class names as-is and click on enter button.
Once generation is successful, you will get 4 classes. 2 for Data provider and 2 for Model provider.
![po5.JPG]()
we have to Redefine the method/IWBEP/IF_MGW_APPL_SRV_RUNTIME~GET_EXPANDED_ENTITYSET
![po6.JPG]()
Code Snippet
METHOD /iwbep/if_mgw_appl_srv_runtime~get_expanded_entityset.
*-------------------------------------------------------------------------*
* Deep Structure
*-------------------------------------------------------------------------*
DATA: BEGIN OF ls_order_items.
INCLUDE TYPE zcl_zproj_982_mpc=>ts_header.
DATA: navitem TYPE STANDARD TABLE OF zcl_zproj_982_mpc=>ts_item WITH DEFAULT KEY.
DATA: navschedule TYPE STANDARD TABLE OF zcl_zproj_982_mpc=>ts_schedule WITH DEFAULT KEY,
END OF ls_order_items,
ls_item1 TYPE zcl_zproj_982_mpc=>ts_item,
ls_schedle1 TYPE zcl_zproj_982_mpc=>ts_schedule.
*-------------------------------------------------------------------------*
* Data Declarations
*-------------------------------------------------------------------------*
DATA : ls_item TYPE zcl_zproj_982_mpc_ext=>ts_item,
lt_item TYPE TABLE OF zcl_zproj_982_mpc_ext=>ts_item,
ls_sch TYPE zcl_zproj_982_mpc_ext=>ts_schedule,
lt_sch TYPE TABLE OF zcl_zproj_982_mpc_ext=>ts_schedule,
ls_header TYPE zcl_zproj_982_mpc_ext=>ty_header,
lthead TYPE STANDARD TABLE OF bapiekkol,
lshead TYPE bapiekkol,
lsitem TYPE bapiekpo,
ltitem TYPE STANDARD TABLE OF bapiekpo,
lv_filter_str TYPE string,
lt_filter_select_options TYPE /iwbep/t_mgw_select_option,
ls_filter TYPE /iwbep/s_mgw_select_option,
ls_filter_range TYPE /iwbep/s_cod_select_option,
ls_expanded_clause1 LIKE LINE OF et_expanded_tech_clauses,
ls_expanded_clause2 LIKE LINE OF et_expanded_tech_clauses,
lv_ebeln TYPE ebeln,
lt_order_items LIKE TABLE OF ls_order_items,
ltsch TYPE STANDARD TABLE OF bapieket,
lssch TYPE bapieket.
*-------------------------------------------------------------------------*
* Entity Set - HeaderSet
*-------------------------------------------------------------------------*
CASE iv_entity_set_name.
WHEN 'HeaderSet'.
LOOP AT it_filter_select_options INTO ls_filter.
LOOP AT ls_filter-select_options INTO ls_filter_range.
TRANSLATE ls_filter-property TO UPPER CASE.
CASE ls_filter-property.
WHEN 'PONUMBER'.
lv_ebeln = ls_filter_range-low.
WHEN OTHERS.
" Log message in the application log
me->/iwbep/if_sb_dpc_comm_services~log_message(
EXPORTING
iv_msg_type = 'E'
iv_msg_id = '/IWBEP/MC_SB_DPC_ADM'
iv_msg_number = 020
iv_msg_v1 = ls_filter-property ).
" Raise Exception
RAISE EXCEPTION TYPE /iwbep/cx_mgw_tech_exception
EXPORTING
textid = /iwbep/cx_mgw_tech_exception=>internal_error.
ENDCASE.
ENDLOOP.
ENDLOOP.
*-------------------------------------------------------------------------*
* Call Method-BAPI_PO_GETDETAIL
*-------------------------------------------------------------------------*
CALL FUNCTION 'BAPI_PO_GETDETAIL'
EXPORTING
purchaseorder = lv_ebeln
items = 'X'
schedules = 'X'
IMPORTING
po_header = lshead
* PO_ADDRESS =
TABLES
* PO_HEADER_TEXTS =
po_items = ltitem
po_item_schedules = ltsch.
*-------------------------------------------------------------------------*
* Fill Header Values to Deep Structure
*-------------------------------------------------------------------------*
ls_order_items-ponumber = lshead-po_number.
ls_order_items-ccode = lshead-co_code.
ls_order_items-doctype = lshead-doc_type.
*-------------------------------------------------------------------------*
* Fill Item values to Deep Structure
*-------------------------------------------------------------------------*
LOOP AT ltitem INTO lsitem.
CLEAR ls_item1.
ls_item1-ponumber = lsitem-po_number.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = ls_item1-ponumber
IMPORTING
output = ls_item1-ponumber.
ls_item1-poitem = lsitem-po_item.
ls_item1-material = lsitem-material.
APPEND ls_item1 TO ls_order_items-navitem.
ENDLOOP.
*-------------------------------------------------------------------------*
* Fill Schedule values to Deep Strcture
*-------------------------------------------------------------------------*
LOOP AT ltsch INTO lssch.
CLEAR ls_item1.
* ls_item1-ponumber = lsitem-po_number.
ls_schedle1-poitem = lssch-po_item.
ls_schedle1-serial = lssch-serial_no.
APPEND ls_schedle1 TO ls_order_items-navschedule.
ENDLOOP.
*-------------------------------------------------------------------------*
* Assign the Navigation Proprties name to Expanded Tech clauses
*-------------------------------------------------------------------------*
ls_expanded_clause1 = 'NAVITEM'.
ls_expanded_clause2 = 'NAVSCHEDULE'.
APPEND ls_expanded_clause1 TO et_expanded_tech_clauses.
APPEND ls_expanded_clause2 TO et_expanded_tech_clauses.
*-------------------------------------------------------------------------*
* Append Deep Strcture Values to Final Internal Table
*-------------------------------------------------------------------------*
APPEND ls_order_items TO lt_order_items.
*-------------------------------------------------------------------------*
* Send back Response to Consumer
*-------------------------------------------------------------------------*
copy_data_to_ref(
EXPORTING
is_data = lt_order_items
CHANGING
cr_data = er_entityset ).
WHEN OTHERS.
ENDCASE.
ENDMETHOD.
Coding Part Done....Lets move to Testing![]()
Test Case 1:
URI : /sap/opu/odata/sap/ZPROJ_982_SRV/HeaderSet?$filter=PoNumber eq '4500000163'&$expand=NavItem
![po9.png]()
Test Case 2:
URI : /sap/opu/odata/sap/ZPROJ_982_SRV/HeaderSet?$filter=PoNumber eq '4500000163'&$expand=NavItem,NavSchedule
![po8.JPG]()
For Expand Entity :-
From the modelling point of view there wont be any changes
but in DPC we need to Redefine the method /iwbep/if_mgw_appl_srv_runtime~get_expanded_entity.
Also there would be a small change in Code , Like Below
*-------------------------------------------------------------------------*
* Deep Structure
*-------------------------------------------------------------------------*
DATA: BEGIN OF ls_order_items.
INCLUDE TYPE zcl_zproj_982_mpc=>ts_header.
DATA: navitem TYPE STANDARD TABLE OF zcl_zproj_982_mpc=>ts_item WITH DEFAULT KEY.
DATA: navschedule TYPE STANDARD TABLE OF zcl_zproj_982_mpc=>ts_schedule WITH DEFAULT KEY,
END OF ls_order_items,
ls_item1 TYPE zcl_zproj_982_mpc=>ts_item,
ls_schedle1 TYPE zcl_zproj_982_mpc=>ts_schedule.
copy_data_to_ref(
EXPORTING
is_data = ls_order_items
CHANGING
cr_data = er_entity).
Hope this Blog now helps you to implement Expand Entity/Entityset
Waiting for your feed back and suggestions and more questions ![]()
Thanks
Sri