À propos de cet atelier de programmation
1. Introduction
Dans cet atelier de programmation, nous avons listé les étapes à suivre pour créer un compte de service et l'utiliser pour configurer la table de clés client et de plan de communication fournie par le SDK ABAP pour Google Cloud, puis pour appeler l'API JSON Cloud Storage en ABAP.
Les services Google Cloud suivants sont utilisés dans cet atelier de programmation:
- Compute Engine
- Services réseau
- Cloud Shell
- API Cloud Storage JSON v1
Remarque: Lorsque vous créez un projet Google Cloud, un ensemble spécifique d'API et de services, y compris Cloud Storage, est automatiquement activé. Vous pourrez ainsi profiter immédiatement de cette solution de stockage robuste. Vous n'avez donc pas besoin de l'activer en tant qu'étape supplémentaire.
Prérequis
- Assurez-vous d'avoir accès à un système SAP sur lequel le SDK ABAP pour Google Cloud est installé.
- Vous pouvez consulter l'atelier de programmation Installer la version d'essai de la plate-forme ABAP sur Google Cloud Platform et installer le SDK ABAP pour configurer un nouveau système.
Ce que vous allez faire
Vous allez créer les programmes suivants dans votre système SAP à l'aide du SDK ABAP pour Google Cloud.
- Créez un bucket Cloud Storage.
- Lire un fichier à partir du serveur d'application et l'importer dans le bucket Cloud Storage créé.
2. Conditions requises
- Un navigateur (Chrome ou Firefox, par exemple)
- Un projet Google Cloud pour lequel la facturation est activée ou créez un compte d'essai sans frais de 90 jours pour Google Cloud Platform.
- Interface utilisateur graphique SAP (Windows ou Java) installée sur votre système. Si l'interface utilisateur SAP est déjà installée sur votre ordinateur portable, connectez-vous à SAP à l'aide de l'adresse IP externe de la VM comme adresse du serveur d'applications. Si vous utilisez un Mac, vous pouvez également installer la GUI SAP pour Java disponible sur ce lien.
3. Avant de commencer
- Assurez-vous d'avoir accès à un système SAP sur lequel le SDK ABAP pour Google Cloud est installé.
- Vous pouvez consulter l'atelier de programmation Installer la version d'essai de la plate-forme ABAP sur Google Cloud Platform et installer le SDK ABAP pour configurer un nouveau système.
- Dans la console Google Cloud, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud (par exemple:
abap-sdk-poc).
- Assurez-vous que la facturation est activée pour votre projet Cloud. Découvrez comment vérifier si la facturation est activée sur un projet. Ignorez cette étape si vous utilisez un compte avec essai sans frais de 90 jours.
- Vous allez utiliser Cloud Shell, un environnement de ligne de commande exécuté dans Google Cloud. Dans la console Cloud, cliquez sur Activer Cloud Shell en haut à droite:
- Exécutez les commandes suivantes pour vous authentifier pour votre compte et définir le projet par défaut sur
abap-sdk-poc
. La zoneus-west4-b
est utilisée comme exemple. Si nécessaire, veuillez modifier le projet et la zone dans les commandes suivantes en fonction de vos préférences.
gcloud auth login
gcloud config set project abap-sdk-poc
gcloud config set compute/zone us-west4-b
- Vous devez avoir accès à un système SAP sur lequel le SDK ABAP pour Google Cloud est installé.
- Vous devez terminer l'atelier de programmation 1 (Installer la version d'essai de la plate-forme ABAP 1909 sur Google Cloud Platform et installer le SDK ABAP pour Google Cloud) et l'atelier de programmation 2 (Configurer l'authentification du SDK ABAP à l'aide de jetons pour SAP hébergé sur une VM Compute Engine) avant de poursuivre cet atelier de programmation.
- Si vous avez terminé les ateliers de programmation 1 et 2, vous avez alors reçu un système ABAP Platform Trial 1909 sur Google Cloud, ainsi que la configuration requise pour l'authentification et la connectivité.
- Si vous n'avez pas terminé les ateliers de programmation 1 et 2, vous ne disposerez pas de l'infrastructure et de la connectivité requises pour suivre les étapes de cet atelier. Vous devez donc suivre les ateliers de programmation 1 et 2 avant de commencer celui-ci.
4. Créer un compte de service avec le rôle Utilisateur d'objets de stockage
Pour créer un compte de service avec le rôle requis, procédez comme suit:
- Exécutez la commande suivante dans le terminal Cloud Shell :
gcloud iam service-accounts create abap-sdk-storage-tester \
--display-name="Service Account for Cloud Storage"
- Ajoutez maintenant les rôles requis au compte de service créé à l'étape précédente:
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'
La commande ci-dessus utilise abap-sdk-poc
comme espace réservé pour le projet Google Cloud. Remplacez abap-sdk-poc
par l'ID de votre projet.
- Pour vérifier que le rôle a bien été ajouté, accédez à la page IAM. Le compte de service que vous avez créé doit être listé avec le rôle qui lui a été attribué, comme indiqué ci-dessous:
5. Créer une configuration de clé client
Maintenant que vous avez configuré les conditions préalables côté Google Cloud, nous pouvons passer à la configuration côté SAP.
Pour la configuration de l'authentification et de la connectivité associée, le SDK ABAP pour Google Cloud utilise la table /GOOG/CLIENT_KEY
.
Pour gérer la configuration dans la table /GOOG/CLIENT_KEY, procédez comme suit:
- Dans l'IUG de SAP, saisissez le code de transaction
SPRO
. - Cliquez sur SAP Reference IMG.
- Cliquez sur SDK ABAP pour Google Cloud > Paramètres de base > Configurer la clé client.
- Maintenez les valeurs suivantes pour les champs:
Champ | Valeur |
Nom de la clé Google Cloud | TEST_STORAGE |
Nom du compte de service Google Cloud |
|
Champ d'application Google Cloud |
|
ID du projet | abap-sdk-poc |
Classe d'autorisation |
|
Laissez tous les autres champs vides.
6. Créer un rapport Z pour créer un bucket dans Cloud Storage
- Connectez-vous à votre système SAP.
- Accédez au code de transaction
SE38
et créez un programme de rapport nomméZDEMO_CREATE_BUCKET.
. - Dans le pop-up qui s'affiche, fournissez les informations indiquées ci-dessous:
Dans le pop-up suivant, sélectionnez "Objet local" ou "Fournir un nom de package" selon votre choix.
- Dans l'éditeur ABAP, ajoutez le code suivant:
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.
Notez que si le nom du bucket n'est pas unique, le bucket ne sera pas créé. Essayez donc d'utiliser un nom unique pour le bucket avant d'exécuter le code.
- Enregistrez et activez le rapport.
- Exécutez le rapport (Appuyez sur F8).
Si l'exécution réussit, le résultat du rapport s'affiche comme suit:
7. Créer un rapport Z pour lire un fichier à partir du serveur d'application et l'importer dans un bucket Cloud Storage
Avant de réaliser cette activité, vous devez préparer un grand fichier texte. Ici, nous avons déjà créé et importé un grand fichier texte sur notre serveur d'application. Vous pouvez utiliser le code de transaction CG3Z pour importer un fichier sur le serveur d'applications de votre système SAP.
Pour cet exemple, nous utilisons un fichier texte d'environ 40 Mo, qui est déjà importé sur le serveur d'applications dans le répertoire /tmp
.
Vous pouvez également télécharger ce dossier depuis GitHub à l'aide du lien suivant: Fichier exemple
- Connectez-vous à votre système SAP.
- Accédez au code de transaction
SE38
et créez un programme de rapport nomméZDEMO_UPLOAD_FILE.
. - Dans le pop-up qui s'affiche, fournissez les informations indiquées ci-dessous:
Dans le pop-up suivant, sélectionnez "Objet local" ou "Fournir un nom de package" selon votre choix.
- Dans l'éditeur ABAP, ajoutez le code suivant:
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( ).
- Enregistrez et activez le rapport.
- Exécutez le rapport (Appuyez sur F8).
Si l'exécution réussit, le résultat du rapport s'affiche comme suit:
Vous pouvez vérifier si le fichier a bien été importé en accédant à votre bucket Cloud Storage comme indiqué ci-dessous.
8. Importer un fichier dans Cloud Storage à l'aide du code du SDK ABAP
En substance, ce programme ABAP s'intègre à Google Cloud Storage. Il lit un fichier à partir du serveur d'application et transmet les données du fichier au bouchon client de l'API Storage pour les importer dans un bucket de stockage, créé dans le programme de création de rapports précédent.
Le programme de création de rapports que vous avez créé pour importer un fichier effectue les opérations suivantes:
Détail par étapes
Établir une connexion :
- Il établit une connexion HTTP au service Google Storage à l'aide de la classe
/GOOG/CL_STORAGE_V1
.
Lire les données de fichier
- Lit le fichier sur le serveur d'applications en effectuant une
DATASET
OPEN
, puis appelle le module de fonction SAP standardSCMS_STRING_TO_XSTRING
pour le convertir au formatXSTRING
.
Ajouter des paramètres de requête courants
- Pour effectuer le découpage, nous devons choisir le type d'importation "Resumable" (Reprise possible). Par défaut, lorsque l'importation avec reprise est sélectionnée, les données du fichier sont divisées en blocs de 8 Mo et importées. Les développeurs peuvent toutefois modifier cette taille de segmentation en définissant le paramètre
IV_P_CHUNK_SIZE
, mais il est recommandé d'utiliser le paramètre par défaut. - Pour indiquer à la méthode de l'API que l'option d'importation "Resumable" doit être choisie, nous appelons la méthode
ADD_COMMON_QPARAM
et transmettonsuploadType
en tant queresumable.
.
Insérer des objets
- Appelle la méthode
INSERT_OBJECTS
en lui transmettant les paramètres suivants: IV_Q_NAME
: nom du fichier avec lequel le contenu doit être stocké dans Cloud StorageIV_P_BUCKET
: nom du bucket dans lequel le fichier doit être importéIS_DATA
: données de fichier à importerIV_CONTENT_TYPE
: type de contenu du fichier. Dans notre scénario actuel, nous utilisons "text/plain", car nous importons un fichier texte.
Notez que nous ne transmettons aucune valeur au paramètre d'importation IV_CHUNK_SIZE
et laissons le bouchon client de l'API utiliser la valeur par défaut associée à ce paramètre, soit 8 Mo.
Gérer les succès/erreurs:
- Affiche la réponse de l'API en fonction de la réussite ou de l'échec de l'appel d'API.
Close Connection (Fermer la connexion) :
- Ferme la connexion HTTP au service de stockage.
9. Félicitations
Félicitations ! Vous avez terminé l'atelier de programmation "Importer un fichier dans un bucket Cloud Storage".
L'API JSON Cloud Storage offre de nombreuses fonctionnalités. Avec le SDK ABAP pour Google Cloud, vous pouvez y accéder directement dans vos systèmes SAP de manière native à l'aide d'ABAP.
Google Cloud Storage est une excellente solution pour stocker et gérer de grandes quantités de données. Il est utilisé par un large éventail d'entreprises, d'applications et d'organisations.
Voici quelques-uns des avantages de Google Cloud Storage:
- Économie: Google Cloud Storage est un moyen économique de stocker et de gérer de grandes quantités de données.
- Simplicité: Google Cloud Storage est facile à utiliser, avec une API simple et intuitive.
- Flexibilité: Google Cloud Storage peut être utilisé avec diverses applications et plates-formes.
Vous pouvez maintenant suivre l'atelier de programmation ci-dessous pour continuer à apprendre à utiliser le SDK ABAP pour accéder à divers services Google Cloud.
- Envoyer un événement à Pub/Sub
- Recevoir un événement à partir de Cloud Pub/Sub
- Utiliser l'API Cloud Translation pour traduire des textes
- Utiliser l'API DLP pour masquer les informations permettant d'identifier personnellement les utilisateurs
- Appeler BigQuery ML depuis ABAP
10. Effectuer un nettoyage
Si vous ne souhaitez pas poursuivre les ateliers de programmation supplémentaires liés au SDK ABAP pour Google Cloud, veuillez procéder au nettoyage.
Supprimer le projet
- Supprimez le projet Google Cloud:
gcloud projects delete abap-sdk-poc
Supprimer des ressources individuelles
- Supprimez l'instance de calcul:
gcloud compute instances delete abap-trial-docker
- Supprimez les règles de pare-feu:
gcloud compute firewall-rules delete sapmachine
- Supprimez le compte de service :
gcloud iam service-accounts delete \
abap-sdk-dev@abap-sdk-poc.iam.gserviceaccount.com