Creazione di un report nella lingua del destinatario

Completato

Oltre a considerare la lingua dell'utente che esegue il report, si deve considerare anche la lingua del suo destinatario. Ad esempio, se si sta eseguendo un report Fattura di vendita e non occorre generarlo nella lingua dell'utente che esegue il report, lo si dovrebbe invece generare nella lingua della persona (o della società) a cui viene inviato.

Nel caso del report Fattura di vendita e di molti altri report di documenti, la lingua sarà probabilmente quella del cliente sul documento. A seconda del cliente, questa lingua potrebbe essere diversa. Pertanto, se si stampano più fatture contemporaneamente, è necessario modificare la lingua del report, a seconda del record che viene recuperato in quel momento nel set di dati. Il report deve generare un set di dati multilingue.

Per questo motivo, in questo caso, non è possibile usare IncludeCaption o la sezione Etichette, perché le etichette sono fisse e non possono essere modificate durante la generazione del set di dati. Invece, si devono aggiungere manualmente le didascalie di tabelle e campi nel set di dati e quindi aggiungervi le etichette come variabili al suo interno.

Questa tecnica aumenta le dimensioni del set di dati perché, per ogni campo che deve essere multilingue, viene aggiunto un campo al set di dati. Il set di dati è composto da più colonne, quindi questo fattore potrebbe avere un impatto sulle prestazioni del report.

I metodi disponibili per agevolare la generazione di un set di dati multilingue sono:

  • FieldCaption(): ottiene la didascalia corrente del campo specificato come stringa.

    • Caption :=   Record.FieldCaption(Field: Any);
  • TableCaption(): ottiene la didascalia corrente di una tabella come stringa.

    • Caption :=   Record.TableCaption();

Per dichiarare un'etichetta come variabile, si può usare la seguente sintassi:

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

Il tipo di dati Etichetta è usato nei file .XLF per le traduzioni.

In genere, in un report documento, il seguente codice viene visualizzato nel trigger OnAfterGetRecord() nella tabella di intestazione:

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

La tabella di intestazione dovrebbe includere il campo Codice lingua, che contiene il codice lingua del destinatario del documento. La funzione GetLanguageIdOrDefault() ottiene l'ID della lingua in base al suo codice oppure viene impostata automaticamente sulla lingua dell'utente corrente.

Il metodo CurrReport.Language() ottiene o imposta l'impostazione della lingua corrente per il report.

Esaminare il seguente esempio di un report che genera un elenco di clienti. Il report ha la seguente sintassi:

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

Dopo aver recuperato il record del cliente dalla tabella Cliente, il report verifica il codice della lingua del cliente e quindi lo usa per impostare la lingua del report. Questa azione cambia il risultato della funzione fieldcaption. Nei campi del set di dati sono state aggiunte colonne separate per le didascalie.

Il layout del report dovrebbe essere simile all'immagine riportata di seguito.

Nel layout del report, nell'intestazione, le espressioni vengono usate per recuperare i valori Cptn. Le righe di dettaglio mostrano che si stanno recuperando i valori normali. Per essere sicuro di poter raggruppare i clienti per numero, la tabella è stata inserita in un contenitore di elenchi.

Il report eseguito sarà simile all'esempio di seguito.