Datei mit Aufteilung in Cloud Storage hochladen

1. Einführung

In diesem Codelab haben wir die Schritte zum Erstellen eines Dienstkontos und zum Konfigurieren der vom ABAP SDK for Google Cloud bereitgestellten Client Key- und Communication Map-Tabelle sowie zum Aufrufen der Cloud Storage JSON API in ABAP aufgeführt.

In diesem Codelab werden die folgenden Google Cloud-Dienste verwendet:

  • Compute Engine
  • Netzwerkdienste
  • Cloud Shell
  • Cloud Storage JSON API V1

Hinweis: Wenn Sie ein neues Google Cloud-Projekt erstellen, wird automatisch eine bestimmte Gruppe von APIs und Diensten aktiviert, darunter Cloud Storage. So können Sie diese robuste Speicherlösung sofort nutzen. Daher müssen Sie sie nicht als zusätzlichen Schritt aktivieren.

Vorbereitung

Aufgaben

Sie erstellen die folgenden Programme in Ihrem SAP-System mit dem ABAP SDK for Google Cloud.

  • Cloud Storage-Bucket erstellen
  • Lesen Sie eine Datei vom Anwendungsserver und laden Sie sie in den erstellten Cloud Storage-Bucket hoch.

2. Voraussetzungen

  • Ein Browser, z. B. Chrome oder Firefox.
  • Ein Google Cloud-Projekt mit aktivierter Abrechnung oder ein kostenloses 90‑Tage-Testkonto für die Google Cloud Platform.
  • SAP GUI (Windows oder Java) ist auf Ihrem System installiert. Wenn die SAP GUI bereits auf Ihrem Laptop installiert ist, stellen Sie eine Verbindung zu SAP her. Verwenden Sie dazu die externe IP-Adresse der VM als IP-Adresse des Anwendungsservers. Wenn Sie einen Mac verwenden, können Sie auch die SAP GUI für Java installieren, die über diesen Link verfügbar ist.

3. Hinweis

6757b2fb50ddcc2d.png

  • Führen Sie die folgenden Befehle aus, um sich für Ihr Konto zu authentifizieren und das Standardprojekt auf abap-sdk-poc festzulegen. Zone us-west4-b wird als Beispiel 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 Google Cloud Platform installieren und ABAP SDK for Google Cloud installieren) und Codelab 2 (Tokenbasierte ABAP SDK-Authentifizierung für SAP-Systeme konfigurieren, die auf einer Compute Engine-VM gehostet werden) durchlaufen, bevor Sie mit diesem Codelab fortfahren.
  • Wenn Sie Codelab 1 und Codelab 2 abgeschlossen haben, haben Sie ein ABAP Platform Trial 1909-System in Google Cloud sowie die erforderliche Einrichtung für Authentifizierung und Konnektivität bereitgestellt.
  • Wenn Sie Codelab 1 und Codelab 2 nicht abgeschlossen haben, verfügen Sie nicht über die erforderliche Infrastruktur und Konnektivität, um die in diesem Codelab beschriebenen Schritte auszuführen. Sie müssen also 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:

  1. 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"
  1. Fügen Sie dem im vorherigen Schritt erstellten Dienstkonto 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.

  1. 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 ihm zugewiesenen Rolle aufgeführt sein, wie unten dargestellt:

92d75ce1554efb69.png

5. Clientschlüsselkonfiguration erstellen

Nachdem Sie die Voraussetzungen auf Google Cloud-Seite eingerichtet haben, können Sie mit der Konfiguration auf SAP-Seite fortfahren.

Zur Authentifizierung und für die Konfiguration von Verbindungen verwendet das ABAP SDK for Google Cloud die Tabelle /GOOG/CLIENT_KEY.

Führen Sie die folgenden Schritte aus, um die Konfiguration in der Tabelle „/GOOG/CLIENT_KEY“ zu verwalten:

  1. Geben Sie in der SAP-GUI den Transaktionscode SPRO ein.
  2. Klicken Sie auf SAP-Referenz-IMG.
  3. Klicken Sie auf ABAP SDK for Google Cloud > Grundlegende Einstellungen > Clientschlüssel konfigurieren.
  4. Geben Sie die folgenden Werte für die Felder an:

Feld

Wert

Google Cloud-Schlüsselname

TEST_STORAGE

Name des Google Cloud-Dienstkontos

abap-sdk-storage-tester@abap-sdk-poc.iam.gserviceaccount.com

Google Cloud-Bereich

https://www.googleapis.com/auth/cloud-platform

Projekt-ID

abap-sdk-poc

Autorisierungsklasse

/GOOG/CL_AUTH_GOOGLE

Lassen Sie alle anderen Felder leer.

6. Z-Bericht erstellen, um einen Bucket in Cloud Storage zu erstellen

  1. Melden Sie sich in Ihrem SAP-System an.
  2. Gehen Sie zum Transaktionscode SE38 und erstellen Sie ein Berichtsprogramm mit dem Namen ZDEMO_CREATE_BUCKET..
  3. Geben Sie im Pop-up-Fenster, das sich öffnet, die folgenden Informationen ein:

93f3edb7bbb5c3c4.png

Wählen Sie im nächsten Pop-up-Fenster entweder „Lokales Objekt“ aus oder geben Sie einen Paketnamen Ihrer Wahl an.

  1. Fügen Sie im ABAP-Editor den folgenden Code hinzu:
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.
 

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.

  1. Speichern und aktivieren Sie den Bericht.
  2. Führen Sie den Bericht aus (drücken Sie F8).

Bei erfolgreicher Ausführung sollte die Berichtsausgabe wie unten dargestellt aussehen:

ff232fba9a4178fb.png

7. Z-Bericht erstellen, um eine Datei vom Anwendungsserver zu lesen und in einen Cloud Storage-Bucket hochzuladen

Bevor Sie diese Aufgabe 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 auf den Anwendungsserver im Verzeichnis /tmp hochgeladen wurde.

Sie können diesen Ordner auch über den folgenden Link von GitHub herunterladen: Beispieldatei

  1. Melden Sie sich in Ihrem SAP-System an.
  2. Gehen Sie zum Transaktionscode SE38 und erstellen Sie ein Berichtsprogramm mit dem Namen ZDEMO_UPLOAD_FILE..
  3. Geben Sie im Pop-up-Fenster, das sich öffnet, die folgenden Informationen ein:

19cbe6987bba58e4.png

Wählen Sie im nächsten Pop-up-Fenster entweder „Lokales Objekt“ aus oder geben Sie einen Paketnamen Ihrer Wahl an.

  1. Fügen Sie im ABAP-Editor den folgenden Code hinzu:
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( ).
  1. Speichern und aktivieren Sie den Bericht.
  2. Führen Sie den Bericht aus (drücken Sie F8).

Bei erfolgreicher Ausführung sollte die Berichtsausgabe wie unten dargestellt aussehen:

c982bfcd07d7e487.png

Sie können prüfen, ob die Datei erfolgreich hochgeladen wurde, indem Sie wie unten gezeigt zu Ihrem Cloud Storage-Bucket navigieren.

90678b475e165adf.png1886be610c63ed6b.png

8. Datei mit ABAP SDK-Code in Cloud Storage hochladen – Code erläutert

Im Wesentlichen wird in diesem ABAP-Programm Google Cloud Storage eingebunden. Sie 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 Aktionen aus:

Schrittweise Aufschlüsselung

Verbindung herstellen:

  • Es wird eine HTTP-Verbindung zum Google Storage-Dienst über die Klasse /GOOG/CL_STORAGE_V1 hergestellt.

Dateidaten lesen

  • Die Datei wird auf dem Anwendungsserver mit OPEN DATASET gelesen und dann wird das standardmäßige SAP-Funktionsmodul SCMS_STRING_TO_XSTRING aufgerufen, um die Datei in das XSTRING-Format zu konvertieren.

Häufig verwendete Abfrageparameter hinzufügen

  • Um das Chunking zu erreichen, müssen wir den Uploadtyp „Fortsetzbarer Upload“ auswählen. Wenn der fortsetzbare Upload ausgewählt ist, werden die Dateidaten standardmäßig in 8‑MB-Blöcke aufgeteilt und hochgeladen. Entwickler können diese Chunking-Größe jedoch ändern, indem sie den Parameter IV_P_CHUNK_SIZE festlegen. Es wird jedoch empfohlen, die Standardeinstellung zu verwenden.
  • Damit die API-Methode weiß, dass die Option „Fortsetzbarer Upload“ ausgewählt werden muss, rufen wir die Methode ADD_COMMON_QPARAM auf und übergeben uploadType als resumable..

Objekte einfügen

  • Ruft die Methode INSERT_OBJECTS auf und übergibt ihr die folgenden Parameter:
  • IV_Q_NAME: Dateiname, unter dem der Inhalt in Cloud Storage gespeichert werden soll
  • IV_P_BUCKET: Name des Buckets, in den die Datei hochgeladen werden muss
  • IS_DATA: Datei-Daten, die hochgeladen werden müssen
  • IV_CONTENT_TYPE: Inhaltstyp der Datei. In unserem aktuellen Szenario verwenden wir „text/plain“, da wir eine Textdatei hochladen.

Wir übergeben keinen Wert an den Importparameter IV_CHUNK_SIZE und lassen den API-Client-Stub den Standardwert verwenden, der diesem Parameter zugeordnet ist, nämlich 8 MB.

Erfolg/Fehler behandeln:

  • 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 Cloud Storage-Bucket hochladen“ erfolgreich abgeschlossen.

Die Cloud Storage JSON API bietet viele Funktionen, auf die Sie mit dem ABAP SDK for Google Cloud direkt in Ihren SAP-Systemen nativ mit ABAP zugreifen können.

Google Cloud Storage ist eine hervorragende Option zum Speichern und Verwalten großer Datenmengen. Sie wird von einer Vielzahl von Unternehmen und Anwendungen verwendet.

Vorteile von Google Cloud Storage:

  • Kosteneffizienz: 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 leicht zu verwenden.
  • Flexibilität: Google Cloud Storage kann mit einer Vielzahl von Anwendungen und Plattformen verwendet werden.

Sie können jetzt mit dem folgenden Codelab fortfahren, um mehr über die Verwendung des ABAP SDK für den Zugriff auf verschiedene Google Cloud-Dienste zu erfahren.

  • Ereignis an Pub/Sub senden
  • Ereignis von Cloud Pub/Sub empfangen
  • Cloud Translation API zum Übersetzen von Texten verwenden
  • DLP API zum Entfernen personenbezogener Daten 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 dem Bereinigen fort.

Projekt löschen

  • Google Cloud-Projekt löschen:
gcloud projects delete abap-sdk-poc

Einzelne Ressourcen löschen

  1. Löschen Sie die Compute-Instanz:
gcloud compute instances delete abap-trial-docker
  1. Löschen Sie die Firewallregeln:
gcloud compute firewall-rules delete sapmachine
  1. Löschen Sie das Dienstkonto:
gcloud iam service-accounts delete \
    abap-sdk-dev@abap-sdk-poc.iam.gserviceaccount.com