Skip to Content

APIs, APIs, APIs: when building an extension for a product like S/4HANA, in the end it is all about APIs and about extensions point, meaning points where you can hook into existing applications and processes.

In my previous blogs, I wrote about the tools that you can use for extending S/4HANA (see, for example https://blogs.sap.com/2015/09/30/the-key-user-extensibility-tools-of-s4-hana/). In this blog, I want to guide you through the tools where you can find the related APIs and extension points.

External (Web Service) APIs

External APIs (Web Service) are listed on the SAP API Hub. You can find them under https://api.sap.com/ -> API Packages -> SAP S/4HANA Cloud and SAP Hybris Marketing Cloud. These APIs can be used for integration and side-by-side extensibility for example on SAP Cloud Platform. For additional information, read also my blog on https://blogs.sap.com/2016/10/19/s4hana-extensibility-connect-sap-s4hana-cloud-sap-hana-cloud-platform-hcp/.

You can see here the screenshot with the list of S/4HANA APIs (more than 170 at the time of revisiting the API hub in May 2018, and but I expect that this number still increasing)

Let me add some information about the differences between On-premise and Cloud:

In SAP S/4HANA Cloud, each API comes with a communication scenario (typically with a technical name SAP_COM_xxxx) that is indicated in the detailed screen of an API together with the documentation. You can use the the name of the communication scenario to activate the service as described in my blog https://blogs.sap.com/2016/10/19/s4hana-extensibility-connect-sap-s4hana-cloud-sap-hana-cloud-platform-hcp/. Together with the communication scenario, SAP deliveres a user role and additional configuration content that is applied when creating the communication arrangement.

In SAP S/4HANA (on-premise) you have to do some configuration steps. If the API is of type OData, go to the OData Gateway, call transaction /IWFND/MAINT_SERVICE, click Add, select a backend system. If the service is available in the backend system, you can configure it. Then you have to define a role and a technical user to be able the call it. (This is what is automated by the comm scenario in S/4 HANA Cloud). For details, please refer to the Gateway documentation. If the API is a SOAP API, then you have to do the “usual” steps to configure a SOAP API.

In general, APIs that are available in S/4HANA Cloud are also in the on-premise version in a “Cloud first” way: this means SAP is shipping quartely Cloud releases and the on-premise version that is shipped once a year will contain the APIs of the previous Cloud versions.

CDS/VDM Views

CDS/VDM Views are the S/4HANA read APIs for in-app extensibility. You can use them

  • to build new analytical apps (so-called cubes and queries, and on top of them analytical reports and KPIs)
  • in custom code extensions (“BAdIs”)
  • to build your own custom CDS views and expose these views as OData service as external API.

You can see all released CDS Views in the following tools:

  • View Browser Fiori app
  • Custom CDS Views Fiori app (released CDS views except analytical queries)
  • Custom Analytical Queries Fiori app (released CDS views of type analytical query)
  • ABAP Development Tools for Eclipse: “Released Objects” Repository tree

The first three tools are available in Cloud and on-premise, the Eclipse tool is available in on-premise only.

The following screenshot shows the View Browser (contained in the Fiori catalog SAP_CA_BC_ANA_AQD_PC in SAP S/4HANA Cloud).

You can open the details screen a CDS view and inspect the view properties. In the Fiori app Custom CDS Views and Custom Analytical Queries, you can also do a data preview in this app.

The following screenshot shows the “Released Objects” Repository tree in ADT:

You can configure the tree in Eclipse with: New Repository Tree -> Released Objects

When updating this blog, there were >1300 released CDS views available.

You can find also documentation on CDS/VDM Views in the S/4HANA product assistance (https://help.sap.com -> SAP S/4HANA Cloud) -> Product Assistance -> Generic Information -> Analytics -> CDS Views).

What is CDS and VDM? In short, we can say that CDS is a technology, while VDM stands for the semantical model.

CDS (Core Data Services) is a key component of the SAP technology for levering qualities such as:

  • Capture and share business-rich data models using the SAP HANA relational model
  • Enrich the data models with specific semantics e.g. for UI, draft, analytics, search, actions and events. It’s also enabling the S/4HANA APIs
  • Leverage SAP HANA optimally in most relevant scenarios
  • Enable and standardize esp. zero downtime, verticalization, extensibility, access control (based on ABAP authority objects)
  • Integration into ABAP programming model and improve development productivity
  • Exposure of CDS models and data to SAP Cloud Platform, e.g. for Business Objects Cloud and extension apps

SAP Virtual Data Model (VDM) represents the simplified and harmonized business oriented semantically enriched data model. “Virtual” refers to the fact that the VDM semantical model may deviate from the historically grown persistent model of database tables to make it simpler and easier to understand. In SAP S/4HANA, the VDM is established by specifically classified/annotated CDS Views.

This is a short impression, the complete CDS/VDM story is a subject for a subsequent blog.

Analytical Queries

Analytical Queries are the base objects for analytical UIs (KPIs and Reports). Technically they are also CDS/VDM View, but with a very specific semantics. You can see all released SAP Analytical Queries in the overview page of the Custom Analytical Queries app.

Business Contexts for Custom Fields and Logic

Business Contexts are SAP entities that can be extended by custom fields and/or custom logic. Typically, business contexts represent “business document tables” or “business object nodes”, Examples for extensible business contexts are: Billing Document, Billing Document Item, Billing Due List Item.

You can find the list of extensible business context in the Extensibility Cockpit Fiori app (in Fiori catalog SAP_CA_BC_EXT_COCKPIT_PC) with this app, you can explore all business contexts that are enabled for field extensibility and the related data sources, services, enhancement options, etc. Or you can find them in the Custom Fields and Logic Fiori app.

The following screenshot shows the Extensibility Cockpit Fiori app:

 

 

When revisiting the app during my lat update of this blog, I was seeing >150 business contexts enabled for custom field and/or logic enhancement.

 

Class APIs

Class API can be used in custom logic as re-use methods. When writing this blog, there is no browser for class APIs available. You must go into the coding and use the code completion (cntrl + blank) to see the available class API together with its signature.

 

In total, there are >80 class APIs available at the time of updating this blog.

Summary

SAP has defined the API hub as the central place for publishing all external APIs. The publishig of APIs for S/4HANA has started, I exect more an more APIs appearing here.

For in-app extensibility, internal APIs (CDS views and classes) and extension points are used. A central tool for discovery is still missing, so for the time being you must use different tools when searching for APIs and extension points. This should be fixed by a central tool in the future. I will be happy to report on the discovery tool in a future blog once this is available.

To report this post you need to login first.

23 Comments

You must be Logged on to comment or reply to a post.

  1. Muruga MuthuKrishnan

    Hi Thomas,

    Thanks for sharing, i have two questions can you clarify

    1. Currently CDS views are able to join but it is not possible to implement any custom logics with LOOP, DO and so on like in ABAP. Is there any possibility to achieve this in API? if Yes how it can be?
    2. Where will you write your class API’s? say if i want to enhance my existing sales order item cube CDS with some look-up in tables/views with certain manipulation through API is it possible for me to achieve this?

    Thanks,

    Muruga

     

     

    (0) 
  2. Thomas Schneider Post author

    Hi Muruga,

    1. this is true. CDS only supports SQL features, no loops, do.
    2. In S/4HANA (on premise) you can still write ABAP code. In S/4HANA Cloud you cannot write your own class APIs.this i

     

    (0) 
    1. Muruga MuthuKrishnan

      Hi Thomas,

      Thanks for your update, in S/4HANA on premise how we can write ABAP code in CDS view? i am looking for this can you show some light to this.

      Thanks,

      Muruga M

      (0) 
  3. Arun Nair

    Hi Thomas,

    Thanks for the blog. I can see in the example that you can access CDS views and Class APIs in Custom Business Object. But I just wanted to know if External whitelisted APIs can be used as well. I read in one of your earlier blogs where Marketing Edition was using some OData service from 3rd party to populate data in its custom object. There is also a demo video of how a custom object stores Twitter data, but again the demo doesn’t show how its technically done.

    Is there any example, blog or code-snippet which shows in detail how to do this? It will be really helpful.

    Regards,

    Arun.

    (0) 
    1. Thomas Schneider Post author

      Hi Arun,

       

      the demo was build with the help of SAP Cloud Platform Integration Services (fka HCI). So HCI is pulling data out of the external source and pushing it into the Custom BO via OData service. So a call from the Custom BO into an external service is not involved (it is on our backlog, but not available yet).

      Best regards,

      Thomas

      .

      PS: Here, you can find a blog post from a colleague that describes hto work with the OData services of a custom BO: https://blogs.sap.com/2017/05/12/usage-of-odata-service-of-custom-business-object/

       

       

       

       

       

      (0) 
  4. Former Member

    Hi Thomas Schneider 

    I am very new to this. Could you please confirm whether my below assumption is true?

    The API’s are meant for integrating S/4HANA Cloud solution with other SAP products (Cloud or On-premise) and 3rd party products. For S/4 HANA on-premise version, we don’t have such API’s, and the external system has to use other methods like OData service to communicate with them.

    Thanks,

    Johann

    (0) 
    1. Benjamin Schuler

      Hi Johann,

      what I heard is that the API’s are meant to offer extensibility to S/4HANA Cloud editions, however the basis for the API’s are function modules which are also available in an on-premise system. This would be a nice setup because then you could develop extensions that work with both on-premise and cloud S/4HANA systems.

      So the question is: Can these API’s be setup for an on-premise system in the same way as a cloud system would offer them?

      Hopefully Thomas can shed some light on this scenario, would be very interesting to understand the architectural setup behind the API’s 🙂

      Regards,

      Benjamin

      (1) 
      1. Former Member

        Thank you Benchamin for the reply. Most of the  SAP document/blog mentioning S/4Hana API, focuses on Cloud version only. They don’t say clearly whether or how this can be used in on-premise version. So as a newbie like me, it’s too difficult to understand.

        (0) 
    2. Thomas Schneider Post author

      Hi Johann,

       

      the APIs are available in S/4HANA Cloud and also in the on-premise version (Cloud first: means SAP is shipping quartely Cloud releases and on-premise once a year). So, the difference ist not the APIs. But in Cloud, you get them as prepackaged content, whihc is not available in on-premise.

      Best regards,

      Thomas

      .

       

       

      (0) 
      1. Benjamin Schuler

        Hi Thomas,

        when you say they are not available as prepackaged content, this means that there is a way to configure them manually in an on-premise system, correct? Do we have some documentation on how one would configure an on-premise system to offer (some of the) APIs in a comparable way? At this point I am looking for the API called “Process Material Documents”, but there will be a need for others as well.

        Thanks for any clarification.

        Best regards,

        Benjamin

         

        (0) 
        1. Thomas Schneider Post author

          Hi Benjamin,

          let me take your example to explain a bit on the differences between SAP S/4HANA Cloud and on-premise. (Please note that this is not an official documentation but just my “experience”).

          1) If you open SAP API hub (https://api.sap.com/shell/api) and enter “Process Material Documents” into the search bar, you get the following screen that describes the API in SAP S/4HANA Cloud:

          As mentioned this documentation is relevent for S/4HANA Cloud, but as the Cloud and the on-premise version have the same codeline, it should be also available in the on-premise version that was shipped after the release of this API. But you need to check in your On-Premise system. This depends, of course on the version of the on-premse system. You can, of course, also check the documentation of the on-premise system.

          2) In S/4HANA Cloud you can easily configure the API using the preshipped content that is provided in the communication scenario Material Document Integration (SAP_COM_0108) and which is documented in the link behind Scope Items (“Stock Handling – Rework, Scrap, Blocked Stock (BMC)”). This is related to S/4HANA Cloud only.

          For the on-premise scenario, you can do the following:

          As this is an OData API, go to the OData Gateway, call transaction /IWFND/MAINT_SERVICE, select a backend system. If the service is available in the backend system, you can configure it. Then you have to define a role and a technical user to ba able the call it. (This is what is automated by the comm scenario in S/4 HANA Cloud). For details, please refer to the Gateway documentation.

          If the API would be a SOAP API, then you would habe to do the “usual” steps to configure a SOAP API.

           

           

          (0) 
          1. Michael Walker

            So if I’m coding in ABAP in S4 on premise, I have to call an odata service on the gateway in order to use a standard “api”?  There is no corresponding call I make within S4 itself? If that’s the case, the S4 system has no direct visibility to that service to facilitate coding.  Meaning, no code completion, patterns, etc.  Is that correct?

            (0) 
              1. Michael Walker

                I’m not sure how helpful the class api’s are if they are not documented.  I would have hoped that the coding being done to support all the odata services could be leveraged internally with the S4 stack so as to reduce redundancy and discrepancies.  Meaning that any external call to the odata service would be assured of going through the same code logic as something called from within S4 abap.

                CDS/VDM only help me in read situations.  The vast majority of our coding customization is stringing together multiple calls(Call transaction, bapis, etc).  I was hoping that the future would provide a better solution to the different methods to do that.

                (0) 
                1. Thomas Schneider Post author

                   

                  Hi Michael,

                  for “read” I would recommend: use the released “I_”-Views which correspond to the OData-Services. Typically they have the same or a similar name as the OData entity (starting typically with “A_”). As the naming conventions of S/4HANA follow a global field catalogs, the field names are normally the same in the OData service and in the CDS-View. You can see this, for example, nicely in the the OData service Product Master Integration or other “modern” OData service. For example

                  OData entity                                                              CDS View             Table
                  (in the Product Master Integration OData service)

                  A_Product                                            ->                   I_Product           -> MARA

                  A_ProductSales                                   ->                   I_ProductSales -> MARA/MAV1

                  A_ProductPlant                                    ->                  I_ProductPlant   -> MARC

                   

                  for “write” I would recommend: as of today, use the well-known function modules or BAPIs for write. They are well established in the SAP community. And they are even more flexible in the “local” scenario because the OData service is always a transactional unit. In the case of the function modules or BAPIs, you can orchestrate mutliple calls in one transaction.

                  This may change in the future, but I think, for the time being, many developers may want to stick to the traditional programming model for the write use case.

                  (0) 
  5. Chenxi Gao

    Hi Thomas,

    Thanks a lot for your sharing, I have a question regarding native enhancement implementation(in-app extension) in S/4 Cloud. If I can find a proper business context and enhancement option(e.g. for sales order), is it possible I can implement some logic to update other business object directly(standard BO or custom BO, here if I’d like to update former document or store some value into custom BO I created after releasing SO). What you mentioned in blog is there is no browser or document I search what predefined class API can be used for certain enhancement point of business context and most of class API seems to be for only read purpose. I know calling a BAPI or updating table using SQL is not possible in S/4 Cloud, but I expect there would be some way we can do some custom modification like what normally did in traditional ERP/S4 previously. Now the only solution for any particular custom logic to enhance standard SO function is built a side-by-side extension on SAP Cloud platform to orchestrate available API for SO and OData for custom object into one transaction.

    Regards,

    Chenxi

    (0) 
    1. Thomas Schneider Post author

      Hi Chenxi,

      you have to distinguish:

      • write custom business object (CBO) from coding inside CBO -> always possible
      • write custom business object (CBO) from enhancement option (BAdI) in an SAP coding -> theoretically if the BAdI is enabled for writing CBOs. But as far as I know, no BAdI is enabled
      • write standard object (from coding in CBO or from enhancement option (BAdI) in an SAP coding -> this is possible if the standard object provides a relesed write API. But as far as I know, no write APIs are available yet.

      Best regards,

      Thomas

       

       

      (0) 
      1. Chenxi Gao

        Hi Thomas,

        Thanks for your reply, so, the only way to achieve the enhancement based on standard SO transaction in case of any requirement on additional update other standard object or CBO is to build a whole new transaction for sales order in SAP Cloud Platform like copying the fiori UI, orchestrating OData API of sales order and APIs for custom objects to update them all in one transaction, is that right?

        Regards,

        Chenxi

        (0) 
        1. Thomas Schneider Post author

          Yes, this would be one valid option, in particular, if you need a complete new UI and lots of custom functionality.

          But, if you only want to create a custom / SAP business object from a standard enhancement option (BAdI) you can request that the BAdI is enhanced accordingly or to request a write API from a standard SAP BO.

          You can find the request process here: https://launchpad.support.sap.com/#/notes/2483157

          Best regards,

          Thomas

          .

           

          (0) 

Leave a Reply