Technology Blogs by Members
Explore a vibrant mix of technical expertise, industry insights, and tech buzz in member blogs covering SAP products, technology, and events. Get in the mix!
cancel
Showing results for 
Search instead for 
Did you mean: 
Former Member

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 :wink:

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

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


Entity Set-1- HeaderSet

Entity Set-2- ItemSet

Entity Set-3- ScheduleSet


Create Association


Association-1 -  AssItem (Without key fields mapping)

Association-2 -  AssSchedule (Without key fields mapping)



Create Navigation


Navigation-1 -  NavItem

Navigation-2 -  NavSchedule



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.



we have to Redefine the method/IWBEP/IF_MGW_APPL_SRV_RUNTIME~GET_EXPANDED_ENTITYSET



Code Snippet


METHOD /iwbep/if_mgw_appl_srv_runtime~get_expanded_entityset.

*-------------------------------------------------------------------------*

*             Deep Structure

*-------------------------------------------------------------------------*

   DATABEGIN 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 :smile:

Test Case 1:

URI : /sap/opu/odata/sap/ZPROJ_982_SRV/HeaderSet?$filter=PoNumber eq '4500000163'&$expand=NavItem


Test Case 2:

URI : /sap/opu/odata/sap/ZPROJ_982_SRV/HeaderSet?$filter=PoNumber eq '4500000163'&$expand=NavItem,NavSchedule


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

*-------------------------------------------------------------------------*

   DATABEGIN 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 :smile:



Thanks

Sri





36 Comments
Labels in this area