Créer un état dans la langue du destinataire

Effectué

En plus de prendre en compte la langue de l’utilisateur qui exécute l’état, vous devez également tenir compte de la langue du destinataire. Par exemple, si vous exécutez un état Facture vente et qu’il n’a pas besoin d’être généré dans la langue de l’utilisateur qui exécute l’état, vous allez le générer plutôt dans la langue de la personne (ou de la société) à laquelle vous envoyez l’état.

Dans le cas de l’état Facture vente et de nombreux autres états de document, cette langue sera probablement celle du client sur le document. Cette langue peut être différente selon le client. Par conséquent, si vous imprimez plusieurs factures à la fois, l’état doit changer de langue, en fonction de l’enregistrement actuellement récupéré dans le jeu de données. L’état doit générer un jeu de données multilingue.

Pour cette raison, dans ce cas, vous ne pouvez pas utiliser IncludeCaption ou la section Libellés, car les libellés sont fixes et ne peuvent pas être modifiés pendant la génération du jeu de données. À la place, vous devez ajouter manuellement des légendes de table et de champ dans le jeu de données, puis ajouter des libellés en tant que variables dans le jeu de données.

Cette technique augmente la taille du jeu de données, car un champ est ajouté au jeu de données pour chaque champ qui doit être multilingue. Le jeu de données comprend plus de colonnes, donc ce facteur peut avoir un impact sur les performances de l’état.

Les méthodes disponibles pour vous aider à générer un jeu de données multilingue sont :

  • FieldCaption() : obtient la légende actuelle du champ spécifié sous forme de chaîne.

    • Caption :=   Record.FieldCaption(Field: Any);
  • TableCaption() : obtient la légende actuelle d’une table sous forme de chaîne.

    • Caption :=   Record.TableCaption();

Vous pouvez déclarer un libellé en tant que variable à l’aide de la syntaxe suivante :

    var
       a: Label 'Label Text', Comment = 'Foo', MaxLength = 999, Locked = true;

Le type de données Libellé est utilisé dans les fichiers .XLF pour les traductions.

En général, dans un état de document, le code suivant s’affiche dans le déclencheur OnAfterGetRecord() dans la table d’en-tête :

CurrReport.Language := Language.GetLanguageIdOrDefault("Language Code");

La table d’en-tête doit inclure le champ Code langue, qui comporte le code langue du destinataire du document. La fonction GetLanguageIdOrDefault() obtient l’ID de langue en fonction de son code ou elle utilise par défaut la langue de l’utilisateur actuel.

La méthode CurrReport.Language() obtient ou définit le paramètre de langue actuel de l’état.

Examinez l’exemple suivant d’un état qui génère une liste de clients. L’état a la syntaxe suivante :

report 50107 CustomerListLangRecReport
{
    UsageCategory = ReportsAndAnalysis;
    ApplicationArea = All;
    Caption = 'Customer List Report Language Recipient';
    AdditionalSearchTerms = 'Customer List Report Language Recipient';
    RDLCLayout = 'CustomerListReportLangRep.rdl';
    WordLayout = 'CustomerListReportLangRep.docx';
    DefaultLayout = RDLC;

    dataset
    {
        dataitem(Customer; Customer)
        {
            column(CustomerNo; "No.")
            {
            }
            column(CustomerNoCptn; fieldcaption("No."))
            {
            }
            column(CustomerName; Name)
            {
            }
            column(CustomerNameCptn; fieldcaption(Name))
            {
            }
            column(CustomerLanguageCode; "Language Code")
            {
            }
            column(CustomerLanguageCodeCptn; fieldcaption("Language Code"))
            {
            }
            column(City; City)
            {
            }
            column(CityCptn; fieldcaption(City))
            {
            }
            column(BalanceLCY; "Balance (LCY)")
            {
            }
            column(BalanceLCYCptn; fieldcaption("Balance (LCY)"))
            {
            }
            trigger OnAfterGetRecord()
            begin
                CurrReport.Language := Language.GetLanguageIdOrDefault("Language Code");
            end;
        }
    }
    var
        Language: Codeunit Language;
        ReportTitle: Label 'Report Title', Comment = 'Foo', MaxLength = 999, Locked = true;
}

Après avoir extrait l’enregistrement client de la table Client, l’état vérifie le code langue du client, puis l’utilise pour définir la langue de l’état. Cette action modifie le résultat de la fonction fieldcaption. Dans les champs du jeu de données, des colonnes séparées ont été ajoutées pour les légendes.

La présentation de l’état doit ressembler à l’image suivante.

Dans la présentation de l’état, dans l’en-tête, des expressions sont utilisées pour récupérer les valeurs Cptn. Les lignes de détail indiquent que vous récupérez les valeurs normales. Pour vous assurer que vous pouvez regrouper les clients par numéro, la table a été placée dans un conteneur de liste.

Lorsque vous exécutez l’état, il ressemble à l’exemple suivant :