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

1. Wprowadzenie

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

W tym ćwiczeniu wykorzystywane są te usługi Google Cloud:

  • Compute Engine
  • Usługi sieciowe
  • Cloud Shell
  • Cloud Storage JSON API V1

Uwaga: gdy tworzysz nowy projekt 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ć w ramach dodatkowego kroku.

Wymagania wstępne

Co utworzysz

W systemie SAP utworzysz te programy przy użyciu pakietu ABAP SDK for Google Cloud:

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

2. Wymagania

  • przeglądarka, np. Chrome lub Firefox;
  • Projekt Google Cloud z włączonym rozliczeniem lub utwórz 90-dniowe konto próbne w Google Cloud Platform.
  • SAP GUI (Windows lub Java) zainstalowany w systemie. Jeśli 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 korzystasz z komputera Mac, możesz też zainstalować SAP GUI for Java, który jest dostępny pod tym linkiem.

3. Zanim zaczniesz

6757b2fb50ddcc2d.png

  • Uruchom te polecenia, aby uwierzytelnić się na koncie i ustawić domyślny projekt na abap-sdk-poc. Jako przykładu używamy strefy us-west4-b. W razie potrzeby zmień projekt i strefę w tych 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 wykonać ćwiczenie 1 (Instalowanie wersji próbnej platformy ABAP 1909 w Google Cloud Platform i pakietu ABAP SDK for Google Cloud) i ćwiczenie 2 (Konfigurowanie uwierzytelniania za pomocą pakietu ABAP SDK przy użyciu tokenów dla systemu SAP hostowanego w maszynie wirtualnej Compute Engine).
  • Jeśli masz za sobą ćwiczenia 1 i 2, powinna być już dla Ciebie dostępna wersja próbna platformy ABAP 1909 w Google Cloud 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 i połączeń, aby wykonać czynności opisane w tym ćwiczeniu. Dlatego przed rozpoczęciem tego ćwiczenia musisz ukończyć ćwiczenie 1 i ćwiczenie 2.

4. Tworzenie konta usługi z rolą użytkownika obiektów 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 do konta usługi utworzonego w poprzednim kroku wymagane role:
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 symbolem zastępczym projektu Google Cloud. Zastąp abap-sdk-poc identyfikatorem projektu.

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

92d75ce1554efb69.png

5. Tworzenie konfiguracji klucza klienta

Po skonfigurowaniu wymagań wstępnych 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 korzysta z tabeli /GOOG/CLIENT_KEY.

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

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

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 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 wyświetlonym okienku podaj szczegóły zgodnie z poniższymi instrukcjami:

93f3edb7bbb5c3c4.png

W następnym wyskakującym okienku wybierz opcję Local Object (Obiekt lokalny) lub Provide a package name (Podaj nazwę pakietu) zgodnie z własnym wyborem.

  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 unikalna, zasobnik nie zostanie utworzony. Dlatego przed wykonaniem kodu spróbuj użyć unikalnej nazwy zasobnika.

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

Po pomyślnym wykonaniu powinien wyświetlić się raport podobny do tego:

ff232fba9a4178fb.png

7. Tworzenie raportu Z do odczytywania pliku z serwera aplikacji i przesyłania go do zasobnika Cloud Storage

Zanim wykonasz to działanie, musisz przygotować duży plik tekstowy. Mamy już utworzony duży plik tekstowy i przesłany na serwer aplikacji. Aby przesłać plik na serwer aplikacji systemu SAP, możesz użyć kodu transakcji CG3Z.

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.

Ten folder możesz też pobrać z GitHuba, korzystając z tego linku: plik przykładowy.

  1. Zaloguj się w systemie SAP.
  2. Otwórz kod transakcji SE38 i utwórz program raportowania o nazwie ZDEMO_UPLOAD_FILE..
  3. W wyświetlonym okienku podaj szczegóły zgodnie z poniższymi instrukcjami:

19cbe6987bba58e4.png

W następnym wyskakującym okienku wybierz opcję Local Object (Obiekt lokalny) lub Provide a package name (Podaj nazwę pakietu) zgodnie z własnym wyborem.

  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 F8).

Po pomyślnym wykonaniu powinien wyświetlić się raport podobny do tego:

c982bfcd07d7e487.png

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

90678b475e165adf.png1886be610c63ed6b.png

8. Wyjaśnienie kodu ABAP SDK do przesyłania plików do Cloud Storage

Ten program ABAP integruje się z Google Cloud Storage. Odczytuje plik z serwera aplikacji i przekazuje dane pliku do klienta API interfejsu Storage API, aby przesłać go do zasobnika na dane utworzonego w poprzednim programie raportu.

Utworzony przez Ciebie program do przesyłania plików raportów wykonuje te czynności:

Szczegółowe zestawienie

Nawiązywanie połączenia:

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

Odczyt danych z 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ć go do formatu XSTRING.

Dodawanie typowych parametrów zapytania

  • Aby podzielić plik na części, musimy wybrać typ przesyłania „Wznawialne”. Gdy wybierzesz przesyłanie z możliwością wznowienia, dane pliku zostaną domyślnie podzielone na części po 8 MB i przesłane. Programiści mogą jednak zmienić rozmiar tych części, 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 „Resumable”, wywołujemy metodę ADD_COMMON_QPARAM i przekazujemy uploadType jako resumable..

Wstawianie obiektów

  • Wywołuje metodę INSERT_OBJECTS, przekazując do niej te parametry:
  • IV_Q_NAME: nazwa pliku, pod którą zawartość ma być przechowywana w Cloud Storage.
  • IV_P_BUCKET: nazwa zasobnika, do którego należy przesłać plik
  • IS_DATA: dane pliku, które należy przesłać;
  • IV_CONTENT_TYPE: typ zawartości pliku. W naszym przypadku używamy wartości „text/plain”, ponieważ przesyłamy plik tekstowy.

Pamiętaj, że nie przekazujemy żadnej wartości do parametru importowania IV_CHUNK_SIZE i pozwalamy, aby stub klienta interfejsu API używał wartości domyślnej powiązanej z tym parametrem, czyli 8 MB.

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

  • Wyświetla odpowiedź interfejsu API w zależności od tego, czy wywołanie interfejsu API zakończyło się powodzeniem.

Zamknij połączenie:

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

9. Gratulacje

Gratulacje! Udało Ci się ukończyć ćwiczenie „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 w sposób natywny za pomocą języka ABAP.

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

Oto niektóre zalety korzystania z Google Cloud Storage:

  • Opłacalność: Google Cloud Storage to ekonomiczny sposób przechowywania dużych ilości danych i zarządzania nimi.
  • Prostota: Google Cloud Storage jest łatwy w obsłudze dzięki prostemu i intuicyjnemu interfejsowi API.
  • Elastyczność: Google Cloud Storage można używać z różnymi aplikacjami i platformami.

Aby kontynuować naukę korzystania z pakietu ABAP SDK w celu uzyskiwania dostępu do różnych usług Google Cloud, możesz teraz przejść do poniższego ćwiczenia.

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

10. Czyszczenie danych

Jeśli nie chcesz kontynuować pracy z dodatkowymi ćwiczeniami związanymi z pakietem ABAP SDK for Google Cloud, przejdź do sekcji 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