1. Einführung
In diesem Codelab finden Sie eine Anleitung zum Erstellen eines Dienstkontos und zum Konfigurieren der vom ABAP SDK for Google Cloud bereitgestellten Tabelle „Client Key and Communication Map“ sowie zum Aufrufen der Cloud Storage JSON API in ABAP.
In diesem Codelab werden die folgenden Google Cloud-Dienste verwendet:
- Compute Engine
- Netzwerkdienste
- Cloud Shell
- Cloud Storage JSON API Version 1
Hinweis: Wenn Sie ein neues Google Cloud-Projekt erstellen, werden bestimmte APIs und Dienste, einschließlich Cloud Storage, automatisch aktiviert. So können Sie diese robuste Speicherlösung sofort nutzen. Sie müssen sie also nicht zusätzlich aktivieren.
Vorbereitung
- Sie benötigen Zugriff auf ein SAP-System mit installiertem ABAP SDK for Google Cloud.
- Im Codelab Install ABAP Platform Trial on Google Cloud Platform and Install ABAP SDK (ABAP-Plattform-Testversion auf der Google Cloud-Plattform installieren und ABAP SDK installieren) erfahren Sie, wie Sie ein neues System einrichten.
Aufgaben
Sie erstellen die folgenden Programme in Ihrem SAP-System mit dem ABAP SDK for Google Cloud.
- Cloud Storage-Bucket erstellen
- Eine Datei vom Anwendungsserver lesen und in den erstellten Cloud Storage-Bucket hochladen.
2. Voraussetzungen
- Ein Browser, z. B. Chrome oder Firefox.
- Ein Google Cloud-Projekt mit aktivierter Abrechnung oder ein kostenloses Testkonto für 90 Tage für die Google Cloud Platform erstellen
- SAP GUI (Windows oder Java) auf Ihrem System installiert Wenn die SAP GUI bereits auf Ihrem Laptop installiert ist, stellen Sie eine Verbindung zu SAP her, indem Sie die externe IP-Adresse der VM als IP-Adresse des Anwendungsservers verwenden. Wenn Sie einen Mac verwenden, können Sie auch die SAP GUI for Java installieren, die über diesen Link verfügbar ist.
3. Hinweis
- Sie benötigen Zugriff auf ein SAP-System mit installiertem ABAP SDK for Google Cloud.
- Im Codelab Install ABAP Platform Trial on Google Cloud Platform and Install ABAP SDK (ABAP-Plattform-Testversion auf der Google Cloud-Plattform installieren und ABAP SDK installieren) erfahren Sie, wie Sie ein neues System einrichten.
- Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines (z. B.
abap-sdk-poc).
- Die Abrechnung für das Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für ein Projekt aktiviert ist Überspringen Sie diesen Schritt, wenn Sie das Konto mit 90-tägigem kostenlosen Testzeitraum verwenden.
- Sie verwenden Cloud Shell, eine Befehlszeilenumgebung, die in Google Cloud ausgeführt wird. Klicken Sie in der Cloud Console rechts oben auf Cloud Shell aktivieren:
- Führen Sie die folgenden Befehle aus, um sich für Ihr Konto zu authentifizieren und das Standardprojekt auf
abap-sdk-poc
festzulegen. Als Beispiel wird Zoneus-west4-b
verwendet. Ändern Sie bei Bedarf das Projekt und die Zone in den folgenden Befehlen entsprechend Ihren Anforderungen.
gcloud auth login
gcloud config set project abap-sdk-poc
gcloud config set compute/zone us-west4-b
- Sie benötigen Zugriff auf ein SAP-System, in dem das ABAP SDK for Google Cloud installiert ist.
- Sie müssen Codelab 1 (ABAP Platform Trial 1909 auf der Google Cloud Platform installieren und ABAP SDK for Google Cloud installieren) und Codelab 2 (ABAP SDK-Authentifizierung mithilfe von Tokens für SAP konfigurieren, die auf einer Compute Engine-VM gehostet wird) abschließen, bevor Sie mit diesem Codelab fortfahren können.
- Wenn Sie Codelab 1 und Codelab 2 abgeschlossen haben, wurde Ihnen ein ABAP Platform Trial 1909-System in Google Cloud mit der erforderlichen Authentifizierungs- und Verbindungskonfiguration bereitgestellt.
- Wenn Sie Codelab 1 und Codelab 2 nicht abgeschlossen haben, haben Sie nicht die erforderliche Infrastruktur und Konnektivität, um die Schritte in diesem Codelab auszuführen. Sie müssen daher Codelab 1 und Codelab 2 abschließen, bevor Sie mit diesem Codelab fortfahren können.
4. Dienstkonto mit der Rolle „Storage Object User“ erstellen
So erstellen Sie ein Dienstkonto mit der erforderlichen Rolle:
- Führen Sie im Cloud Shell-Terminal den folgenden Befehl aus:
gcloud iam service-accounts create abap-sdk-storage-tester \
--display-name="Service Account for Cloud Storage"
- Fügen Sie dem im vorherigen Schritt erstellten Dienstkonto nun die erforderlichen Rollen hinzu:
gcloud projects add-iam-policy-binding abap-sdk-poc \
--member='serviceAccount:abap-sdk-storage-tester@abap-sdk-poc.iam.gserviceaccount.com' \
--role='roles/storage.objectUser'
Im obigen Befehl wird abap-sdk-poc
als Platzhalter für das Google Cloud-Projekt verwendet. Ersetzen Sie abap-sdk-poc
durch Ihre Projekt-ID.
- Rufen Sie die Seite IAM auf, um zu prüfen, ob die Rolle hinzugefügt wurde. Das von Ihnen erstellte Dienstkonto sollte zusammen mit der zugewiesenen Rolle aufgeführt sein, wie unten dargestellt:
5. Clientschlüsselkonfiguration erstellen
Nachdem Sie die Voraussetzungen auf Google Cloud-Seite eingerichtet haben, können wir mit der Konfiguration auf SAP-Seite fortfahren.
Für die Authentifizierung und für die Konfiguration von Verbindungen verwendet das ABAP SDK for Google Cloud die Tabelle /GOOG/CLIENT_KEY
.
So pflegen Sie die Konfiguration in der Tabelle /GOOG/CLIENT_KEY:
- Geben Sie in der SAP-GUI den Transaktionscode
SPRO
ein. - Klicken Sie auf SAP-Referenz-IMG.
- Klicken Sie auf ABAP SDK for Google Cloud > Grundlegende Einstellungen > Clientschlüssel konfigurieren.
- Achten Sie auf die folgenden Werte in den Feldern:
Feld | Wert |
Google Cloud-Schlüsselname | TEST_STORAGE |
Name des Google Cloud-Dienstkontos |
|
Google Cloud-Bereich |
|
Projekt-ID | abap-sdk-poc |
Autorisierungsklasse |
|
Lassen Sie alle anderen Felder leer.
6. Z-Bericht zum Erstellen eines Buckets in Cloud Storage erstellen
- Melden Sie sich in Ihrem SAP-System an.
- Rufen Sie den Transaktionscode
SE38
auf und erstellen Sie ein Berichtsprogramm mit dem NamenZDEMO_CREATE_BUCKET.
. - Geben Sie im Pop-up-Fenster die folgenden Details ein:
Wählen Sie im nächsten Pop-up-Fenster entweder „Lokales Objekt“ oder „Paketname angeben“ aus.
- Fügen Sie im ABAP-Editor den folgenden Code ein:
DATA lv_json_response TYPE string.
DATA ls_input TYPE /goog/cl_storage_v1=>ty_001.
DATA lo_storage TYPE REF TO /goog/cl_storage_v1.
TRY.
lo_storage = NEW #( iv_key_name = 'TEST_STORAGE' ).
" Bucket Name should be globally unique & permanent
ls_input = VALUE #( name = 'newtest_bucket_abapsdk_gcloud001' ).
lo_storage->insert_buckets
( EXPORTING iv_q_project = CONV #( lo_storage->gv_project_id )
is_input = ls_input
IMPORTING es_raw = lv_json_response
es_output = DATA(ls_output)
ev_ret_code = DATA(lv_ret_code)
ev_err_text = DATA(lv_err_text)
es_err_resp = DATA(ls_err_resp) ).
IF lo_storage->is_success( lv_ret_code ) = abap_true.
cl_demo_output=>new(
)->begin_section( 'Result:'
)->write_text( 'Bucket was created:'
)->next_section( 'JSON Response:'
)->write_json( lv_json_response
)->display( ).
ELSE.
DATA(lv_msg) = lv_ret_code && ':' && lv_err_text.
cl_demo_output=>new(
)->begin_section( 'Result:'
)->write_text( 'Bucket creation failed;'
)->next_section( 'Error:'
)->write_json( lv_msg
)->display( ).
ENDIF.
CATCH /goog/cx_sdk INTO DATA(lo_sdk_excp).
lv_msg = lo_sdk_excp->get_text( ).
MESSAGE lv_msg TYPE 'S' DISPLAY LIKE 'E'.
ENDTRY.
Hinweis: Wenn der Bucket-Name nicht global eindeutig ist, wird der Bucket nicht erstellt. Verwenden Sie daher einen eindeutigen Namen für den Bucket, bevor Sie den Code ausführen.
- Speichern und aktivieren Sie den Bericht.
- Führen Sie den Bericht aus (drücken Sie die Taste F8).
Nach erfolgreicher Ausführung sollte die Berichtsausgabe wie unten dargestellt aussehen:
7. Z-Bericht zum Lesen einer Datei vom Anwendungsserver und Hochladen in einen Cloud Storage-Bucket erstellen
Bevor Sie diese Aktivität ausführen, müssen Sie eine große Textdatei vorbereiten. Hier haben wir bereits eine große Textdatei erstellt und auf unseren Anwendungsserver hochgeladen. Mit dem Transaktionscode CG3Z können Sie eine Datei auf den Anwendungsserver Ihres SAP-Systems hochladen.
In diesem Beispiel verwenden wir eine Textdatei mit einer Größe von etwa 40 MB, die bereits in das Verzeichnis /tmp
auf dem Application Server hochgeladen wurde.
Sie können diesen Ordner auch über den folgenden Link von GitHub herunterladen: Beispieldatei
- Melden Sie sich in Ihrem SAP-System an.
- Rufen Sie den Transaktionscode
SE38
auf und erstellen Sie ein Berichtsprogramm mit dem NamenZDEMO_UPLOAD_FILE.
. - Geben Sie im Pop-up-Fenster die folgenden Details ein:
Wählen Sie im nächsten Pop-up-Fenster entweder „Local Object“ (Lokales Objekt) oder „Provide a package name“ (Paketnamen angeben) aus.
- Fügen Sie im ABAP-Editor den folgenden Code ein:
DATA lv_file_length TYPE i.
DATA lv_msg TYPE string.
DATA lv_dset TYPE string.
DATA lv_data TYPE string.
DATA ls_data TYPE xstring.
DATA lo_storage TYPE REF TO /goog/cl_storage_v1.
" Read file data from the application server
DATA(dset) = '/tmp/sample_file.txt'.
OPEN DATASET dset FOR INPUT IN TEXT MODE ENCODING DEFAULT.
IF sy-subrc <> 0.
MESSAGE 'Cannot opening/reading dataset' TYPE 'E'.
ENDIF.
DO.
READ DATASET dset INTO lv_dset.
IF sy-subrc <> 0.
EXIT.
ENDIF.
CONCATENATE lv_data lv_dset INTO lv_data SEPARATED BY cl_abap_char_utilities=>newline.
CLEAR lv_dset.
ENDDO.
CLOSE DATASET dset.
CALL FUNCTION 'SCMS_STRING_TO_XSTRING'
EXPORTING text = lv_data
IMPORTING buffer = ls_data
EXCEPTIONS failed = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE 'Conversion from string to xstring failed' TYPE 'E'.
ENDIF.
TRY.
lo_storage = NEW #( iv_key_name = 'DEMO_STORAGE' ).
lo_storage->add_common_qparam( iv_name = 'uploadType' iv_value = 'resumable' ).
lo_storage->insert_objects( EXPORTING iv_q_name = 'large_text_file_demo.txt'
iv_p_bucket = 'newtest_bucket_abapsdk_gcloud001'
is_data = ls_data
iv_content_type = 'text/pdf'
IMPORTING es_output = data(ls_output)
ev_ret_code = data(lv_ret_code)
ev_err_text = data(lv_err_text)
es_err_resp = data(ls_err_resp) ).
IF lo_storage->is_success( lv_ret_code ) = abap_true.
cl_demo_output=>new(
)->begin_section( 'Result:'
)->write_text( 'Object was uploaded successfully'
)->write_text( 'Object Self Link:'
)->write_text( ls_output-self_link
)->display( ).
ELSE.
cl_demo_output=>new(
)->begin_section( 'Error:'
)->write_text( lv_msg
)->display( ).
ENDIF.
CATCH /goog/cx_sdk INTO data(lo_sdk_excp).
lv_msg = lo_sdk_excp->get_text( ).
MESSAGE lv_msg TYPE 'S' DISPLAY LIKE 'E'.
RETURN.
ENDTRY.
lo_storage->close( ).
- Speichern und aktivieren Sie den Bericht.
- Führen Sie den Bericht aus (drücken Sie die Taste F8).
Nach erfolgreicher Ausführung sollte die Berichtsausgabe wie unten dargestellt aussehen:
Sie können prüfen, ob die Datei erfolgreich hochgeladen wurde, indem Sie wie unten gezeigt zu Ihrem Cloud Storage-Bucket wechseln.
8. Datei mit ABAP SDK-Code in Cloud Storage hochladen
Dieses ABAP-Programm ist im Grunde in Google Cloud Storage eingebunden. Es liest eine Datei vom Anwendungsserver und übergibt die Dateidaten an den API-Client-Stub der Storage API, um sie in einen Storage-Bucket hochzuladen, der im vorherigen Berichtsprogramm erstellt wurde.
Das Berichtsprogramm, das Sie zum Hochladen einer Datei erstellt haben, führt folgende Schritte aus:
Detaillierte Aufschlüsselung
Verbindung herstellen:
- Es stellt mithilfe der Klasse
/GOOG/CL_STORAGE_V1
eine HTTP-Verbindung zum Google Storage-Dienst her.
Daten aus Dateien lesen
- Liest die Datei auf dem Anwendungsserver durch Ausführen eines
OPEN
DATASET
und ruft dann das Standard-SAP-FunktionsmodulSCMS_STRING_TO_XSTRING
auf, um sie in dasXSTRING
-Format umzuwandeln.
Gängige Abfrageparameter hinzufügen
- Um das Chunking zu ermöglichen, müssen wir den Uploadtyp „Fortsetzbar“ auswählen. Wenn der fortsetzbare Upload ausgewählt ist, werden die Dateidaten standardmäßig in 8-MB-Chunks aufgeteilt und hochgeladen. Entwickler können diese Größe jedoch ändern, indem sie den Parameter
IV_P_CHUNK_SIZE
festlegen. Wir empfehlen jedoch, die Standardeinstellung zu verwenden. - Um der API-Methode mitzuteilen, dass die Uploadoption „Fortsetzbar“ ausgewählt werden muss, rufen wir die Methode
ADD_COMMON_QPARAM
auf und übergebenuploadType
alsresumable.
.
Objekte einfügen
- Ruft die Methode
INSERT_OBJECTS
mit den folgenden Parametern auf: IV_Q_NAME
: Dateiname, unter dem der Inhalt in Cloud Storage gespeichert werden sollIV_P_BUCKET
: Name des Buckets, in den die Datei hochgeladen werden sollIS_DATA
: Dateidaten, die hochgeladen werden müssenIV_CONTENT_TYPE
: Der Inhaltstyp der Datei. In unserem aktuellen Szenario verwenden wir „text/plain“, da wir eine Textdatei hochladen.
Wir übergeben dem Importparameter IV_CHUNK_SIZE
keinen Wert und lassen den API-Client-Stub den mit diesem Parameter verknüpften Standardwert von 8 MB verwenden.
Erfolg/Fehler verarbeiten:
- Zeigt die API-Antwort an, je nachdem, ob der API-Aufruf erfolgreich war oder nicht.
Verbindung schließen:
- Schließt die HTTP-Verbindung zum Speicherdienst.
9. Glückwunsch
Glückwunsch! Sie haben das Codelab „Datei in einen Cloud Storage-Bucket hochladen“ erfolgreich abgeschlossen.
Die Cloud Storage JSON API bietet viele Funktionen. Mit dem ABAP SDK for Google Cloud können Sie direkt in Ihren SAP-Systemen nativ mit ABAP darauf zugreifen.
Google Cloud Storage ist eine gute Option zum Speichern und Verwalten großer Datenmengen. Es wird von einer Vielzahl von Unternehmen, Organisationen und Anwendungen verwendet.
Google Cloud Storage bietet folgende Vorteile:
- Kostengünstig: Google Cloud Storage ist eine kostengünstige Möglichkeit, große Datenmengen zu speichern und zu verwalten.
- Einfachheit: Google Cloud Storage ist mit einer einfachen und intuitiven API nutzerfreundlich.
- Flexibilität: Google Cloud Storage kann mit einer Vielzahl von Anwendungen und Plattformen verwendet werden.
Sie können jetzt mit dem Codelab unten fortfahren, um mehr über die Verwendung des ABAP SDK zum Zugriff auf verschiedene Google Cloud-Dienste zu erfahren.
- Ereignis an Pub/Sub senden
- Ereignis von Cloud Pub/Sub empfangen
- Texte mit der Cloud Translation API übersetzen
- DLP API zum Entfernen von personenidentifizierbaren Informationen verwenden
- BigQuery ML aus ABAP aufrufen
10. Bereinigen
Wenn Sie nicht mit den zusätzlichen Codelabs zum ABAP SDK for Google Cloud fortfahren möchten, fahren Sie mit der Bereinigung fort.
Projekt löschen
- So löschen Sie das Google Cloud-Projekt:
gcloud projects delete abap-sdk-poc
Einzelne Ressourcen löschen
- Löschen Sie die Compute-Instanz:
gcloud compute instances delete abap-trial-docker
- Löschen Sie die Firewallregeln:
gcloud compute firewall-rules delete sapmachine
- Löschen Sie das Dienstkonto:
gcloud iam service-accounts delete \
abap-sdk-dev@abap-sdk-poc.iam.gserviceaccount.com