Esempi di estensioni del report

Completato

I seguenti esempi spiegano come creare estensioni di report.

Esempio di aggiunta di campi agli elementi di dati

Il primo esempio mostra come creare un nuovo report, CustomerSales, in base a due tabelle: Cliente e Mov. contabili clienti.

L'esempio seguente mostra il codice AL per il report CustomerSales:


report 50100 CustomerSales
{
    UsageCategory = ReportsAndAnalysis;
    ApplicationArea = All;
    Extensible = true;
    RDLCLayout = 'src/CustomerSales.rdl';

    dataset
    {
        dataitem(Customer; Customer)
        {
            column(No_Customer; "No.")
            {
                IncludeCaption = true;
            }
            column(Name_Customer; Name)
            {
                IncludeCaption = true;
            }
            dataitem(customerLedger; "Cust. Ledger Entry")
            {
                DataItemLink = "Customer No." = field("No.");

                column(CustomerNo_customerLedger; "Customer No.")
                {
                    IncludeCaption = true;
                }
                column(PostingDate_customerLedger; "Posting Date")
                {
                    IncludeCaption = true;
                }
                column(AmountLCY_customerLedger; "Amount (LCY)")
                {
                    IncludeCaption = true;
                }
            }
        }
    }
}

Come si evince dall'esempio, il report CustomerSales combina due tabelle, Cliente e Mov. contabili clienti con un join sul numero cliente.

Dalla tabella Cliente, i seguenti campi vengono aggiunti nel set di dati:

  • Nr.

  • Nome

Dalla tabella Mov. contabili clienti, i seguenti campi vengono aggiunti nel set di dati:

  • Nr. cliente

  • Data di registrazione

  • Importo (VL)

Nel layout del report è stata aggiunta una semplice tabella che contiene tutti i campi.

Screenshot del layout del report vendite cliente.

Dopo l'esecuzione, il report sarà visualizzato nel seguente layout.

Screenshot del report movimenti contabili clienti in formato tabulare.

L'esempio successivo illustra come creare un'estensione di report per aggiungere campi agli elementi di dati per il report CustomerSales.


reportextension 50100 CustomerSalesRepExt extends CustomerSales
{
    dataset
    {
        // Add changes to dataitems and columns here
        add(Customer)
        {
            column(City_Customer; City)
            {
                IncludeCaption = true;
            }
        }
        add(customerLedger)
        {
            column(Currency_Code;"Currency Code")
            {
                IncludeCaption = true;
            }
        }
    }
}

Copiare il layout originale del report CustomerSales nella cartella (progetto) dell'estensione del report, rinominarla, aggiungere un riferimento nell'oggetto estensione del report e quindi creare un pacchetto (CTRL+MAIUSC+B) del progetto per aggiornare il layout.

Screenshot del riferimento rinominato nel layout del report.

Ora il layout contiene i nuovi campi nel set di dati ed è quindi possibile aggiungerli nella tabella.

Screenshot del layout dei nuovi campi nel set di dati così come sono visibili nella tabella.

Dopo aver distribuito l'estensione del report, aprire la pagina Selezione layout report e modificare il layout integrato nel nuovo layout dell'estensione del report.

Screenshot della pagina Selezione layout report.

Dopo l'esecuzione, il report viene visualizzato nel seguente layout.

Screenshot del layout report aggiornato in formato tabulare.

Esempio dell'aggiunta di un nuovo elemento di dati

Questo esempio mostra come aggiungere un elemento di dati a un report esistente. La prima attività consiste nel creare un nuovo report, CustomersAndVendors, con le informazioni di due tabelle: Cliente e Fornitore.


report 50101 CustomersAndVendors
{
    UsageCategory = ReportsAndAnalysis;
    ApplicationArea = All;
    RDLCLayout = 'src/CustomersAndVendors.rdl';

    dataset
    {
        dataitem(Customer; Customer)
        {
            column(dataitem_customer; 'dataitem_customer')
            { }
            column(No_Customer; "No.")
            { }
            column(Name_Customer; Name)
            { }
        }
        dataitem(Vendor; Vendor)
        {
            column(dataitem_vendor; 'dataitem_vendor')
            { }
            column(No_Vendor; "No.")
            { }
            column(Name_Vendor; Name)
            { }
        }
    }
}

Il report CustomersAndVendors unisce le tabelle Cliente e Fornitore. È quindi possibile aggiungere un layout con una tabella che contiene tutte le colonne, come mostrato nell'esempio seguente.

Screenshot del layout della tabella clienti e fornitori.

Il risultato del runtime del report è mostrato nello screenshot seguente.

Screenshot del risultato del runtime del report.

Ora è possibile aggiungere un'estensione di report con il seguente codice AL:


reportextension 50101 CustomersAndVendorsRepExt extends CustomersAndVendors
{
    RDLCLayout = 'src/CustomersAndVendorsRepExt.rdl';
    dataset
    {
        // Add changes to dataitems and columns here
        add(Customer)
        {
            column(City_Customer; City)
            { }
        }
        add(Vendor)
        {
            column(City_Vendor; City)
            { }
        }
        addlast(Vendor)
        {
            dataitem(Contact; Contact)
            {
                column(dataitem_contact; 'dataitem_contact')
                { }
                column(No_Contact; "No.")
                { }
                column(Name_Contact; Name)
                { }
                column(City_Contact; City)
                { }
            }
        }
    }
}

L'estensione di report CustomersAndVendorsRepExt aggiunge il campo Città agli elementi di dati Cliente e Fornitore, nonché il nuovo elemento di dati Contatto all'elemento di dati Fornitore.

Progettare il layout dell'estensione di report CustomersAndVendorsRepExt e aggiungere tutte le colonne del set di dati a una tabella, come mostrato nell'esempio seguente:

Screenshot del layout dell'estensione del report clienti e fornitori.

Quindi, dopo l'esecuzione del report, il risultato è il seguente.

Screenshot dei risultati dell'estensione del report clienti e fornitori in una tabella.

Le colonne dell'elemento di dati Contatto vengono aggiunte alle colonne Fornitore nel set di dati e le righe Fornitore vengono ripetute per tutti i contatti. Benché questa azione crei un vero set di dati, potrebbe non essere il risultato previsto o desiderato. Pertanto, prestare attenzione nell'aggiungere un elemento di dati a un report esistente.

Esempio di aggiunta di un campo a un report e a una pagina di richiesta

L'esempio seguente mostra come aggiungere un campo al set di dati del report Vendite standard - Fattura.

La seguente estensione di report aggiunge il campo Nr. ordine al report Vendite standard - Fattura. oltre a dichiarare una nuova variabile, DisplayOrderInfo, che viene aggiunta alla pagina di richiesta e al set di dati.

reportextension 50102 StandardSalesInvoiceRepExt extends "Standard Sales - Invoice"
{
    RDLCLayout = './src/StandardSalesInvoiceExtended.rdlc';

    dataset
    {
        // Add changes to dataitems and columns here
        add(Line)
        {
            column(Order_No_Line_Lbl; Line.fieldCaption("Order No."))
            {}
            column(Order_No_Line; Line."Order No.")
            {}
            column(DisplayOrderInfo;DisplayOrderInfo)
            {}
        }
    }

    requestpage
    {
        // Add changes to the requestpage here
        layout
        {
            addlast(Options)
            {
                field(DisplayOrderInfo; DisplayOrderInfo)
                {
                    ApplicationArea = Basic, Suite;
                    Caption = 'Show Order Information';
                    ToolTip = 'Specifies if you want Order Information to be shown on the document.';
                }
            }
        }
    }
    var
        DisplayOrderInfo: Boolean;
}

Nel layout del report, il campo Nr. ordine (e l'etichetta) viene aggiunto alla tabella dei dettagli, come mostrato nello screenshot seguente.

Screenshot del campo Numero ordine aggiunto al layout del report.

Inoltre, nella riga dei nuovi dettagli della tabella, Visibilità righe contiene l'espressione indicata di seguito.

Screenshot della riga nuovi dettagli e delle espressioni di visibilità righe nella tabella.

Ora una volta eseguito il report Vendite standard - Fattura con il nuovo layout, la pagina di richiesta deve essere simile a quanto mostrato nello screenshot di seguito.

Screenshot del layout del report Vendite standard - Fattura.

Nel report, il campo Nr. ordine è visibile quando contiene dati.

Screenshot dei dati contenuti nel campo Numero ordine nel report Vendite standard - Fattura.

Di seguito è riportato un altro esempio di estensione del report.

L'esempio illustra un'estensione di tabella semplificata, che aggiunge un nuovo campo alla tabella Customer, MyField. L'estensione del report MyExtension aggiunge quindi MyField e un ulteriore campo nella tabella Customer originale al report Customer - Top 10 List, aggiungendo inoltre un nuovo layout Excel al report. L'esempio illustra anche come un nuovo campo aggiunto all'estensione del report può essere modificato usando il trigger OnBeforeAfterGetRecord.

Ecco un esempio di estensione del report più avanzato.

L'esempio illustra come una tabella e un report esistenti vengono estesi usando oggetti di estensione. I frammenti di codice mostrati in questo esempio non forniscono uno scenario end-to-end completo che può essere distribuito; hanno lo scopo di illustrare il modo in cui è possibile estendere le funzionalità esistenti usando l'Oggetto estensione tabella e l'Oggetto estensione report.