Przesyłanie pliku do Cloud Storage z podziałem na fragmenty

Przesyłanie pliku do Cloud Storage z podziałem na części

Informacje o tym ćwiczeniu (w Codelabs)

subjectOstatnia aktualizacja: wrz 4, 2024
account_circleAutorzy: Satish Inamdar

1. Wprowadzenie

W tym laboratorium kodu znajdziesz instrukcje tworzenia konta usługi i używania go do konfigurowania tabeli kluczy klienta i tabeli mapy komunikacji udostępnianych przez ABAP SDK dla Google Cloud oraz wywoływania interfejsu Cloud Storage JSON API w ABAP.

W tym samouczku są używane te usługi Google Cloud:

  • Compute Engine
  • Usługi sieciowe
  • Cloud Shell
  • Cloud Storage JSON API w wersji 1

Uwaga: podczas tworzenia nowego projektu Google Cloud automatycznie włączany jest określony zestaw interfejsów API i usług, w tym Cloud Storage. Dzięki temu możesz od razu korzystać z tego niezawodnego rozwiązania do przechowywania danych. Dlatego nie musisz go włączać jako dodatkowego kroku.

Wymagania wstępne

Co utworzysz

W systemie SAP utworzysz te programy za pomocą pakietu ABAP SDK dla Google Cloud:

  • Utwórz zasobnik Cloud Storage.
  • Odczytaj plik z serwera aplikacji i prześlij go do utworzonego zasobnika Cloud Storage.

2. Wymagania

  • przeglądarkę, np. Chrome lub Firefox;
  • Projekt Google Cloud z włączonymi płatnościami lub utwórz konto na 90-dniowy okres próbny w Google Cloud Platform.
  • interfejs graficzny SAP (wersja na system Windows lub Java) zainstalowany w systemie; Jeśli interfejs SAP GUI jest już zainstalowany na laptopie, połącz się z SAP, używając zewnętrznego adresu IP maszyny wirtualnej jako adresu IP serwera aplikacji. Jeśli używasz komputera Mac, możesz też zainstalować interfejs SAP dla Javy, który jest dostępny pod tym linkiem.

3. Zanim zaczniesz

6757b2fb50ddcc2d.png

  • Uruchom te polecenia, aby uwierzytelnić swoje konto i ustawić projekt domyślny jako abap-sdk-poc. W tym przykładzie użyto strefy us-west4-b. W razie potrzeby zmień projekt i strefę w poniższych poleceniach zgodnie ze swoimi preferencjami.
gcloud auth login
gcloud config
set project abap-sdk-poc
gcloud config
set compute/zone us-west4-b
  • Musisz mieć dostęp do systemu SAP z zainstalowanym pakietem ABAP SDK for Google Cloud.
  • Zanim przejdziesz do tego ćwiczenia, musisz ukończyć ćwiczenie 1 (Zainstaluj wersję próbną platformy ABAP 1909 na Google Cloud Platform i zainstaluj pakiet ABAP SDK dla Google Cloud) oraz ćwiczenie 2 (Skonfiguruj uwierzytelnianie ABAP SDK za pomocą tokenów dla SAP hostowanego w maszynie wirtualnej Compute Engine).
  • Jeśli wykonasz ćwiczenia 1 i 2, w Google Cloud zostanie utworzony system ABAP Platform Trial 1909 wraz z wymaganą konfiguracją uwierzytelniania i łączności.
  • Jeśli nie ukończysz ćwiczeń 1 i 2, nie będziesz mieć całej wymaganej infrastruktury ani połączeń, aby wykonać czynności opisane w tym ćwiczeniu. Dlatego zanim przejdziesz do tego ćwiczenia, musisz ukończyć ćwiczenia 1 i 2.

4. Tworzenie konta usługi z rolą użytkownika obiektu Cloud Storage

Aby utworzyć konto usługi z wymaganą rolą, wykonaj te czynności:

  1. Uruchom w terminalu Cloud Shell to polecenie:
gcloud iam service-accounts create abap-sdk-storage-tester \
--display-name="Service Account for Cloud Storage"
  1. Teraz dodaj wymagane role do konta usługi utworzonego w poprzednim kroku:
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'

W powyższym poleceniu abap-sdk-poc jest miejscem zastępczym dla projektu Google Cloud. Zastąp abap-sdk-poc identyfikatorem projektu.

  1. Aby sprawdzić, czy dodano rolę, otwórz stronę IAM. Utworzone konto usługi powinno być widoczne wraz z przypisaną do niego rolą, jak pokazano poniżej:

92d75ce1554efb69.png

5. Tworzenie konfiguracji klucza klienta

Ponieważ masz już skonfigurowane wymagania wstępne po stronie Google Cloud, możemy przejść do konfiguracji po stronie SAP.

W przypadku konfiguracji związanej z uwierzytelnianiem i łącznością pakiet ABAP SDK for Google Cloud używa tabeli /GOOG/CLIENT_KEY

Aby zachować konfigurację w tabeli /GOOG/CLIENT_KEY, wykonaj te czynności:

  1. W interfejsie graficznym SAP wpisz kod transakcji SPRO.
  2. Kliknij SAP Reference IMG (Referencyjny obraz SAP).
  3. Kliknij ABAP SDK for Google Cloud > Ustawienia podstawowe > Skonfiguruj klucz klienta.
  4. Zachowaj te wartości w polach:

Pole

Wartość

Nazwa klucza Google Cloud

TEST_STORAGE

Nazwa konta usługi Google Cloud

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

Zakres Google Cloud

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

Identyfikator projektu

abap-sdk-poc

Klasa autoryzacji

/GOOG/CL_AUTH_GOOGLE

Pozostaw wszystkie pozostałe pola puste.

6. Tworzenie raportu Z-Report w celu utworzenia zasobnika w Cloud Storage

  1. Zaloguj się w systemie SAP.
  2. Otwórz kod transakcji SE38 i utwórz program raportowania o nazwie ZDEMO_CREATE_BUCKET..
  3. W wyskakującym okienku podaj informacje, jak pokazano poniżej:

93f3edb7bbb5c3c4.png

W następnym wyskakującym okienku wybierz Obiekt lokalny lub Podaj nazwę pakietu.

  1. W edytorze ABAP dodaj ten kod:
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.
 

Pamiętaj, że jeśli nazwa zasobnika nie jest globalnie niepowtarzalna, nie zostanie on utworzony. Dlatego przed wykonaniem kodu spróbuj użyć niepowtarzalnej nazwy zasobnika.

  1. Zapisz i aktywuj raport.
  2. Wykonaj raport (naciśnij klawisz F8).

Po pomyślnym wykonaniu powinieneś zobaczyć dane wyjściowe raportu, jak pokazano poniżej:

ff232fba9a4178fb.png

7. Tworzenie raportu Z-Report w celu odczytania pliku z serwera aplikacji i przesłania go do zasobnika Cloud Storage

Zanim wykonasz to ćwiczenie, musisz przygotować duży plik tekstowy. Mamy już duży plik tekstowy utworzony i przesłany na nasz serwer aplikacji. Kod transakcji CG3Z możesz użyć do przesłania pliku na serwer aplikacji systemu SAP.

W tym przykładzie używamy pliku tekstowego o rozmiarze około 40 MB, który został już przesłany na serwer aplikacji do katalogu /tmp.

Możesz też pobrać ten folder z GitHuba, korzystając z tego linku: Plik przykładowy.

  1. Logowanie się w systemie SAP
  2. Otwórz kod transakcji SE38 i utwórz program raportowania o nazwie ZDEMO_UPLOAD_FILE..
  3. W wyskakującym okienku podaj informacje, jak pokazano poniżej:

19cbe6987bba58e4.png

W następnym wyskakującym okienku wybierz Obiekt lokalny lub Podaj nazwę pakietu.

  1. W edytorze ABAP dodaj ten kod:
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. Zapisz i aktywuj raport.
  2. Wykonaj raport (naciśnij klawisz F8).

Po pomyślnym wykonaniu powinieneś zobaczyć dane wyjściowe raportu, jak pokazano poniżej:

c982bfcd07d7e487.png

Aby sprawdzić, czy plik został przesłany, przejdź do zasobnika Cloud Storage w sposób pokazany poniżej.

90678b475e165adf.png

1886be610c63ed6b.png

8. Przesyłanie pliku do Cloud Storage za pomocą kodu pakietu ABAP SDK

Zasadniczo ten program ABAP integruje się z Google Cloud Storage. Odczytuje on plik z serwera aplikacji i przekazuje dane pliku do modułu Stub klienta interfejsu Storage API, aby przesłać go do zasobnika na dane utworzonego w poprzednim programie raportowania.

Program raportów utworzony do przesyłania pliku:

Szczegółowy opis

Ustal połączenie:

  • Nawiązuje ono połączenie HTTP z usługą Google Storage za pomocą klasy /GOOG/CL_STORAGE_V1.

Odczyt danych pliku

  • Odczytuje plik na serwerze aplikacji, wykonując operację OPEN DATASET, a następnie wywołuje standardowy moduł funkcji SAP SCMS_STRING_TO_XSTRING, aby przekonwertować plik do formatu XSTRING.

Dodawanie typowych parametrów zapytań

  • Aby podzielić plik na części, musimy wybrać typ przesyłania „Możliwość wznowienia”. Domyślnie, gdy wybrane jest przerywane przesyłanie, dane pliku są dzielone na fragmenty o rozmiarze 8 MB i przesyłane. Programiści mogą jednak zmienić rozmiar fragmentu, ustawiając parametr IV_P_CHUNK_SIZE, ale zalecamy używanie ustawienia domyślnego.
  • Aby poinformować metodę interfejsu API, że należy wybrać opcję przesyłania „Możliwość wznowienia”, wywołujemy metodę ADD_COMMON_QPARAM i przekazujemy parametr uploadType jako resumable..

Wstawianie obiektów

  • Wywołuje metodę INSERT_OBJECTS, przekazując jej te parametry:
  • IV_Q_NAME: nazwa pliku, w którym mają być przechowywane treści w Cloud Storage
  • IV_P_BUCKET: nazwa zasobnika, do którego ma zostać przesłany plik
  • IS_DATA: dane pliku, które należy przesłać
  • IV_CONTENT_TYPE: typ treści pliku. W naszym przypadku jest to „text/plain”, ponieważ przesyłamy plik tekstowy.

Pamiętaj, że nie przekazujemy żadnej wartości parametrowi importowania IV_CHUNK_SIZE i pozwalamy modułowi klienta interfejsu API używać wartości domyślnej powiązanej z tym parametrem, która wynosi 8 MB.

Obsługa sukcesu i błędów:

  • Wyświetla odpowiedź interfejsu API na podstawie tego, czy wywołanie interfejsu API zakończyło się powodzeniem.

Close Connection:

  • Zamyka połączenie HTTP z usługą Storage.

9. Gratulacje

Gratulacje! Udało Ci się ukończyć Codelab „Przesyłanie pliku do zasobnika Cloud Storage”.

Interfejs Cloud Storage JSON API ma wiele funkcji, a dzięki pakietowi ABAP SDK for Google Cloud możesz uzyskać do nich dostęp bezpośrednio w systemach SAP za pomocą języka ABAP.

Google Cloud Storage to świetna opcja do przechowywania dużych ilości danych i zarządzania nimi. Jest on używany przez wiele firm, przedsiębiorstw i aplikacji.

Oto kilka korzyści płynących z korzystania z Google Cloud Storage:

  • Ekonomiczność: Google Cloud Storage to ekonomiczny sposób na przechowywanie dużych ilości danych i zarządzanie nimi.
  • Prostota: usługa Google Cloud Storage jest łatwa w użyciu dzięki prostemu i intuicyjnemu interfejsowi API.
  • Elastyczność: Google Cloud Storage można używać z różnymi aplikacjami i platformami.

Aby dowiedzieć się więcej o korzystaniu z pakietu ABAP SDK do uzyskiwania dostępu do różnych usług Google Cloud, możesz teraz przejść do tego ćwiczenia z programowania.

  • Wysyłanie zdarzenia do Pub/Sub
  • Odbieranie zdarzenia z Cloud Pub/Sub
  • Przekładanie tekstów za pomocą interfejsu Cloud Translation API
  • Używanie interfejsu DLP API do pomijania informacji umożliwiających identyfikację
  • Wywoływanie BigQuery ML z ABAP

10. Czyszczenie danych

Jeśli nie chcesz kontynuować dodatkowych samouczków związanych z pakietem ABAP SDK dla Google Cloud, przejdź do czyszczenia.

Usuwanie projektu

  • Usuń projekt Google Cloud:
gcloud projects delete abap-sdk-poc

Usuwanie poszczególnych zasobów

  1. Usuń instancję obliczeniową:
gcloud compute instances delete abap-trial-docker
  1. Usuń reguły zapory sieciowej:
gcloud compute firewall-rules delete sapmachine
  1. Usuń konto usługi:
gcloud iam service-accounts delete \
    abap-sdk-dev@abap-sdk-poc.iam.gserviceaccount.com