Analyse et test du code
Utilisation correcte des types de données et des conversions de types
Traitement des zones de caractères
Utilisation du Pushdown de code dans ABAP SQL
Amélioration de la performance des tables internes
Implémentation des contrôles des autorisations
Conception d'un code orienté objet efficace
Définition et utilisation des classes d'exception
Ajout de documentation au code ABAP

Utilisation de texte traduisible dans ABAP

Objectives

After completing this lesson, you will be able to:
  • Décrivez le processus de traduction pour les développements ABAP.
  • Utilisez des éléments de texte pour rendre les développements traduisibles.

Traduction des développements ABAP

Certains objets de développement ABAP contiennent du texte qui peut être affiché dans l'interface utilisateur (IU) d'une application. Dans le modèle de programmation d'applications ABAP RESTful, par exemple, les textes suivants apparaissent dans l'interface utilisateur :

  • Étiquettes et en-têtes d'annotations dans les définitions de données et les extensions de métadonnées
  • Étiquettes des éléments de données
  • Messages des classes de messages

Ces textes doivent être différents pour les utilisateurs finaux qui lancent l'application avec différentes langues de connexion.

Remarque

Dans ABAP Development Tools for SAP NetWeaver, vous trouverez la langue d'origine d'un objet de développement dans l'onglet Propriétés sous la vue de l'éditeur.

Bien sûr, on ne peut pas s'attendre à ce que le développeur soit en mesure de fournir les textes dans toutes les langues. Regardez cette vidéo pour découvrir comment le développement ABAP traite les différentes langues.

Pools de textes et éléments de texte

Comme indiqué, les textes dépendants de la langue dans les éléments de données, les définitions de données, les extensions de métadonnées, les classes de messages, etc. sont traduisibles par défaut. Mais qu'en est-il des textes dans le code source ABAP ? Sont-ils également traduisibles par défaut ?

La réponse est non, les littéraux ne sont pas traduisibles ! Le contenu des littéraux est toujours le même, indépendamment de la langue de connexion de l'utilisateur.

Si les littéraux contiennent du texte dépendant de la langue et si ce texte atteint l'interface utilisateur, vous devez à un moment donné remplacer les littéraux par des symboles de texte.

Symboles de texte

Les symboles de texte, parfois également appelés éléments de texte, sont archivés dans le pool de textes des classes ABAP globales.

Un symbole de texte est identifié par un ID à trois caractères qui doit être unique dans le pool de textes. L'ID d'un symbole de texte se compose de chiffres, de lettres ou d'une combinaison des deux. Les ID de symboles de texte ne sont pas sensibles à la casse. Dans l'éditeur de pool de textes, elles sont toujours affichées en majuscules.

Dans notre exemple, le pool de textes contient un symbole de texte 001 et un symbole de texte HAU.

Remarque

Ne confondez pas les ID de texte et les ID de message. Pour les messages dans les classes de messages, seuls les chiffres sont autorisés.

Chaque symbole de texte définit un texte dans la langue d'origine de la classe ABAP. La longueur du texte est limitée techniquement à 255 caractères. En plus de cette limite technique, une longueur maximale sémantique doit être définie pour chaque symbole de texte. La longueur maximale doit être comprise entre la longueur réelle et la limite technique.

Dans notre exemple, le symbole de texte HAU a une longueur réelle de 12 et une longueur maximale de 30.

Attention

La longueur maximale définit une limite ferme pour le traducteur. Elle doit être nettement supérieure à la longueur réelle pour éviter d'avoir besoin d'abréviations cryptiques dans les éléments de texte traduits.

Il existe deux façons d'accéder à un symbole de texte dans ABAP :

  • Autonome, c'est-à-dire avec du texte, suivi d'un trait d'union et de l'ID de texte
  • Attaché à un littéral de texte, c'est-à-dire avec l'ID à l'intérieur d'une paire de crochets immédiatement après un littéral de texte.

Dans la deuxième variante, le littéral de texte est utilisé comme type de secours. Si le symbole de texte existe dans le pool de textes actuellement chargé, le contenu du symbole de texte est utilisé à la place du littéral, sinon le littéral est utilisé.

Remarque

Pour éviter toute confusion, le texte du symbole de texte et le texte dans le littéral doivent toujours correspondre. Le "contrôle de programme étendu (SLIN)" dans ATC contient un contrôle des chaînes de caractères. Ce contrôle édite un avertissement si le littéral et le symbole de texte sont différents.

Après la traduction des symboles de texte, l'exécution ABAP utilise le texte qui correspond à la langue de connexion de l'utilisateur.

Comment utiliser des correctifs rapides pour les symboles de texte

Bien que vous puissiez traiter le pool de textes manuellement, il est beaucoup plus facile de créer et de gérer des symboles de texte à l'aide de solutions rapides dans l'éditeur ABAP. Regardez cette démonstration pour apprendre à utiliser des solutions rapides pour les symboles de texte.

Créer et utiliser des symboles de texte

Vous remarquez que la sortie de votre console n'est pas traduisible. Dans cet exercice, vous remplacez le texte littéral des modèles de chaîne par des symboles de texte d'un pool de textes.

Modèle :

  • /LRN/CL_S4D401_TCS_TIMESTAMP (classe globale)

Solution :

  • /LRN/CL_S4D401_TCS_TEXT_POOL (classe globale)

Tâche 1: Copier modèle (facultatif)

Copiez la classe de modèle /LRN/CL_S4D401_TCS_TIMESTAMP. Si vous avez terminé l'exercice précédent, vous pouvez ignorer cette tâche et continuer à modifier votre classe ZCL_##_SOLUTION.

Étapes

  1. Copiez la classe /LRN/CL_S4D401_TCS_TIMESTAMP dans une classe de votre propre package (nom proposé : ZCL_##_SOLUTION, ## correspondant à votre numéro de groupe).

    1. Dans l'explorateur de projets, cliquez avec le bouton droit de la souris sur la classe /LRN/CL_S4D401_TCS_TIMESTAMP pour ouvrir le menu contextuel.

    2. Dans le menu contextuel, sélectionnez Dupliquer....

    3. Saisissez le nom de votre package dans la zone Package. Dans la zone Nom, saisissez ZCL_##_SOLUTION, où ## représente votre numéro de groupe.

    4. Cliquez sur Next.

    5. Confirmez l'ordre de transport et cliquez sur Terminer.

  2. Activez la copie.

    1. Appuyez sur Ctrl + F3 pour activer la classe.

Tâche 2: Activer la traduction de la sortie

Assurez-vous d'être connecté avec la langue d'origine de votre classe globale. Ajustez ensuite l'implémentation de la méthode GET_OUTPUT de la classe locale LCL_CARRIER. Remplacez le texte littéral dans les modèles de chaîne par du texte traduisible du pool de textes.

Étapes

  1. Affichez la langue d'origine de votre classe ABAP et assurez-vous d'être connecté dans la même langue.

    1. Ouvrez le code source de votre classe globale ZCL_##_SOLUTION.

    2. Dans les onglets sous l'éditeur, sélectionnez l'onglet Propriétés.

    3. Notez la propriété Langue d'origine. Il doit être défini sur EN.

    4. Dans l'explorateur de projets, analysez la description de votre projet ABAP Cloud. Après l'ID système, le mandant de connexion et l'ID utilisateur, il affiche la langue de connexion.

    5. Si la langue de connexion ne correspond pas à la langue d'origine de votre classe ABAP, créez un nouveau projet avec la langue de connexion correcte.

  2. Naviguez vers l'implémentation de la méthode GET_OUTPUT dans la classe locale LCL_CARRIER.

    1. Par exemple, vous pouvez ouvrir l'onglet Types locaux dans l'éditeur et rechercher METHOD get_output.

    2. Vous pouvez également développer ZCL_##_SOLUTIONLCL_CARRIER dans la vue Structure à gauche et sélectionner GET_OUTPUT.

  3. Ajustez le modèle de chaîne dans la première instruction APPEND. Remplacez le littéral de texte par un littéral de texte incorporé.

    Astuce

    Notez que les accolades pour les expressions intégrées nécessitent au moins un espace à l'intérieur.
    1. Adaptez le code comme suit :

      ABAP
      1
      APPEND |{ 'Carrier Name:' } { me->name }| TO r_result.
  4. Liez le littéral de texte incorporé à un symbole de texte (ID proposé pour le symbole de texte : 001).

    Astuce

    Notez qu'aucun espace n'est autorisé dans les parenthèses pour l'ID ou entre le guillemet fermant et le parenthèse ouvrante pour l'ID.
    1. Adaptez le code comme suit :

      ABAP
      1
      APPEND |{ 'Carrier Name:'(001) } { me->name }| TO r_result.
  5. Répétez cette opération pour les littéraux de texte dans les autres modèles de chaîne (ID proposés pour les symboles de texte : 002, 003, 004).

    1. Adaptez le code comme suit :

      ABAP
      1234
      APPEND |{ 'Carrier Name:'(001) } { me->name }| TO r_result. APPEND |{ 'Passenger Flights:'(002) } { lines( passenger_flights ) }| TO r_result. APPEND |{ 'Average free seats:'(003) } { get_average_free_seats( ) }| TO r_result. APPEND |{ 'Cargo Flights:'(004) } { lines( cargo_flights ) }| TO r_result.
  6. Utilisez un correctif rapide pour créer le premier texte dans le pool de textes d'une longueur maximale de 20 caractères.

    1. Positionnez le curseur sur (001) et appuyez sur Ctrl + 1.

    2. Sélectionnez Créer texte 001 dans pool de textes.

    3. Utilisez le curseur pour définir la Longueur maximale sur 20 et sélectionnez Terminer.

  7. Répétez l'étape précédente pour créer les autres textes dans le pool de textes, en utilisant à chaque fois la même longueur maximale.

    1. Pour cette étape, procédez comme vous l'avez fait précédemment.

  8. Analysez et activez le pool de textes.

    1. Maintenez la touche Ctrl enfoncée et sélectionnez l'un des ID de texte pour accéder au pool de textes.

    2. Le pool de textes doit ressembler à ceci :

      Code Snippet
      1234567891011
      @MaxLength:20 001=Carrier Name: @MaxLength:20 002=Passenger Flights: @MaxLength:20 003=Average free seats: @MaxLength:20 004=Cargo Flights:
    3. Dans le pool de textes, appuyez sur Ctrl + F3.

  9. Activez et testez la classe globale en tant qu'application de console.

    Remarque

    Vous ne devriez pas remarquer de différence. L'amélioration réside dans le fait que les textes sont désormais traduisibles. Cependant, cela n'aura d'effet que si l'administrateur système crée réellement un projet de traduction. Cela dépasse le cadre de ce cours.
    1. Revenez à l'implémentation de la méthode GET_OUTPUT.

    2. Appuyez sur Ctrl + F3.

    3. Appuyez sur F9.