Technical Articles
ABAP developer edition & Python Interface development
Python has grown in popularity and the number of use cases has rapidly increased from Finance, big data and machine learning. For those of us in the SAP it will be helpful to use the power of processing provided by Python at the same time retain the benefits and advantages of working in SAP.
In this blog, we will see how to use python and query odata from the ABAP developer edition using IntellJ PY Charm and show case the power of python in data analysis using a simple example I There are many blogs that describe how to set up python and IntelliJ for development. One such blog is Python with Intellij.
To query odata you need to install pyodata from GitHub. This is available from SAP Pyodata package. Install the library as mentioned
It is assumed that you have SAP ABAP developer edition up and running. I am using Developer edition 7.52.
Once your setup is complete you can create new Python project in Py Charm and add a python file name it appy.py. The following code shows how to query ABAP system odata service.
# Import the requirements
import pyodata import pandas as pd import requests
# Create a PyOData client instance service_url = "http://vhcalnplci.dummy.nodomain:8000//sap/opu/odata/sap/EPM_REF_APPS_SHOP_SRV" #we are querying Shopping service to analyse the review information
session = requests.Session() session.auth = ('Developer', 'Down1oad') #username and password for ABAP developer edition client = pyodata.Client(service_url, session)
# Get the Products entity set and its entity type entity_sets = client.entity_sets products_entity_set="" scalar_properties = set() for es in client.schema.entity_sets: if es.name == "Reviews": proprties = es.entity_type.proprties() for prop in proprties: if prop.name == 'ProductId' or prop.name == 'Rating' or prop.name == 'HelpfulCount': scalar_properties.add(prop.name) print(scalar_properties) reviews = client.entity_sets.Reviews.get_entities().execute() # Create an empty list to store the dictionaries for each reviews review_list = [] # Loop through each review entity and create a dictionary for review in reviews: review_dict = {} for property_name in scalar_properties: review_dict[property_name] = getattr(review, property_name) review_list.append(review_dict) # Convert the list of dictionaries to a pandas DataFrame df = pd.DataFrame(review_list) df=df.sort_index() df2= df.groupby('ProductId').sum() print(df2)
When you run the program you the output shown below
The above output shows the power of python for data analysis using a simple example. If we had to write an ABAP to do the same we would have to loop thru the output and sum reviews by product.
It will help if readers can comment and provide feedback and suggestions for future blogs. If you are interested in ABAP connectivity please follow the ABAP Connectivity environment topic page (https://community.sap.com/topics/abap-connectivity), Post and answer questions (https://answers.sap.com/tags/266264953119842772207986043063520), and read other posts on the topic (https://blogs.sap.com/tags/266264953119842772207986043063520/)
Just as a side-node for those who are interested: this blog highlights, how to access SAP data that is exposed as an OData Service using Python. There is also a GitHub project that provides Python access to SAP data that is exposed via RFC protocol:
GitHub - SAP/PyRFC: Asynchronous, non-blocking SAP NW RFC SDK bindings for Python
So no matter whether you need to call OData Services or remote-enabled Function Modules to get the data you are interested in, you can do both from Python!
Ulrich
Thanks for providing an additional method, I wish to point out you should have a valid S user id and download authorization to install the prerequisite libraries. I did not have the authorization and hence it was not possible for me to test the RFC adapter for Python. If it is possible to get the prerequisite library on GitHub or other download sites please let us know so that we can benefit from the RFC adapter from python
Best regards
Ramesh