A Step by Step process to Post Odata services in SAP / SAP HANA system
I had gone through multiple blogs post for post Odata service. In those documents it was given very high level steps. For beginner, its difficult to know how exactly these steps has been executed.
In my previous blog Post , We had learn about how to create a Odata service and test the response. Follow the link for odata creation – https://blogs.sap.com/2021/05/06/a-step-by-step-process-to-create-odata-services-in-sap-sap-hana-system/
In this blog post, I am going to tell you step by step process to Post Odata services for SAP /SAP HANA system and how to test it.
We will take a simple demo for posting the sales document data into a custom table , Here we will try to navigate through Header-Item structure which also helps in understanding the real time scenarios for your project purpose .
I tried to explain the whole process in 5 steps.
Step 1. Go to transaction code – SEGW .
Click on Icon Create. A pop window will appear , Fill the details as per below mention in screen shot and click on check icon or enter.
Below screen will appear where you can see below folder in project. In Folder data model, we can see three sub folders. Entity Type – it acts as work area , Entity Sets -It act as internal table and associations.
Now we are going to define structure of work area and internal table , Right click on Data model select import and select DDIC structure .
Here give the details of structure and structure name as per below screen below.
Select radio button Entity type and and click on check box entity set. fill ABAP structure as VBAK and click on next
Now you will get the pop up screen with VBAK table fields name. Select fields for your structure and click on next.
Other window will appear where we have to select the key field. tick on Vbeln as key field and click on finish. You may get warning message , it can be totally ignored.
Now expand folder entity type and fill the below parameters in properties , Please don’t tick Null check box for VBELN as it is key field.
Here, We are selecting VBELN and POSNR are Keys
click on Save button at the top of menu bar
Now click on generate Icon, A pop up window will appear with class details , click on tick icon and proceed further. It will ask for package , give details and proceed further . These are also knowns as runtime artifacts.
Step 2. Now we will navigate the connection between header and Item entity , This is similar to maintain a key relation between header and Item data .
go to Association folder , right click on it and select Create
A pop up window will appear , Here you need to mention the association name. We are trying to link Header and item entity , hence select the principle entity as header one and dependent entity as item. Please fill the details as mentioned in below screen shot, press enter and click on next.
Next screen will come , Where you need to mention the relation between Header and Item entity , Like relation between header and item table of data base tables. Please select the parameters from F4 help and fill the details as below and click on next.
In next screen , It will show the link for association Set for header and item entity. Click on finish to complete the association linkage .
You can see Association and Association Set details as below with the navigation properties under your project as shown below
Save and click on generate ICON.
Step 3. Go to transaction code /IWFND/MAINT_SERVICE .
Click on push button Add services .
Now double click on your project name service . A pop up window will appear , enter the package details and click on tick icon. An Information message will be shown where it will confirm about the service is created and metadata loaded successfully
Now click back and go to main screen of transaction /IWFND/MAINT_SERVICE and find your service.
Click on SAP Gateway Client
A new screen will come, Execute the transaction and check the response .
Now select the URL for metadata from add URL option to check the Header and Item navigation structure and execute . You will see the header and item entity fields in response .
Now we will write code to get and post data from odata services.
Step 4. to get the data from HTTP request and Post the data .
Let’s Create a custom table where we need to post data . I had created custom table with below fields . Here we will post data based on odata request ,
here we will explore more on Runtime Artifacts , The main two class are MDP( Model Provider class) and DPC ( Data provider Class).
MPC – This is used to define model. you can use the method Define to create entity, properties etc using code based implementation.
DPC – used to code your CRUDQ methods as well as function import methods. you write all your logic in redefined methods of DPC extension class.
now go to transaction SEGW and expand folder Runtime Artifacts .
Here we can see, extension for data provider and module provider class. We need to redefine the Module provider extension class to bind and read the entity
Double click on Module provider extension class, It will redirect to class object , select method Define and right click on it to redefine the class.
Now we will add the code to mapping the entity name and Entity Structure , first Define super class and then write the code as below . Here we have mapped the entity for header and bind with structure VBAK. Based on your requirement , you can take your custom structure or even define your structure in class for binding.
Now We will Redefine the method of class ZCL_ZTEST_PI_SD_POST_DPC_EXT.
Method – SO_HEADERSET_GET_ENTITY .
Follow the same steps mentioned above and redefine the method . Here we will write logic to read the data from HTTP request to get the HTTP response . Make sure to use the same field name and they are case sensitive .
Method – SO_HEADERSET_CREATE_ENTITY
Redefine method to post the values read from HTTPS request to post data in Custom table .
Here, I had just written basic logic to read the value from HTTPS Request and update that in custom table . Please write the below code in method as shown below, Here we are first reading the data form HTTP request and based on that data we read are reading data from VBAP .
You can also redefine the method for entityset based on your requirement. Here I had just added simple SQL statement to get data into header entity set.
Now , lets try to post the data . Before posting data , we will check values in VBAK , VBAP and custom table. we are going to fetch values from tables and going to post them in custom table.
Now lets execute odata service in batch mode to get data and post data in one request .
Step – 5 Test odata services
Go to transaction /IWFND/MAINT_SERVICE and find out your service , select your service and click on load metadata.
Information message will pop up – Metadata has been loaded successfully.
Now Select your service and click on SAP Gateway Client . You will redirect to other screen. click on add URI options and Select batch in that .
Now you can see the radio button on post and format for HTTP request.
Here you need to mention your entity set and Key to get the values . Similarly for post also you need to mention entity set and input data in json format . Here in below screen , we are going to do changes for HTTP request for header entity set . These Fields are Case sensitive , make sure it should be as mentioned in entity set of Odata.
and scroll below in HTTP Request window and give details as mention below for post record .
Now , execute and see response in HTTP Response.
Here you can see HTTPS response based on KEY id for GET and for POST . we get values in response and they are created in custom table
for GET response :
for Post response :
You can see in response as created and below that are values which you can verify
Now Lets check the custom table data.
Here the table is updated with the values for POST , Based on logic written on VBAP and VBAK in Create entity method of DPC Extension class.
Here , We had completed our Odata service creation with a Service Builder Project with two entities and two entity-sets. We had created association and association sets, generated the runtime artifacts. We had registered and activated our OData service and loaded metadata. We had redefined method of MDP Extension class to bind the structure. We had also redefined DPC extension class to Get entity data ,entity Set data and post data and updated custom table.
laxmi jibhe Thanks for sharing this. I share this on LinkedIn if you don't mind.
Thanks for the nice blog, Laxmi. The steps are clear and easy to understand.
many thanks for your interesting blog post!
If you call this api from a cloud system (for example), did you have to handle any csrf token stuff? Or is this a OData out-of-the-box functionality? We hat the same question into a customer project. our approach was to call a get-method to fetch the csrf token and pass them within the following POST call.
Thanks and regards, jonathan
Yes, We need to handle for CSRF token. For Post, Fetch CSRF token and then post. For above mention service , we can also see CSRF code after test execution.
Very elaborative document on creaing Odata service laxmi jibhe
Thank you for sharing excellent information
Hi, I do not see $batch option in add URI option. can you please guide.
Thank you for sharing this!
While these are the valid steps for the traditional code-based OData development approach, it should be noted that at present time, other development models exist that are more suitable for development in S/4HANA.
This is the diagram shared in last TechEd by SAP that helps to understand availability of different models (it says "Fiori apps" but essentially it's OData development):
What this blog describes is in the realm of "Classic ABAP". Starting from ABAP 7.5, instead of the described process, we should be using ABAP Programming Model for Fiori, i.e. CDS views and BOPF (for updates). And from S/4HANA 2020, we should be using ABAP RAP model, which is also based on CDS but has more to it.
To ensure best long-term investment, it is important to understand which model should be used in the specific environment. If someone reads this blog and they start applying this process in an S/4HANA 2020 system, for example, where RAP model would work just fine, that would not be a good solution.
If you indeed are working with a HANA-based system, I'd strongly encourage to look into other development models and use CDS instead of SEGW code-based approach. Of course, some cases could still call for good old classic ABAP but those should be far and few in between.
Nice blog. I've tried almost till the end but when clicking on the Add url, not able to find the 'Batch'. I've other options along including count. Could you me to identify the reason
Very Nice blog. I am trying to implement batch process but I can not see $batch URI in Add URI options list. Do we need to do any setting to get the $batch uri.
Nice blog, Thanks.
Nice blog and very nice explanation. Helpful to beginners.