Ejemplos de extensiones de informes
En los siguientes ejemplos se explica cómo crear extensiones de informe.
Ejemplo de cómo agregar campos a elementos de datos
En este primer ejemplo se muestra cómo crear un nuevo informe, CustomerSales, basado en dos tablas: Customer y Cust. Ledger Entry.
En el siguiente ejemplo se muestra el código AL para el informe 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;
}
}
}
}
}
Tal y como se observa en el ejemplo, el informe CustomerSales combina dos tablas, Customer y Cust. Ledger Entry, con una combinación en el número de cliente.
De la tabla Customer, se agregan los siguientes campos en el conjunto de datos:
No.
Name
De la tabla Cust. Ledger Entry, se agregan los siguientes campos en el conjunto de datos:
Customer No.
Posting Date
Amount (LCY)
En el diseño del informe, se ha agregado una tabla sencilla que incluye todos los campos.
Al ejecutar el informe, se obtendrá el diseño siguiente.
En el siguiente ejemplo se muestra cómo crear una extensión de informe que agrega campos a los elementos de datos del informe 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;
}
}
}
}
Copie el diseño original del informe CustomerSales en la carpeta (proyecto) de la extensión del informe, cámbiele el nombre, agregue una referencia al objeto de extensión del informe y empaquete (Ctrl + Mayús + B) el proyecto para actualizar el diseño.
Ahora el diseño incluye los campos nuevos del conjunto de datos, y puede agregarlos a la tabla.
Después de implementar la extensión del informe, abra la página Selección de diseño de informes y cambie el diseño integrado por el nuevo diseño de la extensión del informe.
Cuando ejecute el informe, debería obtener el diseño siguiente.
Ejemplo de cómo agregar un nuevo elemento de datos
En este ejemplo se explica cómo se puede agregar un elemento de datos a un informe ya existente. La primera tarea es crear un nuevo informe, CustomersAndVendors, con información de dos tablas: Customer y Vendor.
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)
{ }
}
}
}
El informe CustomersAndVendors combina las tablas Customer y Vendor. A continuación, puede agregar un diseño con una tabla que incluye todas las columnas, tal y como se muestra en el siguiente ejemplo.
El resultado del tiempo de ejecución del informe se muestra en la siguiente captura de pantalla.
Ahora puede agregar una extensión de informe con el siguiente código 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)
{ }
}
}
}
}
La extensión de informe CustomersAndVendorsRepExt agrega el campo City a los elementos de datos Customer y Vendor y también agrega un nuevo elemento de datos Contact al elemento de datos Vendor.
Cree el diseño de la extensión de informe CustomersAndVendorsRepExt y agregue todas las columnas del conjunto de datos a una tabla, tal y como se muestra en el siguiente ejemplo.
Cuando ejecute el informe, debería obtener el siguiente resultado.
Las columnas del elemento de datos Contact se agregan a las columnas Vendor del conjunto de datos, y las filas Vendor se repiten para todos los contactos. Aunque esta acción crea un conjunto de datos real, puede que no sea el resultado previsto o deseado. Como tal, debe tener cuidado al agregar un elemento de datos a un informe ya existente.
Ejemplo de cómo agregar un campo a un informe y página de solicitud
En el ejemplo siguiente se explica cómo agregar un campo al conjunto de datos del informe Standard Sales - Invoice.
La siguiente extensión de informe agrega el campo N º de pedidoal informe Standard Sales - Invoice. También declara una nueva variable DisplayOrderInfo, que se agrega a la página de solicitud y al conjunto de datos.
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;
}
En el diseño del informe, el campo N.º de pedido (y la etiqueta) se agrega a la tabla de detalles, como se muestra en la siguiente captura de pantalla.
Además, la opción Row Visibility de la nueva fila de detalles de la tabla incluye la siguiente expresión.
Cuando ahora ejecute el informe Standard Sales - Invoice con el nuevo diseño, la página de solicitud tendrá el siguiente aspecto, tal y como se muestra en la siguiente captura de pantalla.
En el informe, el campo N.º de pedido está visible cuando incluye datos.
Este es otro ejemplo de extensión de informe.
Este ejemplo muestra una extensión de tabla simplificada que agrega un nuevo campo a la tabla de clientes (MyField). Luego, la extensión de informe MyExtension agrega MyField y un campo adicional en la tabla Cliente original al informe Customer - Top 10 List y agrega un nuevo diseño de Excel al informe. En el ejemplo, también se muestra cómo se puede modificar un nuevo campo agregado a la extensión de informe mediante el desencadenador OnBeforeAfterGetRecord.
Este es un ejemplo de extensión de informe más avanzado.
El ejemplo muestra cómo se amplía una tabla y un informe existentes mediante el uso de objetos de extensión. Los fragmentos de código que se muestran en este ejemplo no proporcionan un escenario integral completo que se pueda implementar; el objetivo es mostrar la forma de ampliar la funcionalidad existente mediante el uso del objeto de extensión de tabla y el objeto de extensión de informe.













