Skip to Content

Overview

  • SAP Fiori apps use OData to display and update data in back-end server (SAP or Non-SAP).
  • OData (Open Data Protocol) is a standardized protocol for creating and consuming data APIs.
  • OData builds on core protocols like HTTP and commonly accepted methodologies like REST.
  • Odata supports message formats like JSON, XML.
  • OData provides definitions for:
    • Simple Types
    • Complex Types
    • Associations between entries
    • Navigation Paths between entries
    • Custom behavior (known as function imports) beyond the standard QUERY, CREATE, READ, UPDATE, DELETE (QCRUD) operations
  • Here we see how to create a Odata-Service which consumes RFC of SAP-R3 (Back-end) server.
  • This is a example of business scenario where we need to display/update data of SAP-R3 (Back-end) server in SAP UI5 Application.
  • SAP UI5 Applcation consumes Odata-Service which in-turn consumes RFC of SAP-R3.
  • This blog is part of below parent blog:

 

Steps to create OData service (which consumes RFC):

This is example to consume RFC in OData-Service.

RFC of SAP-R3 (backen-end) Server:

  • Functionality of RFC is like, on invoke, it returns MARA table details.
  • RFC has one output table structure ‘TBL_MARA‘, in which 10 records will be fetched on execution
  • below is RFC code to fetch 10 records from mara table
  • This RFC will be consumed in OdataService of SAP-Fiori.

Steps to Create OData Service:

  1. Pre-requisites:
    • RFC of SAP-R3 (back-end) system
    • In SAP-Fiori (front-end) system:
      • One RFC-Destination connecting to SAP-R3 (back-end) System
      • T-code    ‘SEGW’
  2. Go-to t-code ‘SEGW’ -> click on icon ‘Create Project’
  3. Enter details as shown in screen
  4. Click ‘ok’ icon, OData project gets created
  5. Now we need to create a “Entity-Type” which is meta structure to hold RFC table output
    • Select ‘Entity-Types’ -> right click -. ‘Create’
    • Enter names as per input.
    • here ‘Entity Type’ is like Data Type and  ‘Entity Set’ is like variable of Data Type.
    • With ‘Entity Set’ name we consume ODataService in UI5 App
    • Click ‘Ok’ icon
    • Now, add column (property) in ‘Entity Type’
    • Double Click on Properties -> In center panel click on ‘Append Row’ icon to add new elements
    • For example purpose, we need only two column details Material Number and its Type, then create two elements
    • And mark ‘Material’ as a key element
    • Now Save and click on icon ‘Generate Runtime Objects’,
    • Click ok in next pop-up
    • Enter package details
    • as a success below screen should appear
  6. Redefine EntitySet method to consume RFC
    • Once Meta structure is been defined, next is to consume RFC
    • For that go to ‘Service Implementation’ -> ‘*_DPC_EXT
    • _DPC_EXT‘ has method ‘_GET_EntitySet‘ which we need to Re-Define, for same we can follow below screen
    • Once method gets re-defined, we can see it in folder Redefinitions.
    • Now in ‘_GET_EntitySet’ method we need to do some ABAP Code logic
      • When SAP UI5 Application calls this OdataService with this EntitySet name i.e. ‘MateriallistSet’, GET_ENTITYSET method gets invoked.
      • Here we can write logic to call RFC of SAP-R3 (Back-end) server.
      • RFC returns output in table format, which we need to map structure of OData-Entity-Type ‘Materiallist’
      • Below code can be written for same:
      •   method MATERIALLISTSET_GET_ENTITYSET.
        
        * Structure for RFC's mara table data
          TYPES:
            BEGIN OF ZMARA,
              MATNR TYPE C LENGTH 21,
              MTART TYPE C LENGTH 4,
            END OF ZMARA.
        
          DATA: IT_MARA   TYPE TABLE OF ZMARA,    "internal table to store RFC result
                wA_MARA   TYPE ZMARA,             "work area for single RFC result
                WA_ENTITY TYPE ZCL_ZTEST_ODATA_MPC=>TS_MATERIALLIST.  "work area for Odata Entity 'MaterialList'
        
        * Calling SAR-R3 (Back-Ens) server RFC
          Call FUNCTION 'ZTEST_RFC_FIORI' DESTINATION 'rfcDestinationName'
            TABLES
              TBL_MARA = IT_MARA.
        
        * Return RFC output to Odata Entity output 'MaterialList'
        IF SY-SUBRC = 0.
        *if VALUE FOUND, then map output to Odata Entiy 'MaterialList'
          LOOP AT IT_MARA INTO WA_MARA.
            CLEAR WA_ENTITY.
            WA_ENTITY-MATERIAL  =  WA_MARA-MATNR.
            WA_ENTITY-MTYPE     =  WA_MARA-MTART.
            APPEND WA_ENTITY TO ET_ENTITYSET.   "Append output to Odata Entiy 'MaterialList'
            CLEAR WA_MARA.
          ENDLOOP.
        ENDIF.
          endmethod.
        
    • Now activate the ‘GET_ENTITYSET‘ method and ‘_DPC_EXT‘.
  7. Thus, a OData Service has been created, which consumes RFC of back-end system.
  8. Now next is to register the Service for same, we can follow below link:
  9. Once service gets registered, it can be consumed in SAP UI5 Application for display/upload of back-end data.
  10. We can test this ODataService in SAP-Fiori (front-End):
    • t-code              /n/iwfnd/gw_client
    • url                    /sap/opu/odata/sap/ZTEST_ODATA_SRV/MaterialListSet
    • Descritpion      To get RFC detals via EntitySet ‘MaterialListSet’
    • Test screen:
  11. Thus we have developed one OData Service in SAP-Fiori which consumes RFC of SAP-R3.
To report this post you need to login first.

Be the first to leave a comment

You must be Logged on to comment or reply to a post.

Leave a Reply