Importer un fichier dans Cloud Storage avec la fragmentation

Importer un fichier dans Cloud Storage avec le fractionnement

À propos de cet atelier de programmation

subjectDernière mise à jour : sept. 4, 2024
account_circleRédigé par Satish Inamdar

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

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

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 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:

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

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

92d75ce1554efb69.png

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:

  1. Dans l'IUG 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. Maintenez les valeurs suivantes pour 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 dans 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 indiquées ci-dessous:

93f3edb7bbb5c3c4.png

Dans le pop-up suivant, sélectionnez "Objet local" ou "Fournir un nom de package" selon 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.
 

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.

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

Si l'exécution réussit, le résultat du rapport s'affiche comme suit:

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

  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 indiquées ci-dessous:

19cbe6987bba58e4.png

Dans le pop-up suivant, sélectionnez "Objet local" ou "Fournir un nom de package" selon 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, le résultat du rapport s'affiche comme suit:

c982bfcd07d7e487.png

Vous pouvez vérifier si le fichier a bien été importé en accédant à votre bucket Cloud Storage comme indiqué ci-dessous.

90678b475e165adf.png

1886be610c63ed6b.png

8. Importer un fichier dans Cloud Storage à l&#39;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 standard SCMS_STRING_TO_XSTRING pour le convertir au format XSTRING.

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 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 avec 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 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

  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