Technology Blogs by Members
Explore a vibrant mix of technical expertise, industry insights, and tech buzz in member blogs covering SAP products, technology, and events. Get in the mix!
cancel
Showing results for 
Search instead for 
Did you mean: 
jpastorf
Explorer
8,048

Introduction


This is a scenario for connect a basic SAP-to-REST synchronous interface using JSON body parameters.
This blog contents:

  • Introduction

  • Motivation

  • System versions

  • Scenario

  • Step 1: System Landscape Directory

  • Step 2: Enterprise service builder

  • Step 3: Trusted CA’s certificate installation

  • Step 4: Integration Builder

  • Step 5: Generating the proxy

  • Step 6: Testing the proxy in ECC120UnitTest client

  • Conclusion


Motivation


We recently had to use PI to connect a REST web service. I had to learn basics about PI with REST, the blog “Consuming Your First Synchronous RESTful Service – Step-by-Step” was very useful, I appreciate the help.

I ran into this problem, I had to research about the specific configuration to use JSon as parameters in the body, not in the request header. Next, I’ll share the solution I’ve come up with…

System versions


SAP ECC 7.4 (SAP BASIS 740 SP 23)
SAP PI NETWEAVER 7.4 (SAP BASIS 740 SP 24)

Scenario


We would like to connect SAP ECC to a new RESTful web service, this uses JSON parameters as part of message body, not header. The first request we would connect to get a security identification token.This is the sample request format got from Soap UI:

POST https://xxxx.xxxx.com/api/xxxxService.svc/ExecuteCommand HTTP/1.1
Accept-Encoding: gzip,deflate
Content-Type: application/json
Content-Length: 91
Host: xxxx.xxxx.com
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)
{
"__type":"XXXX ",
"UserName":"XXXX",
"Password":"XXXX"
}

We got this sample result for the request:
{
"Data": {
"Data": [ {
"Codigo": "SecurityTokenId",
"Descripcion": "XXXX=="
}],
"Success": true
}
}
}

Next picture shows the scenario in Soap UI:


We had to consider these annotations:
1. Use of https requires of SSL certificate
2. There are not parameters in the header of the request
3. Media type is settled to application/json
4. The JSON body parameter contents special characters (“__type”)

 

Step 1: System Landscape Directory


Transaction SXMB_IFR


 

1. Create a new product and version


In tab General set vendor and product name
In tab Software Components set a new Product Instance and a new Software Component Version

 

Step 2: Enterprise service builder


We created these objects:


1. Create software component version, got from SLD



 

2. Data types for request and response


* The name of field “__type” is not allowed, we had to use XML to JSON name mapping in Integration Builder Communication Channel.


Data Type for response


 

3. Message Types

Request


Response


 

4. Service interfaces

Request


Response


 

5. Message mappings

Request


Response



*Object ns0:mt_aut_response right-click marked “Return as XML”

 

6. Operation Mapping

Request Tab


Response Tab


 

Step 3: Trusted CA’s certificate installation


In SAP NetWeaver Administrator / Configuration / Certificates and Keys we installed the CA certificate.


Installed certificate.


 

Step 4: Integration Builder


We created these objects:


Already existed the Business Systems BS_BNV_D and ECC120UnitTest, they were created in the system landscape directory.


 

1. Communication channel

SAP XI adapter type (sender):


 

SAP REST adapter type (receiver):

*At first, we couldn´t see the adapter type REST when we were creating the communication channel, we had to upgrade the version of component XI CONTENT SAP_BASIS 7.40


After import finalized:


We used the key store of the installed certificate in trusted CA’s.


Rest URL Tab


REST Operation Tab


Data Format Tab


*Element Name corresponds with the message type created in ESR for the response.



*Here we defined the mapping name between XML and JSON.


HTTP Headers Tab


 

2. Receiver determination


 

3. Interface determination


 

4. Sender agreement


 

5. Receiver agreement


 

Step 5: Generating the proxy


In SAP ECC, SPROXY transaction we created the proxy.


How class looks.



 

Step 6: Testing the proxy in ECC120UnitTest client.



Define parameters for test, changing String X with the correct values.


 

Sucessfull answer from remote host


 

How it looks in SXI_Monitor transaction.


Message overview in SAP NetWeaver.


 

Conclusion


This concludes my first blog; I hope it was helpful to understand the consumption of RESTful services using SAP PI REST adapter with JSON body parameters. Please do let me know your comments.

 
3 Comments
8754374758
Discoverer
0 Kudos
Hi Jonathan,

 

Thanks for sharing this blog!!

I am trying this similar scenario , I need to pass values to external system . I am trying to pass values to its payload fields mentioned in the body of the REST url. as mentioned in the attached POSTMAN screen shot. is this achievable through this approach?


Screen Shot taken from POSTMAN

jpastorf
Explorer
0 Kudos
Hello Ghowtam, thanks for read this blog.

I think you can use this approach to solve your issue.

Best regards,
0021555508
Newcomer
0 Kudos

details": {

                "carrier": {

                    "@type": "Organization",


Como se resolvería con el carácter @.
Labels in this area