Modulo Report

Il modulo Report permette di generare un export di dati nel formato preferito.

Per attivare una sezione con modulo Report vanno configurati i settaggi nella relativa sezione dati specificando l'eventuale form e la classe di implementazione dei metodi.

 

 

Il modulo richiede di impostare una classe ereditata da ModuleReport in cui vanno implementati i metodi di validazione del form dei settaggi di export (opzionale), il nome del report, il formato dei dati (opzionale) e l'effettiva generazione del report.

 

using System;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using DataWeb.Newsletter;
using DataWeb.Data.Exchange;
using System.Threading;

namespace DataWeb.Structure.Modules
{
    public class ModuleSubscriberReport(Section section, NavigationContext navigationContext, IServiceProvider serviceProvider) : ModuleReport(section, navigationContext, serviceProvider)
    {
        private readonly IExcelService excelService = serviceProvider.GetService<IExcelService>();
        private readonly INewsletterSubscriberService newsletterSubscriberService = serviceProvider.GetService<INewsletterSubscriberService>();

        public override Task<string> GetReportNameAsync(Item item, Dictionary<string, object> moduleData, CancellationToken cancellationToken = default)
        {
            return Task.FromResult(string.Format("Subscribers_{0:yyyy-MM-dd}.xlsx", DateTime.Now));
        }

        public override async Task<Stream> ProcessReportAsync(Item item, Dictionary<string, object> moduleData, CancellationToken cancellationToken = default)
        {
            var subscriberInfos = new List<ModuleSubscriberReportInfo>();

            var subscribers = await newsletterSubscriberService.GetSubscribersAsync(new NewsletterSubscriberFilter(), cancellationToken);

            foreach (var subscriber in subscribers)
            {
                subscriberInfos.Add(new ModuleSubscriberReportInfo()
                {
                    Email = subscriber.Email,
                    Status = Convert.ToString(subscriber.Status),
                    SubscriptionDate = subscriber.SubscriptionDate,
                    AdditionalValues = newsletterSubscriberService.SerializeAdditionalValues(subscriber.AdditionalValues),
                    Culture = subscriber.Culture,
                    Country = subscriber.Country,
                    Zone = subscriber.Zone,
                    Interests = string.Join(",", subscriber.Interests),
                    Groups = string.Join(",", subscriber.Groups),
                    Source = subscriber.Source
                });
            }

            return await excelService.ListToStreamAsync(subscriberInfos, "Subscribers", cancellationToken);
        }
    }
}

 

In questo esempio stiamo generando un file Excel con gli iscritti alla newsletter.

 

Questa tabella può essere usata come riferimento per identificare le aree della classe base ModuleForm che possono essere personalizzate creando una classe derivata.

 

MetodoDescrizionePossibile Personalizzazione
ValidateReportDataAsyncValida i dati necessari per generare un report per un item specifico. Verifica che i valori forniti soddisfino i requisiti definiti nel form associato.Sovrascrivibile per aggiungere regole di validazione personalizzate in base alla struttura del report o a condizioni specifiche dell'applicazione.
GetReportNameAsyncRecupera il nome del file per il report generato.Sovrascrivibile per impostare nomi di file dinamici basati su dati specifici dell'item o parametri personalizzati (es. includendo la data o identificativi dell'item).
GetContentTypeAsyncRecupera il tipo di contenuto (MIME type) del report generato.Sovrascrivibile per definire tipi di contenuto specifici (es. application/pdf, text/csv, ecc.) in base al formato del report generato.
ProcessReportAsyncGenera il contenuto del report come uno stream. Questo metodo elabora i dati associati all'item e produce il report come file.Sovrascrivibile per implementare la logica di generazione del report, come l'elaborazione di dati complessi, la formattazione in PDF, Excel, CSV, o altri formati richiesti.