Association and Navigation in OData Service – SAP Netweaver Gateway


Hello everyone, in this tutorial we will learn about Association and Navigation concepts in SAP Netweaver Gateway.

Association and Navigation are two important properties available in SAP Netweaver Gateway to associate two entity types.

Let us understand this with an example, in our earlier tutorials we retrieved sales order header data and item data in two different entity types “SalesOrderSet” and “OrderItemsSet”.


These two entity types are individual and can be executed differently.But what we want here is based on selected Sales Order# we would like to pull the item data from other entity type.This is can be achieved using association and navigation property.Lets look at that.

1. Go to Service Builder SEGW and expand the service to create an association


2. Provide the following information and Click on Next.

  • Principal Entity – To which you want to build the association
  • Dependent Entity – From which you want to get the data based on association
  • Cardinality – What the occurrence of no records
  • Navigation Property – Name of the navigation property for the Entity Type


3. In the next screen, provide the common field among two entity sets and click on Next.In our case Sales Order Id is the common field.


4. Check the entries and Click on Finish.


5. This creates a navigation property for “SalesOrder” Entity Type and association property in OData service.


6. Regenerate the service once again.You can observe that meta data of the service is grown because of our newly added association and navigation property. To access the order items based on order# we just need to add the name of the navigation property of the Entity Type. If you try to execute the service now, you will run into error, we need to enhance the method GET_ENTITYSET of “Orderitems” entity type to get the data.



7. Open and enhance the code inside GET_ENTITYSET method of “Orderitems” entity type.Why only this method we call the URI with navigation property based on the cardinality of dependent entity methods we get triggered. In our case our cardinality is 1..n of dependent entity i.e “Orderitems” so GET_ENTITYSET has to be enhanced.

8. If you go to that method you will find the code which we have already written for “Orderitems“, replace that code with the below code.

DATA:      ls_max_rows   TYPE bapi_epm_max_rows,
           lv_so_id      TYPE bapi_epm_so_id,
           lt_orderitems TYPE TABLE OF bapi_epm_so_item,
           ls_orderitems TYPE bapi_epm_so_item,
           lwa_key_tab   TYPE /iwbep/s_mgw_name_value_pair,
           ls_entityset  TYPE zcl_zdemo_gw_srv_mpc=>ts_orderitems.

* To get the Sales Order#
    READ TABLE it_key_tab INTO lwa_key_tab WITH KEY name = 'SoId'.
    IF sy-subrc = 0.
      lv_so_id = lwa_key_tab-value.

* if Sales Order is not available in the request,retrieve
* first 20 Sales Orders Items
    IF lv_so_id IS INITIAL.
      ls_max_rows-bapimaxrow = 20.
          max_rows   = ls_max_rows
          soitemdata = lt_orderitems.
      IF lt_orderitems IS NOT INITIAL.
        LOOP AT lt_orderitems INTO ls_orderitems.
          MOVE-CORRESPONDING ls_orderitems TO ls_entityset.
          APPEND ls_entityset TO et_entityset.

* if Sales Order is available in the request,retrieve
* it's Order Items
          input  = lv_so_id
          output = lv_so_id.

          so_id    = lv_so_id
          itemdata = lt_orderitems.
      IF lt_orderitems IS NOT INITIAL.
        LOOP AT lt_orderitems INTO ls_orderitems.
          MOVE-CORRESPONDING ls_orderitems TO ls_entityset.
          APPEND ls_entityset TO et_entityset.

9.After activating the code. Try now the same URI to get the line items of a order, you should be able to see the items only specific to the order you have provided in the URI.



Now you have successfully implemented the Association and Navigation in SAP Netweaver Gateway.

Stay tuned for is for more SAP Netweaver Gateway tutorials. Please feel free to comment and let us know your feedback.

Thank you.

WordPress database error: [Table 'saplearn_wp1.wp_nsex_comments' doesn't exist]
SELECT SQL_CALC_FOUND_ROWS wp_nsex_comments.comment_ID FROM wp_nsex_comments WHERE ( comment_approved = '1' ) AND comment_post_ID = 142 AND comment_parent = 0 ORDER BY wp_nsex_comments.comment_date_gmt ASC, wp_nsex_comments.comment_ID ASC

Comments are closed.