Deep Dive 11 – Calling an OData Service from a Web IDE Project using the SAP S/4HANA Cloud SDK
The following steps will explain how to incorporate the S/4HANA Cloud SDK in a project developed in the SAP Web IDE. If you want to follow this tutorial, we highly recommend checking out the first part of this blog series.
Note: This post is part of a series. For a complete overview visit the SAP S/4HANA Cloud SDK Overview.
Goal of this blog post
This tutorial will cover your first steps when incorporating the S/4 HANA Cloud SDK into a project developed in the SAP Web IDE (https://www.sap.com/developer/topics/sap-webide.html). Specifically, the following steps will be explained
- Creating a sample project from template in the Web IDE
- Adapting the projects dependencies and MTA descriptor to work with the SDK
- Adding a servlet class that uses the SDK to read business partners from an S/4 HANA system
Note: This tutorial requires access to an SAP S/4HANA system (see prerequisites below).
Prerequisites
In order to execute this tutorial successfully, we assume a working and reachable system of SAP S/4HANA on-premise or S/4HANA Cloud. Please refer to the prerequisites part of Step 4 – Calling an Odata Service for further information.
Generate a Multi-Target Application in the Web IDE
To use Web IDE, you need a trial account on SAP Cloud Platform as described in Step 3 – Hello World on SCP Cloud Foundry in the section Setup for CloudFoundry. With your SCP trial account, you also get a trial account in the NEO environment. After logging in to SCP, choose NEO Trial:
Select Services from the navigation bar to the left and find the service Web IDE Full-Stack. (You might want to bookmark the URL for later use):
Click on the service. Then click on Take Action -> Go to Service. The SAP Web IDE will open up in a new tab, with the home view open:
Switch to the workspace view the second icon from the top in the left sidebar.
Choose File > New > Project from Template from the menu and select Multi-Target-Application. Enter an project ID, go to the next screen, enter an application ID (e.g. sdk_tutorial) and press finish. In the following, we will assume that project and application are named sdk_tutorial.
Now right click on your project in the workspace area on the left and select New > Java Module. Enter tutorial as the module name and press next. Enter the group ID as com.sap.cloud.sdk and press finish.
Right-click your project in the workspace and install the builder via Settings > Cloud Foundry > Install Builder:
After the builder has been installed, right-click on your project folder in the navigation area and select Build:
When the build is finished, right-click the folder Workspace and refresh it. Then right-click on the mtar-file in the folder mta-archives > sdk_tutorial (not on your project folder) and select Deploy to Cloud Foundry:
Choose your Cloud Foundry Endpoint, Organization and Space and press Deploy:
If you now go to the Applications section of your Cloud Foundry account, you should see the application tutorial running. Click on the application and the URL, and you see the entry page for the application:
Adapt Your Project for Usage of the SDK
To use the SDK, the associated Java libraries have to be added as dependencies to your project. Open the file pom.xml in folder tutorial of your project.
Add the following lines directly after the closing </properties>-tag:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.sap.cloud.s4hana</groupId>
<artifactId>sdk-bom</artifactId>
<version>1.9.4</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
Add the following lines into the <dependencies>-section:
<dependency>
<groupId>com.sap.cloud.s4hana.cloudplatform</groupId>
<artifactId>scp-cf</artifactId>
</dependency>
<dependency>
<groupId>com.sap.cloud.s4hana</groupId>
<artifactId>s4hana-all</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.12</version>
</dependency>
Note: As new versions of the SDK are being released regularly, please refer to the relase notes if you want to use the most up-to-date version: S/4HANA Cloud SDK Release Notes.
Add Class BusinessPartnerServlet to Your Project
Right-click on the folder your HelloWorldServlet-class resides in and choose New > Java Class. Name the new class BusinessPartnerServlet. Copy the following code into your class:
package com.sap.cloud.sdk.tutorial;
import com.google.gson.Gson;
import org.slf4j.Logger;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import com.sap.cloud.sdk.cloudplatform.logging.CloudLoggerFactory;
import com.sap.cloud.sdk.odatav2.connectivity.ODataException;
import com.sap.cloud.sdk.s4hana.datamodel.odata.helper.Order;
import com.sap.cloud.sdk.s4hana.datamodel.odata.namespaces.businesspartner.BusinessPartner;
import com.sap.cloud.sdk.s4hana.datamodel.odata.services.DefaultBusinessPartnerService;
@WebServlet("/businesspartners")
public class BusinessPartnerServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private static final Logger logger = CloudLoggerFactory.getLogger(BusinessPartnerServlet.class);
private static final String CATEGORY_PERSON = "1";
@Override
protected void doGet(final HttpServletRequest request, final HttpServletResponse response)
throws ServletException, IOException {
try {
final List<BusinessPartner> businessPartners =
new DefaultBusinessPartnerService()
.getAllBusinessPartner()
.select(BusinessPartner.BUSINESS_PARTNER,
BusinessPartner.LAST_NAME,
BusinessPartner.FIRST_NAME,
BusinessPartner.IS_MALE,
BusinessPartner.IS_FEMALE,
BusinessPartner.CREATION_DATE)
.filter(BusinessPartner.BUSINESS_PARTNER_CATEGORY.eq(CATEGORY_PERSON))
.orderBy(BusinessPartner.LAST_NAME, Order.ASC)
.execute();
response.setContentType("application/json");
response.getWriter().write(new Gson().toJson(businessPartners));
} catch (final ODataException e) {
logger.error(e.getMessage(), e);
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
response.getWriter().write(e.getMessage());
}
}
}
Hint: If you chose a different package during creation of the Java Module, adapt the package name.
Save your class. The code snippet you just copied tries to establish a connection to an S/4HANA system and select all business partners from that system using the S/4HANA Cloud SDK. For more information please refer to Step 4 – Calling an Odata Service.
Setting up the connection to an S/4HANA System
To connect to an SAP S/4HANA system, you have to inform Cloud Foundry about the location of your ERP endpoint. As described in more depth in Step 4 – Calling an Odata Service, the recommended approach is to do this using the destination service.
Open the file mta.yml in your project folder and switch to the code editor.
In your mta.yml proceed as given in one of the options below (option 1 with the destination service is recommended).
Connecting to an S/4 HANA System Using the Destination Service on SAP Cloud Platform Cloud Foundry
For the recommended approach of using the destination service to configure the connection to your SAP S/4HANA system, proceed as follows. Note that this requires version 1.6.0 or higher of the SAP S/4HANA Cloud SDK.
In your multi-target application, you can setup the application to automatically create the necessary destination and xsuaa service and bind them to your application. To do so, open up the file mta.yml in your project folder. Add the following lines to the end of the file:
properties:
TARGET_RUNTIME: tomee
requires:
- name: my-xsuaa
- name: my-destination
resources:
- name: my-destination
type: destination
description: Destination Service
- name: my-xsuaa
type: com.sap.xs.uaa
The lines following resources: will create the services with the given parameters upon deployment to Cloud Foundry, while the lines following requires: will bind them to your application.
Maintain your ERP endpoint destination as explained in Step 4 – Calling an Odata Service in chapter Configure Destinations.
Deploy to Cloud Foundry and Display Business Partners
Build and deploy your project again. Open the URL and add /businesspartners to it. You should now see a list of businesspartners retrieved from the S/4HANA system:
Hi Sebastian,
I am trying S4HANA SDK from WebIDE, Initial java project from template working fine, but whenever i add sdk maven dependency in pom file (without add any Class code).
<dependency>
<groupId>com.sap.cloud.s4hana.cloudplatform</groupId>
<artifactId>scp-cf</artifactId>
<version>2.11.1</version>
</dependency>
<dependency>
<groupId>com.sap.cloud.s4hana</groupId>
<artifactId>s4hana-all</artifactId>
<version>2.11.1</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.12</version>
</dependency>
My Cf application is not starting showing 404 error. No idea why this is happening. Maven build using command "clean install" is executing successfully.
Kindly help.
Best Regards,
Vijay
Hello Vijay,
with newer versions of the template in Web IDE, it should no longer be necessary to manually add these dependencies. Can you try using the S/4HANA Cloud SDK without those adaptations.
If that doesn’t work, please share the relevant parts of the log of your application that gives you a 404.
Best regards,
Henning