Technology Blogs by SAP
Learn how to extend and personalize SAP applications. Follow the SAP technology blog for insights into SAP BTP, ABAP, SAP Analytics Cloud, SAP HANA, and more.
cancel
Showing results for 
Search instead for 
Did you mean: 
Former Member

Knowledge prepare:

Topic: Expand in Framework and Data Provider

URI:    Expand in Framework and Data Provider - SAP NetWeaver Gateway - SAP Library


A request with a $expand query option enables the reading of entries of an entity together with an associated entity.


Below is some blogs posted in SCN about expand, I would like to show my respect to them here.

Step-by-step guide to build an OData Service based on RFCs – Part 3

Ok, now let us start.

1. Create a Entity Name: ApplicationLog

                 Entity Set Name: ApplicationLogCollection

2. Set ABAP structure and Properties for Entity Name: ApplicationLog.

3. Create Association Name: Task_To_M_ApplicationLog.

click [Next], fill in Referential Constraints

click [Next]-->click [finish].

4.Click [Generate Runtime Object ] and make sure the message with "Runtime Objects for project 'xxxx' generated".


5. Test metadata

6.Create class: CL_CRM_ODATA_RT_ApplicationLog  (Runtime Class for ApplicationLog)

Code Snippet:

Class:CL_CRM_ODATA_RT_ApplicationLog

Method: /IWBEP/IF_MGW_APPL_SRV_RUNTIME~GET_ENTITYSET

DATA: applicationlog_get_entityset TYPE cl_crm_odata_mpc=>tt_applicationlog.

" EntitySet -ApplicationLogCollection

     IF iv_entity_set_name = gc_application_log_collection.

       applicationlog_get_entityset(

         EXPORTING

          iv_entity_name = iv_entity_name

          iv_entity_set_name = iv_entity_set_name

          iv_source_name = iv_source_name

          it_filter_select_options = it_filter_select_options

          it_order = it_order

          is_paging = is_paging

          it_navigation_path = it_navigation_path

          it_key_tab = it_key_tab

          iv_filter_string = iv_filter_string

          iv_search_string = iv_search_string

          io_tech_request_context = io_tech_request_context

        IMPORTING

          et_entityset = applicationlog_get_entityset

          es_response_context = es_response_context

        ).

*     Send specific entity data to the caller interface

       copy_data_to_ref(

         EXPORTING

           is_data = applicationlog_get_entityset

         CHANGING

           cr_data = er_entityset

       ).


Class:CL_CRM_ODATA_RT_ApplicationLog

Method: /IWBEP/IF_MGW_APPL_SRV_RUNTIME~GET_EXPANDED_ENTITY


DATA: lr_bupa_provider TYPE REF TO cl_crm_bp_odata_data_provider,

             lv_bupa_supports TYPE abap_bool.

       CREATE OBJECT lr_bupa_provider.

       lv_bupa_supports = lr_bupa_provider->supports_entity( EXPORTING iv_entity_name = iv_entity_name ).

       IF iv_entity_name = GC_TASK.

         IF go_task_impl IS NOT BOUND.

           CREATE OBJECT go_task_impl

             EXPORTING

               ir_context = mo_context.

         ENDIF.

         go_task_impl->get_task_expanded_entity(

           EXPORTING

             iv_entity_name               = iv_entity_name

             iv_entity_set_name           = iv_entity_set_name

             iv_source_name               = iv_source_name

             it_key_tab                   = it_key_tab

             it_navigation_path           = it_navigation_path

             io_expand                    = io_expand

             io_tech_request_context      = io_tech_request_context

           IMPORTING

             er_entity                    = er_entity

             et_expanded_clauses          = et_expanded_clauses    " Table of Strings

             et_expanded_tech_clauses     = et_expanded_tech_clauses    " Table of Strings

         ).

       ELSEIF lv_bupa_supports = 'X'.

         CALL METHOD lr_bupa_provider->/iwbep/if_mgw_core_srv_runtime~set_context

           EXPORTING

             io_context = mo_context.

         CALL METHOD lr_bupa_provider->/iwbep/if_mgw_appl_srv_runtime~get_expanded_entity

           EXPORTING

             iv_entity_name           = iv_entity_name

             iv_entity_set_name       = iv_entity_set_name

             iv_source_name           = iv_source_name

             it_key_tab               = it_key_tab

             it_navigation_path       = it_navigation_path

             io_expand                = io_expand

             io_tech_request_context  = io_tech_request_context

           IMPORTING

             er_entity                = er_entity

             et_expanded_clauses      = et_expanded_clauses

             et_expanded_tech_clauses = et_expanded_tech_clauses.

       ENDIF.


Class:CL_CRM_ODATA_RT_ApplicationLog

Method: APPLICATIONLOG_GET_ENTITYSET


TRY.

         DATA: lv_obj_guid TYPE crmt_object_guid.

         FIELD-SYMBOLS <fs_key_set_option> TYPE /iwbep/s_mgw_name_value_pair.

         READ TABLE it_key_tab ASSIGNING <fs_key_set_option> WITH KEY name = GC_GUID.

         IF <fs_key_set_option> IS ASSIGNED AND <fs_key_set_option>-value IS NOT INITIAL.

           lv_obj_guid = <fs_key_set_option>-value.

           CALL METHOD gr_task_rt->get_log_data

             EXPORTING

               iv_object_guid = lv_obj_guid

             IMPORTING

               et_log         = et_entityset.

         ENDIF.

       CATCH /iwbep/cx_mgw_busi_exception .

       CATCH /iwbep/cx_mgw_tech_exception .

     ENDTRY.

7. Then you can test for the entity by below 2 kinds of URIs.

      (1)/sap/opu/odata/sap/CRM_ODATA/TaskCollection(guid'xxxxx')/ApplicationLogs

      (2)/sap/opu/odata/sap/CRM_ODATA/TaskCollection(guid'xxxxx')/?$expand=ApplicationLogs

8.Finished.