New SAP Training: WIFMS4 – Inbound Interface Management in SAP S/4HANA

We have developed a standard SAP Training about managing inbound interfaces (ABAP Proxies) in SAP S/4HANA and SAP Business Suite (ERP, CRM, …): WIFMS4.

training

You learn how to implement a robust error handling using already available (and free) SAP standard technology:

  • Forward Error Handling (FEH) and
  • Error and Conflict Handler (ECH)

without the need of implementing a heavy solution, such as SAP AIF.

SAP Blog/Announcement on WIFMS4

SAP Online Training Catalog (with dates)

Integration Content Catalogs in SAP for Standard Interfaces

Looking for standard SAP interfaces?

There is a lot of interfaces and integration content available which you can use for your implementation project using SAP Process Orchestration (SAP PRO) / SAP Process Integration (SAP PI) or SAP HANA Cloud Platform, integration service (SAP HCI).

Here is an overview:



SAP API Hub

Catalog1


SAP Content Hub

Catalog2


SAP App Center

Catalog3


Enterprise Services Workplace

Catalog4


SAP Best Practices Explorer

Catalog5Catalog6


IDocs

  • You have to see in your WE60 or in SAP Help which IDoc might fit for your needs. Please consider that IDocs are not delivered by SAP anymore since 2003…

ABAP Inbound Proxy: Inside-Out vs. Outside-In

Implementing ABAP proxies is quite simple. You generate the ABAP classes via SPROXY (which connects to your ESR) and implement the code.

Regarding the Service Interface Design and Implementation you have a choice:

  • Outside-In: You define the Data Types and Message Types in the ESR and generate into ABAP
  • Inside-Out: You choose what you need in ABAP, import into ESR and use the ABAP perspective. Then you generate into ABAP.

Each approach has pros and cons. Here you see what makes the approaches so different and what fits your requirement best.

Development Process


Outside-In

IOOI1


Inside-Out

IOOI2


Summary


Outside-In

  • Clear choice if you are using Global Data Types (GDTs) and do not want to deal with the SAP-internal field names in the ESR or towards the Non-SAP applications

Inside-Out

  • Complex data structures (e.g. BAPIs) & no need to have an abstraction view in ESR
  • No usage of GDTs

 

 

ABAP Outbound Proxy: Set EOIO Queue

In order to use EOIO (Exactly-Once-In-Order), you have to pass the Queue ID to the class before calling the Outbound Proxy in your ABAP Program. It can be a static value like shown below (parameter) or a dynamic object like a document number:

 

PARAMETERS: p_queue TYPE sxmsqidapp.

DATA: l_proxy TYPE REF TO z…,
async_messaging TYPE REF TO if_wsprotocol_async_messaging.

CREATE OBJECT l_proxy.

async_messaging ?= l_proxy->get_protocol( if_wsprotocol=>async_messaging ).
async_messaging->set_serialization_context( p_queue ).

Usage Dependencies in Software Components

There is a useful functionality to reuse objects from one software component in another one.

You can define this usage dependency in SLD or in ESR (software dependencies & underlying software components).

It is needed if want to enhance Standard Enterprise Services or when you create a shared pool of objects that is strictly reused and not copied into other Software Components.

  • Data Type Enhancements (to enhance SAP Data Types)
  • Central Mappings, Function Libraries

Please do not use it to share interface objects across several components/systems.

Different release/deploy/maintenance cycles in the connected systems require a clearly decoupled approach which is also reflected by the software components. In case your data types/message types/service interfaces are equal in both software components, simply copy them over. Starting from then on, you have to add a new field in both components (or you copy again by overwriting the target object).

Key takeaway: Decoupling is more important than reuse (in this case)!

No Mapping required!

As your software components will use their own namespaces you should be careful designing the messages. When you copy over the message type from SWC_1 to SWC_2, the XML Namespace in SWC_2 will automatically have the Namespace of SWC_1. To use this feature smarter, simply use a cross-component, company-wide, global namespace.

XML Namespace in the Message Type: http://<company-domain>/xi/GLOBAL
Btw: This is approach is also used by SAP to design their namespaces.

Example

  • SWC_1: OTC_RETAILER 2016 of whitepaper-id.com
    Namespace: http://whint.de/xi/OTC/RETAILER
  • SWC_2: OTC_SAP_ERP 6.0 of whitepaper-id.com
    Namespace: http://whint.de/xi/OTC/SAP/ERP
  • XML Namespace across all SWC: http://whint.de/xi/GLOBAL

Decoupling and service-orientation at Amazon

Great article about Amazon´s transformation about a decade ago from an online book-seller into a billion-dollar, IaaS/cloud computing leader at API Evangelist

It is a clear and direct mandate, issued by Jeff Bezos (CEO and founder) to make sure all teams interact through well-defined service interfaces and do not interact on a point-to-point level.

My favorite sentence: “Anyone who doesn’t do this will be fired.  Thank you; have a nice day!

ABAP Outbound Proxy: Request Acknowledgements

To request System- or Application-Acknowledgements, you have to request them before calling the Outbound Proxy in your ABAP Program:

DATA: l_proxy TYPE REF TO z…,
acknowledgment_request_details TYPE PRX_ACK_REQUEST_DETAILS,
async_messaging TYPE REF TO if_wsprotocol_async_messaging.

CREATE OBJECT l_proxy.

async_messaging ?= l_proxy->get_protocol( if_wsprotocol=>async_messaging ).

acknowledgment_request_details-application_ok = abap_true.
acknowledgment_request_details-application_error = abap_true.

acknowledgment_request_details-system_ok = abap_true.
acknowledgment_request_details-system_error = abap_true.

async_messaging->set_acknowledgment_requested( details = acknowledgment_request_details ).

NWDS: Download SAP NetWeaver Developer Studio

NWDS Update Site

…you will need your S-User…

There is no 7.4 version, you have to use the 7.31 version for 7.4 (SP-Level minus 5)

Update: For 7.50 there is still no Eclipse plugin available… It has to be downloaded from the Softwarecenter.