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-b
viene 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
SE38
e 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
SE38
e 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
OPEN
DATASET
e poi chiama il modulo di funzione SAP standardSCMS_STRING_TO_XSTRING
per 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_QPARAM
e passiamouploadType
comeresumable.
Inserire oggetti
- Chiama il metodo
INSERT_OBJECTS
passando i seguenti parametri: IV_Q_NAME
: nome del file con cui i contenuti devono essere archiviati in Cloud StorageIV_P_BUCKET
: nome del bucket in cui deve essere caricato il fileIS_DATA
: dati del file da caricareIV_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