1. Introduzione
In questo codelab sono elencati i passaggi per creare un service account e utilizzarlo per configurare la tabella della mappa di comunicazione e della chiave client fornita da ABAP SDK for 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 di Cloud Storage V1
Nota: quando crei un nuovo progetto Google Cloud, viene abilitato automaticamente un insieme specifico di API e servizi, tra cui Cloud Storage. In questo modo, puoi sfruttare immediatamente questa solida soluzione di archiviazione. Pertanto, non è necessario abilitarlo come passaggio aggiuntivo.
Prerequisiti
- Assicurati di avere accesso a un sistema SAP con ABAP SDK for Google Cloud installato.
- Per configurare un nuovo sistema, puoi fare riferimento al codelab "Installazione della versione di prova della piattaforma ABAP su Google Cloud Platform e installazione di ABAP SDK".
Cosa creerai
Creerai i seguenti programmi nel tuo sistema SAP utilizzando ABAP SDK for Google Cloud
- Crea un bucket Cloud Storage.
- Leggi un file dal server delle applicazioni 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 Google Cloud.
- GUI SAP (Windows o Java) installata nel sistema. Se SAP GUI è già installato sul tuo laptop, connettiti a SAP utilizzando l'indirizzo IP esterno della VM come IP del server applicazioni. Se utilizzi 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 ABAP SDK for Google Cloud installato.
- Per configurare un nuovo sistema, puoi fare riferimento al codelab Installare la prova della piattaforma ABAP su Google Cloud Platform e installare l'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 è abilitata per un progetto. Salta questo passaggio se utilizzi l'account di prova senza costi di 90 giorni.
- Utilizzerai Cloud Shell, un ambiente a riga di comando in esecuzione in Google Cloud. Nella console Cloud, fai clic su Attiva Cloud Shell nell'angolo in alto a destra:

- Esegui questi 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 seguenti comandi 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 ABAP SDK for Google Cloud installato.
- Prima di procedere con questo codelab, devi completare il codelab 1 (Installare la versione di prova di ABAP Platform 1909 su Google Cloud Platform e installare ABAP SDK for Google Cloud) e il codelab 2 (Configurare l'autenticazione di ABAP SDK utilizzando i token per SAP ospitato su una VM di Compute Engine).
- Se hai completato il codelab 1 e il codelab 2, avrai eseguito il provisioning di un sistema di prova della piattaforma ABAP 1909 su Google Cloud, insieme alla configurazione richiesta per l'autenticazione e la connettività.
- Se non hai completato il codelab 1 e il codelab 2, non avrai tutta l'infrastruttura e la connettività necessarie per eseguire i passaggi forniti in questo codelab. Pertanto, devi completare il codelab 1 e il codelab 2 prima di procedere con questo codelab.
4. Crea un service account con il ruolo Utente oggetti Storage
Per creare un service account con il ruolo richiesto, segui questi 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 precedente utilizza abap-sdk-poc come segnaposto per il progetto Google Cloud. Sostituisci abap-sdk-poc con l'ID progetto.
- Per verificare che il ruolo sia stato aggiunto, vai alla pagina IAM. Il service account 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'ABAP SDK for Google Cloud utilizza la tabella /GOOG/CLIENT_KEY
Per mantenere la configurazione nella tabella /GOOG/CLIENT_KEY, segui questi passaggi:
- Nella GUI SAP, inserisci il codice di transazione
SPRO. - Fai clic su SAP Reference IMG.
- Fai clic su ABAP SDK for Google Cloud > Impostazioni di base > Configura chiave client.
- Mantieni i seguenti valori nei campi:
Campo | Valore |
Nome della chiave Google Cloud | TEST_STORAGE |
Nome del service account Google Cloud |
|
Ambito Google Cloud |
|
ID progetto | abap-sdk-poc |
Authorization Class |
|
Lascia vuoti tutti gli altri campi.
6. Creare un report Z per creare un bucket su Cloud Storage
- Accedi al tuo sistema SAP.
- Vai al codice transazione
SE38e crea un programma di 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 e attiva il report.
- Esegui il report (premi F8).
Se l'esecuzione va a buon fine, dovresti visualizzare l'output del report come mostrato di seguito:

7. Crea un report Z per leggere un file dal server delle applicazioni e caricarlo nel bucket Cloud Storage
Prima di eseguire questa attività, devi preparare un file di testo di grandi dimensioni. Qui abbiamo già creato e caricato un file di testo di grandi dimensioni sul nostro server delle applicazioni. Puoi utilizzare il codice di 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 sul server delle applicazioni nella directory /tmp.
Puoi anche scaricare questa cartella da GitHub utilizzando il seguente link: File di esempio
- Accedi al tuo sistema SAP
- Vai al codice transazione
SE38e crea un programma di 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 e attiva il report.
- Esegui il report (premi F8).
Se l'esecuzione va a buon fine, dovresti visualizzare l'output del report come mostrato di seguito:

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


8. Carica il file su Cloud Storage utilizzando il codice ABAP SDK spiegato
In sostanza, questo programma ABAP si integra con Google Cloud Storage. Legge un file dal server delle applicazioni e passa i dati del file allo stub client API dell'API Storage per caricarlo 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:
Suddivisione dettagliata
Stabilisci la 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 nel formatoXSTRING.
Aggiungere parametri di query comuni
- Per ottenere la suddivisione in blocchi, il tipo di caricamento che dobbiamo scegliere è "Riprendibile". Per impostazione predefinita, quando viene selezionato il caricamento ripristinabile, i dati del file vengono suddivisi in blocchi di 8 MB e caricati. Gli sviluppatori possono tuttavia modificare le dimensioni dei blocchi 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 "Riprendibile", 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 StorageIV_P_BUCKET: il nome del bucket in cui deve essere caricato il fileIS_DATA: Dati del file da caricareIV_CONTENT_TYPE: Tipo di contenuto del file. Nello scenario attuale, utilizziamo "text/plain" perché stiamo caricando un file di testo.
Tieni presente che non passiamo alcun valore al parametro di importazione IV_CHUNK_SIZE e lasciamo che lo stub client API utilizzi il valore predefinito associato a questo parametro, ovvero 8 MB.
Gestisci esito positivo/errori:
- Mostra la risposta dell'API in base all'esito della chiamata API.
Chiudi connessione:
- Chiude la connessione HTTP al servizio di archiviazione.
9. Complimenti
Complimenti! Hai completato correttamente il Codelab "Caricamento di un file in un bucket Cloud Storage".
L'API Cloud Storage JSON offre molte funzionalità e, con ABAP SDK for 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.
Alcuni dei vantaggi dell'utilizzo di Google Cloud Storage:
- Convenienza: Google Cloud Storage è un modo conveniente 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 codelab riportato di seguito per continuare il tuo percorso di apprendimento sull'utilizzo dell'ABAP SDK 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 la rimozione delle informazioni PII
- Chiamare BigQuery ML da ABAP
10. Esegui la pulizia
Se non vuoi continuare con i codelab aggiuntivi relativi ad ABAP SDK for Google Cloud, procedi con la pulizia.
Elimina il progetto
- Elimina il progetto Google Cloud:
gcloud projects delete abap-sdk-poc
Elimina singole risorse
- Elimina l'istanza di computing:
gcloud compute instances delete abap-trial-docker
- Elimina le regole firewall:
gcloud compute firewall-rules delete sapmachine
- Elimina il service account:
gcloud iam service-accounts delete \
abap-sdk-dev@abap-sdk-poc.iam.gserviceaccount.com