Application Development Blog Posts
Learn and share on deeper, cross technology development topics such as integration and connectivity, automation, cloud extensibility, developing at scale, and security.
cancel
Showing results for 
Search instead for 
Did you mean: 
MarcelloUrbani
Active Contributor

Introduction


The ADT is the basis of ABAP in eclipse, and it's a bit of a strange beast.

It's basically a RESTful API delivered over RFC. So you don't give Eclipse an URL to access to but a SAPGUI connection.

 

This is well known and explained in this old blog from Jerry Wang which has been a great starting point for tinkering with it. Looking at the ABAP communication log is very easy to figure out how the API works

One think it doesn't tell is that the same API is also available over regular http(s) once the right endpoint is enabled in SICF

Which allows us to use it from any platform that can do rest calls.

A few months ago I started using it to create the vscode extension I recently wrote about

 

Accessing ADT from Node.js


After a friend made me notice the API interface per se could be useful for other projects, I extracted and refactored the API in an NPM module. It's far from comprehensive, but does allow to access a good share of it from javascript or typescript.

 

The sorrows


While it's great to be able to access this API, and most calls are rather straightforward, I did get my share of headaches running around this or that quirk. A quick catalogue of the worst:

Stateful sessions


While http was designed to be stateless, ADT locks files before saving them and unlocks them after. This requires stateful connections, which SAP/BSPs has been supporting for a while.

Sadly the ADT plugin started honouring this only around basis 7.51.

Eclipse doesn't have this issue as RFC is stateful by nature

To overcome this I wrote a small plugin which makes it possible for older systems (tested on a 7.31)

 

Stateless operations


Like saving or deleting an object require a stateful connection, creating one require a stateless call.

Weird things happens if you use a stateful session to create an object, like closing the session (which invalidates all links) and not being able to search for the object until the connection is dropped



A statelessClone property allows to use a secondary connection for stateless calls.

Format changes


API went through quite a few changes over the years.

Some subtle, like the different type IDs for usage references found in methods.

Some fundamental like a method which returns HTML in 7.31 and XML in 7.5x, or an object type only supported

The library is a bit inconsistent about how much

Conclusions


While for many applications PyRfc is probably a better option, I hope this will be valuable as a libary if you want to access the ADT API from javascript, or as an example for other languages. Should be possible doing it from a browser too but I never tried
2 Comments