1. Introduzione
In questo codelab abbiamo elencato i passaggi per creare un account di servizio e utilizzarlo per configurare la tabella Client Key e Communication Map fornita dall'SDK ABAP per Google Cloud e richiamare l'API JSON di Cloud Storage in ABAP.
In questo codelab vengono utilizzati i seguenti servizi Google Cloud:
- Compute Engine
- Servizi di rete
- Cloud Shell
- API JSON Cloud Storage 1
Nota: quando crei un nuovo progetto Google Cloud, viene attivato automaticamente un insieme specifico di API e servizi, tra cui Cloud Storage. In questo modo puoi usufruire immediatamente di questa solida soluzione di archiviazione. Pertanto, non è necessario attivarla come passaggio aggiuntivo.
Prerequisiti
- Assicurati di avere accesso a un sistema SAP con l'SDK ABAP per Google Cloud installato.
- Per configurare un nuovo sistema, puoi consultare il codelab "Install ABAP Platform Trial on Google Cloud Platform and Install ABAP SDK".
Cosa creerai
Creerai i seguenti programmi nel sistema SAP utilizzando l'SDK ABAP per Google Cloud
- Crea un bucket Cloud Storage.
- Leggi un file dal server dell'applicazione e caricalo nel bucket Cloud Storage creato.
2. Requisiti
- Un browser, ad esempio Chrome o Firefox.
- Un progetto Google Cloud con la fatturazione abilitata o crea un account di prova senza costi di 90 giorni per la piattaforma Google Cloud.
- SAP GUI (Windows o Java) installato nel sistema. Se SAP GUI è già installato sul tuo laptop, connettiti a SAP utilizzando l'indirizzo IP esterno della VM come indirizzo IP del server di applicazioni. Se utilizzi un Mac, puoi anche installare SAP GUI per Java disponibile in questo link.
3. Prima di iniziare
- Assicurati di avere accesso a un sistema SAP con l'SDK ABAP per Google Cloud installato.
- Per configurare un nuovo sistema, puoi consultare il codelab Install ABAP Platform Trial on Google Cloud Platform and Install ABAP SDK.
- Nella console Google Cloud, nella pagina di selezione del progetto, seleziona o crea un progetto Google Cloud (ad esempio: abap-sdk-poc).
- Verifica che la fatturazione sia attivata per il tuo progetto Cloud. Scopri come verificare se la fatturazione è attivata per un progetto. Ignora questo passaggio se utilizzi l'account per la prova senza costi di 90 giorni.
- Utilizzerai Cloud Shell, un ambiente a riga di comando in esecuzione in Google Cloud. In Cloud Console, fai clic su Attiva Cloud Shell nell'angolo in alto a destra:

- Esegui i seguenti comandi per autenticarti per il tuo account e impostare il progetto predefinito su abap-sdk-poc. La zonaus-west4-bviene utilizzata come esempio. Se necessario, modifica il progetto e la zona nei comandi seguenti in base alle tue preferenze.
gcloud auth login
gcloud config set project abap-sdk-poc
gcloud config set compute/zone us-west4-b
- Devi avere accesso a un sistema SAP con l'SDK ABAP per Google Cloud installato.
- Prima di procedere con questo codelab, devi completare il codelab 1 (Install ABAP Platform Trial 1909 on Google Cloud Platform and Install ABAP SDK for Google Cloud) e il codelab 2 (Configure ABAP SDK Authentication using tokens for SAP Hosted on Compute Engine VM).
- Se hai completato i codelab 1 e 2, avrai eseguito il provisioning di un sistema ABAP Platform Trial 1909 su Google Cloud, insieme alla configurazione richiesta per l'autenticazione e la connettività.
- Se non hai completato i codelab 1 e 2, non avrai tutta l'infrastruttura e la connettività necessarie per eseguire i passaggi descritti in questo codelab. Pertanto, devi completare i codelab 1 e 2 prima di procedere con questo.
4. Crea un account di servizio con il ruolo Utente oggetto archiviazione
Per creare un account di servizio con il ruolo richiesto, svolgi i seguenti passaggi:
- Esegui questo comando nel terminale Cloud Shell:
gcloud iam service-accounts create abap-sdk-storage-tester \
--display-name="Service Account for Cloud Storage"
- Ora aggiungi i ruoli richiesti all'account di servizio creato nel passaggio precedente:
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'
Il comando riportato sopra utilizza abap-sdk-poc come segnaposto per il progetto Google Cloud. Sostituisci abap-sdk-poc con l'ID del tuo progetto.
- Per verificare che il ruolo sia stato aggiunto, vai alla pagina IAM. L'account di servizio che hai creato dovrebbe essere elencato insieme al ruolo che gli è stato assegnato, come mostrato di seguito:

5. Crea configurazione della chiave client
Ora che hai configurato i prerequisiti lato Google Cloud, possiamo procedere con la configurazione lato SAP.
Per la configurazione relativa all'autenticazione e alla connettività, l'SDK ABAP per Google Cloud utilizza la tabella /GOOG/CLIENT_KEY
Per mantenere la configurazione nella tabella /GOOG/CLIENT_KEY, svolgi i seguenti passaggi:
- In SAP GUI, inserisci il codice transazione SPRO.
- Fai clic su SAP Reference IMG (Immagine di riferimento SAP).
- Fai clic su ABAP SDK for Google Cloud > Impostazioni di base > Configura chiave client.
- Mantieni i seguenti valori per i campi:
| Campo | Valore | 
| Nome della chiave Google Cloud | TEST_STORAGE | 
| Nome dell'account di servizio Google Cloud | 
 | 
| Ambito Google Cloud | 
 | 
| ID progetto | abap-sdk-poc | 
| Classe di autorizzazione | 
 | 
Lascia vuoti tutti gli altri campi
6. Creare un report Z per creare un bucket su Cloud Storage
- Accedi al sistema SAP.
- Vai al codice transazione SE38e crea un programma report con il nomeZDEMO_CREATE_BUCKET.
- Nel popup che si apre, fornisci i dettagli come mostrato di seguito:

Nel popup successivo, seleziona Oggetto locale o Fornisci un nome del pacchetto in base alla tua scelta.
- Nell'editor ABAP, aggiungi il seguente codice:
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.
 
Tieni presente che se il nome del bucket non è univoco a livello globale, il bucket non verrà creato, quindi prova a utilizzare un nome univoco per il bucket prima di eseguire il codice
- Salva ed esegui il report.
- Esegui il report (premi F8).
Al termine dell'esecuzione, dovresti vedere l'output del report come mostrato di seguito:

7. Creare un report Z per leggere un file dall'Application Server e caricarlo nel bucket Cloud Storage
Prima di svolgere questa attività, devi preparare un file di testo di grandi dimensioni. Qui abbiamo già un file di testo di grandi dimensioni creato e caricato sul nostro server di applicazioni. Puoi utilizzare il codice transazione CG3Z per caricare un file sul server delle applicazioni del tuo sistema SAP
Per questo esempio, utilizziamo un file di testo di circa 40 MB, già caricato nell'Application Server nella directory /tmp.
Puoi anche scaricare questa cartella da GitHub utilizzando il seguente link: File di esempio
- Accedi al sistema SAP
- Vai al codice transazione SE38e crea un programma report con il nomeZDEMO_UPLOAD_FILE.
- Nel popup che si apre, fornisci i dettagli come mostrato di seguito:

Nel popup successivo, seleziona Oggetto locale o Fornisci un nome del pacchetto in base alla tua scelta.
- Nell'editor ABAP, aggiungi il seguente codice:
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( ).
- Salva ed esegui il report.
- Esegui il report (premi F8).
Al termine dell'esecuzione, dovresti vedere l'output del report come mostrato di seguito:

Puoi verificare se il file è stato caricato correttamente o meno accedendo al bucket Cloud Storage come mostrato di seguito


8. Carica il file su Cloud Storage utilizzando il codice dell'SDK ABAP spiegato
In sostanza, questo programma ABAP si integra con Google Cloud Storage. Legge un file dal server dell'applicazione e passa i dati del file allo stub client dell'API Storage per il caricamento in un bucket di archiviazione creato nel programma di report precedente.
Il programma di report che hai creato per caricare un file esegue le seguenti operazioni:
Procedura dettagliata
Stabilisci connessione:
- Stabilisce una connessione HTTP al servizio Google Storage utilizzando la classe /GOOG/CL_STORAGE_V1.
Leggi dati file
- Legge il file sul server delle applicazioni eseguendo un OPENDATASETe poi chiama il modulo di funzione SAP standardSCMS_STRING_TO_XSTRINGper la conversione in formatoXSTRING.
Aggiungere parametri di query comuni
- Per ottenere il chunking, dobbiamo scegliere il tipo di caricamento "Riavviabile". Per impostazione predefinita, quando è selezionato il caricamento riavviabile, i dati del file vengono suddivisi in blocchi di 8 MB e caricati. Gli sviluppatori possono però modificare questa dimensione del chunking impostando il parametro IV_P_CHUNK_SIZE, ma è consigliabile utilizzare l'impostazione predefinita.
- Per comunicare al metodo API che deve essere scelta l'opzione di caricamento "Ripristinabile", chiamiamo il metodo ADD_COMMON_QPARAMe passiamouploadTypecomeresumable.
Inserire oggetti
- Chiama il metodo INSERT_OBJECTSpassando i seguenti parametri:
- IV_Q_NAME: nome del file con cui i contenuti devono essere archiviati in Cloud Storage
- IV_P_BUCKET: nome del bucket in cui deve essere caricato il file
- IS_DATA: dati del file da caricare
- IV_CONTENT_TYPE: il tipo di contenuto del file. Per il nostro scenario attuale utilizziamo "text/plain" perché stiamo caricando un file di testo.
Tieni presente che non viene passato alcun valore al parametro di importazione IV_CHUNK_SIZE e che lo stub client dell'API utilizza il valore predefinito associato a questo parametro, ovvero 8 MB.
Gestisci stato riuscito/errori:
- Mostra la risposta dell'API in base al fatto che la chiamata all'API sia andata a buon fine o meno.
Chiudi connessione:
- Chiude la connessione HTTP al servizio di archiviazione.
9. Complimenti
Complimenti! Hai completato il Codelab "Caricamento di un file in un bucket Cloud Storage".
L'API JSON di Cloud Storage offre molte funzionalità e con l'SDK ABAP per Google Cloud puoi accedervi direttamente nei tuoi sistemi SAP in modo nativo utilizzando ABAP.
Google Cloud Storage è un'ottima opzione per archiviare e gestire grandi quantità di dati. Viene utilizzato da un'ampia gamma di attività, aziende e applicazioni.
Ecco alcuni dei vantaggi dell'utilizzo di Google Cloud Storage:
- Economicità: Google Cloud Storage è un modo economico per archiviare e gestire grandi quantità di dati.
- Semplicità: Google Cloud Storage è facile da usare, con un'API semplice e intuitiva.
- Flessibilità: Google Cloud Storage può essere utilizzato con una serie di applicazioni e piattaforme.
Ora puoi procedere con il seguente codelab per continuare il tuo percorso di apprendimento sull'utilizzo dell'SDK ABAP per accedere a vari servizi Google Cloud.
- Inviare un evento a Pub/Sub
- Ricevere un evento da Cloud Pub/Sub
- Utilizzare l'API Cloud Translation per tradurre i testi
- Utilizzare l'API DLP per l'oscuramento delle PII
- Chiamare BigQuery ML da ABAP
10. Esegui la pulizia
Se non vuoi continuare con i codelab aggiuntivi relativi all'SDK ABAP per Google Cloud, procedi con la pulizia.
Elimina il progetto
- Elimina il progetto Google Cloud:
gcloud projects delete abap-sdk-poc
Eliminare singole risorse
- Elimina l'istanza di calcolo:
gcloud compute instances delete abap-trial-docker
- Elimina le regole firewall:
gcloud compute firewall-rules delete sapmachine
- Elimina l'account di servizio:
gcloud iam service-accounts delete \
    abap-sdk-dev@abap-sdk-poc.iam.gserviceaccount.com