This is a test message to test the length of the message box.
Login
BTP On-Premise (OData)
Erstellt von Software-Heroes

BTP - Anbindung On-Premise (Consumption Model v2)

236

In diesem Artikel wollen wir noch einmal einen Update zur Anbindung von On-Premise Systemen geben und wie dies mit einem Communication Arrangement durchgeführt wird.

Werbung


In einem älteren Artikel haben wir die Anbindung eines On-Premise OData über das Consumption Model beschrieben. In diesem Artikel werden wir einmal auf das neue Consumption Model v2 eingehen, was sich mit Release 2311 verändert hat und wir werden die Anbindung über das Communication Arrangement machen, anstatt den Destination Service zu verwenden. 

 

Einleitung

Mit dem letzten Release auf dem ABAP Environment (2311) wurden Anpassungen am generierten Consumption Model für OData Integrationen gemacht. Diese Änderungen wollen wir uns in diesem Artikel einmal genauer anschauen. Zuvor wollen wir uns allerdings noch die Anbindung des On-Premise System über ein Communication Arrangement anschauen.

 

Consumption Model v2

Die neue Version des Consumption Model unterstützt nun die Generierung von v2 und v4 Consumption Models auf dem ABAP Environment. Damit können diverse Definitionen an OData Services geladen werden, vor allem da die Auswahl an v4 Services immer weiter zunimmt. Es werden nun auch viel weniger Artefakte durch den Wizard generiert. Zuvor wurde neben dem Consumption Model, für jede Entität eine abstrakte CDS Entität generiert, was je nach Anzahl der Entitäten zu vielen zusätzlichen Objekten geführt hat. Nun wird nur noch eine Klasse erzeugt die die einzelnen Entitäten als Typen definiert. Zusätzlich stehen verschiedene Konstantenstrukturen zur Verfügung, die die Entitäten und Funktionen zusammenfassen und für den Aufruf wiederverwendbar machen.

 

Kommunikation

Die nächste Besonderheit gegenüber der Destination ist die Generierung verschiedener Objekte für die Kommunikation mit dem Backend. Die Objekte werden für die Konfiguration benötigt.

 

Outbound Service

Der Outbound Service bestimmt das Protokoll der Kommunikation und die Objekte benötigen eine entsprechende Endung im Namen, so müssen HTTP Services mit _REST enden.

 

Das generierte Objekt besitzt nicht sehr viele Einstellungsmöglichkeiten und muss nicht mehr generiert werden.

 

Communcation Scenario

Als nächstes benötigen wir ein Communication Scenario, dass wir dann später bei der Einrichtung der Verbindung verwenden werden. In ADT kannst du im Anlagedialog nach dem Objekt "Communication Scenario" suchen, entsprechend geben wir einen Namen und eine Beschreibung.

 

Das Objekt besitzt einige Einstellungsmöglichkeiten, die wir aber nicht ändern müssen. Im unteren Teil findest du verschiedene Reiter, um die Berechtigungen und die verschiedenen Services hinterlegen zu können.

 

Wir wechseln nun auf den Reiter "Outbound", da wir aus dem System heraus das On-Premise System aufrufen wollen. Hierbei handelt es sich um eine Outbound Communication (aus der Sicht des ABAP Environment). Den gerade generierten Outbound Service hinterlegen wir, die Authentifizierungsmechanismen Basic (User und Passwort), sowie X.509 (Principal Propagation) sind bereits aktiviert und erlauben damit diese beiden Arten von Kommunikation.

 

Hinweis: Zum Abschluss muss noch der Button "Publish Locally" betätigt werden, damit das Szenario in der App "Communication Arrangement" erscheint. Ansonsten kann das Szenario später nicht konfiguriert werden.

 

Verbindung

Im letzten Artikel zu diesem Thema hatten wir den Destination Service verwendet, um auf das On-Premise System zuzugreifen. Dieser wird für die ABAP Szenarien aber mittlerweile als obsolet angesehen und man sollte vor allem auf Communication Arrangements setzen. Für die Konfiguration werden die folgenden beiden Anwendungen benötigt:

 

Communication Systems

Das Communication System wird in der gleichnamigen App konfiguriert und stellt so etwas wie die Verbindung, vergleichbar der SM59, dar. In diesem Fall verwenden wir den aktivierten Destination Service, um die Verbindung aufzubauen. Im Szenario des Communication System, kann diese Kommunikation weiterverwendet werden, vor allem wenn man die Destinations auch noch für Verbindungen mit CAP oder BAS benötigt, so spart man sich die doppelte Konfiguration.

 

Communication Arrangements

Über die App erstellen wir über "New" einen neuen Eintrag und suchen nach unserem erzeugten Communication Scenario. Den Namen können wir frei vergeben, haben wir nur eine Kommunikation mit diesem Szenario empfiehlt sich der gleiche Name.

 

In den Einstellungen hinterlegen wir dann noch das "Communication System", um so über das Szenario die Verbindung zum On-Premise System aufzubauen.

 

Model anlegen

Nun legen wir uns das Consumption Model an, dazu benötigen wir wieder die Metadaten des On-Premise Services, wie du die erhältst erfährst du im alten Artikel zur Anbindung. Nach dem Starten des Wizard geben wir den Namen und die Beschreibung des Consumption Models an:

 

Im nächsten Schritt geben wir den Pfad zur Metadata an, hier kannst du die Suchhilfe verwenden, wenn du den Pfad nicht kopiert hast. Hier vergibst du auch den Namen der Klasse, die angelegt wird.

 

Die nächsten zwei Schritte kannst du bestätigen, hier werden die Entitäten und Typen aufgelistet, sowie mögliche Objekte, die nicht aus dem Service übernommen werden können. Nach Abschluss der Generierung erhältst du das gewohnte Bild des Consumption Models: den Link zur Klasse, die Liste der Entitäten und einen Code-Wizard mit Beispielcodings zur schnellen Implementierung eines Testbeispiels.

 

In der Klasse stehen nun die jeweiligen Typen (Struktur und Tabelle) zur Verfügung, weiterhin gibt es eine Konstantenstruktur GCS_ENTITY_SET, über die man die einzelnen Entitäten ansprechen kann.

TYPES:
  BEGIN OF tys_company_names_type,
    company_name        TYPE c LENGTH 60,
    branch              TYPE c LENGTH 50,
    company_description TYPE c LENGTH 255,
  END OF tys_company_names_type,
  tyt_company_names_type TYPE STANDARD TABLE OF tys_company_names_type WITH DEFAULT KEY.

CONSTANTS:
  BEGIN OF gcs_entity_set,
    company_names TYPE /iwbep/if_cp_runtime_types=>ty_entity_set_name VALUE 'COMPANY_NAMES',
  END OF gcs_entity_set.

 

Hinweis: Nach der Generierung können die Typen und Strukturen umbenannt werden, um möglichen Namenskonventionen gerecht zu werden.

 

Test

Um nun den Aufruf zu Test implementieren wir einmal das Beispielcoding aus dem Consumption Model. Dabei haben wir das Coding entsprechend angepasst und aufbereitet:

DATA lt_business_data TYPE TABLE OF zcl_bs_demo_rap_onprem_newv2=>tys_company_names_type.

DATA(lo_destination) = cl_http_destination_provider=>create_by_comm_arrangement( comm_scenario = 'ZBS_DEMO_COMM_SCENARIO' ).
DATA(lo_http_client) = cl_web_http_client_manager=>create_by_http_destination( lo_destination ).

DATA(lo_client_proxy) = /iwbep/cl_cp_factory_remote=>create_v2_remote_proxy(
    is_proxy_model_key       = VALUE #( repository_id       = 'DEFAULT'
                                        proxy_model_id      = 'ZBS_DEMO_RAP_ONPREM_NEWV2'
                                        proxy_model_version = '0001' )
    io_http_client           = lo_http_client
    iv_relative_service_root = '/sap/opu/odata/sap/ZBS_API_COMPANY_NAME_O2/' ).

DATA(lo_request) = lo_client_proxy->create_resource_for_entity_set(
    zcl_bs_demo_rap_onprem_newv2=>gcs_entity_set-company_names )->create_request_for_read( ).

lo_request->set_top( 50 )->set_skip( 0 ).

DATA(lo_response) = lo_request->execute( ).
lo_response->get_business_data( IMPORTING et_business_data = lt_business_data ).

 

Im ersten Schritt erzeugen wir uns eine Destination über das Konfigurierte Communication Arrangement, Pflichtfeld ist das Communication Scenario für die Erzeugung der Destination. Wenn der Datensatz nicht eindeutig ist, weil zum Beispiel mehr Services zugeordnet wurden, müssen zusätzliche Informationen mitgegeben werden:

  • Communication System - Information zum System, welches in der App "Communication Systems" angelegt wurde und dem Szenario zugeordnet ist.
  • Service ID - Name des Outbound Service der verwendet wird.
DATA(lo_destination) = cl_http_destination_provider=>create_by_comm_arrangement(
    comm_scenario = 'ZBS_DEMO_COMM_SCENARIO'
    comm_system_id = '<Comm System Id>'
    service_id     = '<Service Id>' ).

 

Für die Definition der Typen können wir die Typen aus der Klasse verwenden:

DATA lt_business_data TYPE TABLE OF zcl_bs_demo_rap_onprem_newv2=>tys_company_names_type.

 

Ebenso für die Übergabe des Entitätsnamen an die Abfrage:

DATA(lo_request) = lo_client_proxy->create_resource_for_entity_set(
    zcl_bs_demo_rap_onprem_newv2=>gcs_entity_set-company_names )->create_request_for_read( ).

 

Fazit

Das neue Consumption Model bietet viele Vorteile gegenüber dem alten Model, ist aber im aktuellen Status noch nicht perfekt. Im nächsten Jahr wird es weitere Updates geben, um Workarounds zum Aufruf von Actions und Function überflüssig zu machen und in den Standard zu integrieren.

 

Weitere Informationen:
SAP Blog - Service Consumption Model 2 for OData Client Proxy


Enthaltene Themen:
BTPRAPABAP EnvironmentOn-PremiseOData
Kommentare (0)



Und weiter ...

Bist du zufrieden mit dem Inhalt des Artikels? Wir posten jeden Freitag neuen Content im Bereich ABAP und unregelmäßig in allen anderen Bereichen. Schaue bei unseren Tools und Apps vorbei, diese stellen wir kostenlos zur Verfügung.


RAP - Excel Datei laden

Kategorie - ABAP

In diesem praktischen Beispiel schauen wir uns die Verarbeitung von Excel in ABAP mit den neuen XCO Klassen an und wie wir die Datei in unser RAP Objekt bekommen.

20.12.2024

RAP - Semantischer Schlüssel

Kategorie - ABAP

Wofür benötigst du den semantischen Schlüssel und wie wird er im ABAP RESTful Programming Model dargestellt? Hier gibt es mehr dazu.

13.12.2024

RAP - Upload von Dateien (Stream)

Kategorie - ABAP

Wie kannst du einfach Dateien in deine RAP Entität laden und diese in ABAP zur Verfügung stellen? Hier schauen wir uns einmal die Details an.

10.12.2024

RAP - Report Pattern

Kategorie - ABAP

Wie ist das Report Pattern in RAP aufgebaut und was kannst du damit machen? Mehr dazu in diesem ABAP Artikel.

06.12.2024

ABAP Environment - Die richtige Größe (Sizing)

Kategorie - ABAP

In diesem Artikel schauen wir uns an, wie du das SAP BTP ABAP Environment auf die richtige Größe für dich bekommst.

03.12.2024