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.

New NetWeaver Information at SAP.com

Very Helpfull

User Rating: Be the first one !