Importer un fichier dans Cloud Storage avec la fragmentation

1. Introduction

Dans cet atelier de programmation, nous avons listé les étapes à suivre pour créer un compte de service et l'utiliser afin de configurer la clé client et la table de mappage de communication fournies par le SDK ABAP pour Google Cloud, et pour appeler l'API JSON Cloud Storage dans 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, sont automatiquement activés. Vous pouvez 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

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.
  • Lisez un fichier à partir du serveur d'application et importez-le dans le bucket Cloud Storage créé.

2. Conditions requises

  • Un navigateur (Chrome ou Firefox, par exemple)
  • Un projet Google Cloud avec la facturation activée ou créer un compte d'essai sans frais de 90 jours pour Google Cloud Platform.
  • L'interface utilisateur graphique SAP (Windows ou Java) est installée sur votre système. Si SAP GUI est déjà installé sur votre ordinateur portable, connectez-vous à SAP à l'aide de l'adresse IP externe de la VM comme adresse IP du serveur d'application. Si vous utilisez un Mac, vous pouvez également installer la SAP GUI pour Java disponible sur ce lien.

3. Avant de commencer

6757b2fb50ddcc2d.png

  • Exécutez les commandes suivantes pour vous authentifier pour votre compte et définir le projet par défaut sur abap-sdk-poc. La zone us-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 suivre l'atelier de programmation 1 (Installer ABAP Platform Trial 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 passer à cet atelier de programmation.
  • Si vous avez terminé les ateliers de programmation 1 et 2, vous devriez avoir provisionné 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 toute l'infrastructure et de la connectivité requises pour effectuer les étapes fournies dans cet atelier de programmation. Vous devez donc effectuer les ateliers de programmation 1 et 2 avant de passer à 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 :

  1. 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"
  1. Ajoutez maintenant les rôles requis au compte de service créé à l'étape ci-dessus :
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.

  1. Pour vérifier que le rôle a é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 :

92d75ce1554efb69.png

5. Créer une configuration de clé client

Maintenant que vous avez configuré les prérequis 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 conserver la configuration dans la table /GOOG/CLIENT_KEY, procédez comme suit :

  1. Dans l'interface utilisateur graphique de SAP, saisissez le code de transaction SPRO.
  2. Cliquez sur SAP Reference IMG.
  3. Cliquez sur SDK ABAP pour Google Cloud > Paramètres de base > Configurer la clé client.
  4. Conservez les valeurs suivantes dans les champs :

Champ

Valeur

Nom de la clé Google Cloud

TEST_STORAGE

Nom du compte de service Google Cloud

abap-sdk-storage-tester@abap-sdk-poc.iam.gserviceaccount.com

Champ d'application Google Cloud

https://www.googleapis.com/auth/cloud-platform

ID du projet

abap-sdk-poc

Classe d'autorisation

/GOOG/CL_AUTH_GOOGLE

Laissez tous les autres champs vides.

6. Créer un rapport Z pour créer un bucket sur Cloud Storage

  1. Connectez-vous à votre système SAP.
  2. Accédez au code de transaction SE38 et créez un programme de rapport nommé ZDEMO_CREATE_BUCKET..
  3. Dans le pop-up qui s'affiche, fournissez les informations comme indiqué ci-dessous :

93f3edb7bbb5c3c4.png

Dans la fenêtre pop-up suivante, sélectionnez "Objet local" ou indiquez un nom de package de votre choix.

  1. 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.
 

Veuillez noter que si le nom du bucket n'est pas unique au niveau mondial, le bucket ne sera pas créé. Essayez donc d'utiliser un nom unique pour le bucket avant d'exécuter le code.

  1. Enregistrez et activez le rapport.
  2. Exécutez le rapport (appuyez sur F8).

Si l'exécution réussit, vous devriez obtenir le résultat du rapport, comme indiqué ci-dessous :

ff232fba9a4178fb.png

7. Créer un rapport Z pour lire un fichier à partir du serveur d'application et l'importer dans un bucket Cloud Storage

Avant d'effectuer cette activité, vous devez préparer un fichier texte volumineux. Ici, nous avons déjà créé et importé un fichier texte volumineux sur notre serveur d'application. Vous pouvez utiliser le code de transaction CG3Z pour importer un fichier sur le serveur d'application 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'application dans le répertoire /tmp.

Vous pouvez également télécharger ce dossier depuis GitHub en cliquant sur le lien suivant : Fichier exemple.

  1. Connectez-vous à votre système SAP.
  2. Accédez au code de transaction SE38 et créez un programme de rapport nommé ZDEMO_UPLOAD_FILE..
  3. Dans le pop-up qui s'affiche, fournissez les informations comme indiqué ci-dessous :

19cbe6987bba58e4.png

Dans la fenêtre pop-up suivante, sélectionnez "Objet local" ou indiquez un nom de package de votre choix.

  1. 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( ).
  1. Enregistrez et activez le rapport.
  2. Exécutez le rapport (appuyez sur F8).

Si l'exécution réussit, vous devriez obtenir le résultat du rapport, comme indiqué ci-dessous :

c982bfcd07d7e487.png

Pour vérifier si le fichier a bien été importé, accédez à votre bucket Cloud Storage comme indiqué ci-dessous.

90678b475e165adf.png1886be610c63ed6b.png

8. Explication du code du SDK ABAP pour importer un fichier dans Cloud Storage

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 stub du client d'API Storage pour le charger dans un bucket de stockage, qui a été créé dans le programme de rapport précédent.

Le programme de rapport que vous avez créé pour importer un fichier effectue les opérations suivantes :

Étapes détaillées

Établir la connexion :

  • Il établit une connexion HTTP au service Google Storage à l'aide de la classe /GOOG/CL_STORAGE_V1.

Lire les données du fichier

  • Lit le fichier sur le serveur d'application en effectuant un DATASET OPEN, puis appelle le module de fonction SAP standard SCMS_STRING_TO_XSTRING pour le convertir au format XSTRING.

Ajouter des paramètres de requête courants

  • Pour ce faire, nous devons choisir le type d'importation "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 API que l'option d'importation "Reprise" doit être choisie, nous appelons la méthode ADD_COMMON_QPARAM et transmettons uploadType en tant que resumable..

Insérer des objets

  • Appelle la méthode INSERT_OBJECTS en lui transmettant les paramètres suivants :
  • IV_Q_NAME : nom du fichier sous lequel le contenu doit être stocké dans Cloud Storage
  • IV_P_BUCKET : nom du bucket dans lequel le fichier doit être importé
  • IS_DATA : données de fichier à importer
  • IV_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 stub du client API utiliser la valeur par défaut associée à ce paramètre, qui est de 8 Mo.

Gérer les réussites/erreurs :

  • Affiche la réponse de l'API selon que l'appel d'API a réussi ou non.

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. Grâce au 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 option pour stocker et gérer de grandes quantités de données. Il est utilisé par un large éventail d'entreprises, d'organisations et d'applications.

Voici quelques-uns des avantages de Google Cloud Storage :

  • Rentabilité : 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 votre parcours d'apprentissage sur l'utilisation du 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 l'utilisateur
  • Appeler BigQuery ML depuis ABAP

10. Effectuer un nettoyage

Si vous ne souhaitez pas continuer avec les ateliers de programmation supplémentaires liés au SDK ABAP pour Google Cloud, passez au nettoyage.

Supprimer le projet

  • Supprimez le projet Google Cloud :
gcloud projects delete abap-sdk-poc

Supprimer des ressources individuelles

  1. Supprimez l'instance de calcul :
gcloud compute instances delete abap-trial-docker
  1. Supprimez les règles de pare-feu :
gcloud compute firewall-rules delete sapmachine
  1. Supprimez le compte de service :
gcloud iam service-accounts delete \
    abap-sdk-dev@abap-sdk-poc.iam.gserviceaccount.com