Passer au contenu du pied de page
GUIDES DE MIGRATION

Comment migrer de SSRS à IronPDF en C#

La migration de SQL Server Reporting Services (SSRS) versIronPDFtransforme votre flux de production de PDF d'une infrastructure lourde basée sur un serveur à une bibliothèque légère, en cours de processus, qui peut être intégrée directement dans n'importe quelle application .NET. Ce guide fournit un chemin de migration complet, étape par étape, qui élimine les dépendances de SQL Server, la surcharge du serveur de rapports et l'enfermement dans l'écosystème Microsoft.

Pourquoi migrer de SSRSvers IronPDF

Comprendre SSRS

SQL Server Reporting Services (SSRS) est la plateforme de reporting d'entreprise de Microsoft qui nécessite un investissement important en termes d'infrastructure. SSRSest une plateforme de reporting complète de Microsoft qui fournit une suite complète pour la création, le déploiement et la gestion de rapports, offrant à la fois des fonctionnalités de rapport riches et interactives. Développé dans le cadre de l'écosystème SQL Server, SSRSest étroitement intégré aux solutions de base de données de Microsoft.

Cependant, pour de nombreux scénarios de génération de PDF, l'infrastructure SSRSest excessive. Les principales raisons de migrer sont les suivantes

  1. Infrastructure lourde : nécessite la configuration de SQL Server, de Report Server et d'IIS.
  2. Dépendance à l'écosystème Microsoft : liée aux licences SQL Server et Windows Server
  3. Déploiement complexe : déploiement des rapports, configuration de la sécurité et gestion des abonnements
  4. Licences coûteuses : les licences SQL Server, notamment pour les fonctionnalités d'entreprise.
  5. Compatibilité Web limitée : Intégration difficile avec les frameworks SPA modernes
  6. Frais de maintenance : Mise à jour des serveurs, maintenance des bases de données, gestion des rapports
  7. Absence d'option native du cloud : Conçu pour une utilisation sur site, le support du cloud est peu pratique.

Quand SSRSest excessif

Votre besoin Frais généraux SSRS
Générer des factures Serveur de rapport complet
Exporter des tableaux de données Licence SQL Server
Créer des PDF à partir de données Serveur Windows
Génération de documents simples Abonnements aux rapports

IronPDF permet de générer des PDF en cours de processus, sans aucune infrastructure de serveur.

Comparaison entre SSRSet IronPDF

Fonction SSRS IronPDF
Dépendance Requiert SQL Server Pas de dépendance spécifique à l'égard d'une base de données
Déploiement Basé sur le serveur Bibliothèque (intégrée dans les applications)
Intégration Intégration étroite avec Microsoft Fonctionne avec n'importe quelle source de données
Visualisation des données Options natives étendues Visualisations axées sur les PDF
Complexité Haut (configuration du serveur requise) Modéré à faible (configuration de la bibliothèque)
Coût Coût des licences SQL Server Coût de la licence par développeur
HTML à PDF Non Chromium complet
URL vers PDF Non Oui
Support CSS Limité CSS3 complet
JavaScript Non ES2024 complet

IronPDF, contrairement à SSRS, n'est pas lié à une base de données ou à un écosystème de serveur spécifique. Il fournit aux développeurs une bibliothèque flexible pour créer, éditer et manipuler dynamiquement des documents PDF directement en C#. Ce découplage par rapport à une infrastructure basée sur un serveur offre un avantage notable : il est simple et adaptable, et convient à un large éventail d'applications au-delà de la production de rapports.

Pour les équipes qui prévoient d'adopter .NET 10 et C# 14 d'ici 2025 et 2026,IronPDFfournit un moteur de rendu moderne Chromium qui élimine la complexité de l'infrastructure de SSRS.


Avant de commencer

Prérequis

  1. Environnement .NET : .NET Framework 4.6.2+ ou .NET Core 3.1+ / .NET 5/6/7/8/9+
  2. Accès à NuGet : possibilité d'installer des packages NuGet
  3. Licence IronPDF : Obtenez votre clé de licence sur ironpdf.com

Modifications du paquet NuGet

# SSRShas no direct NuGet - it's server-based
# Remove any ReportViewer controls

dotnet remove package Microsoft.ReportingServices.ReportViewerControl.WebForms
dotnet remove package Microsoft.ReportingServices.ReportViewerControl.WinForms

# Install IronPDF
dotnet add package IronPdf
# SSRShas no direct NuGet - it's server-based
# Remove any ReportViewer controls

dotnet remove package Microsoft.ReportingServices.ReportViewerControl.WebForms
dotnet remove package Microsoft.ReportingServices.ReportViewerControl.WinForms

# Install IronPDF
dotnet add package IronPdf
SHELL

Configurationde la licence

// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
$vbLabelText   $csharpLabel

Référence API complète

Modifications de l'espace de nommage

// Before: SSRS
using Microsoft.Reporting.WebForms;
using Microsoft.Reporting.WinForms;

// After: IronPDF
using IronPdf;
using IronPdf.Rendering;
// Before: SSRS
using Microsoft.Reporting.WebForms;
using Microsoft.Reporting.WinForms;

// After: IronPDF
using IronPdf;
using IronPdf.Rendering;
$vbLabelText   $csharpLabel

Mappages de l'API de base

Concept SSRS Équivalent d'IronPDF Notes
LocalReport ChromePdfRenderer Rendu de base
RapportServeur RenderUrlAsPdf() Rendu basé sur l'URL
fichiers .rdlc Modèles HTML/CSS Format du modèle
ReportParameter Interpolation de chaînes de caractères Paramètres
ReportDataSource Données C# + HTML Liaison de données
LocalReport.Render("PDF") RenderHtmlAsPdf() Sortie PDF
Sous-rapport PDF fusionnés Rapports imbriqués
URL du serveur de rapports Pas nécessaire Aucun serveur n'est nécessaire
Commande ReportViewer Contrôle Pas nécessaire Génération directe de PDF
Formats d'exportation Le PDF est natif Un résultat ciblé

Exemples de migration de code

Exemple 1 : Conversion HTML vers PDF

Avant (SSRS):

// SSRS- SQL Server Reporting Services
using System;
using System.Data;
using System.Data.SqlClient;
using Microsoft.Reporting.WebForms;
using System.IO;

class SSRSHtmlToPdf
{
    static void Main()
    {
        // Create a ReportViewer instance
        var reportViewer = new ReportViewer();
        reportViewer.ProcessingMode = ProcessingMode.Local;

        // Load RDLC report definition
        reportViewer.LocalReport.ReportPath = "Report.rdlc";

        // Add HTML content as a parameter or dataset
        var htmlContent = "<h1>Hello World</h1><p>This is HTML content.</p>";
        var param = new ReportParameter("HtmlContent", htmlContent);
        reportViewer.LocalReport.SetParameters(param);

        // Render the report to PDF
        string mimeType, encoding, fileNameExtension;
        string[] streams;
        Warning[] warnings;

        byte[] bytes = reportViewer.LocalReport.Render(
            "PDF",
            null,
            out mimeType,
            out encoding,
            out fileNameExtension,
            out streams,
            out warnings);

        File.WriteAllBytes("output.pdf", bytes);
    }
}
// SSRS- SQL Server Reporting Services
using System;
using System.Data;
using System.Data.SqlClient;
using Microsoft.Reporting.WebForms;
using System.IO;

class SSRSHtmlToPdf
{
    static void Main()
    {
        // Create a ReportViewer instance
        var reportViewer = new ReportViewer();
        reportViewer.ProcessingMode = ProcessingMode.Local;

        // Load RDLC report definition
        reportViewer.LocalReport.ReportPath = "Report.rdlc";

        // Add HTML content as a parameter or dataset
        var htmlContent = "<h1>Hello World</h1><p>This is HTML content.</p>";
        var param = new ReportParameter("HtmlContent", htmlContent);
        reportViewer.LocalReport.SetParameters(param);

        // Render the report to PDF
        string mimeType, encoding, fileNameExtension;
        string[] streams;
        Warning[] warnings;

        byte[] bytes = reportViewer.LocalReport.Render(
            "PDF",
            null,
            out mimeType,
            out encoding,
            out fileNameExtension,
            out streams,
            out warnings);

        File.WriteAllBytes("output.pdf", bytes);
    }
}
$vbLabelText   $csharpLabel

Après (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class IronPdfHtmlToPdf
{
    static void Main()
    {
        // Create a ChromePdfRenderer instance
        var renderer = new ChromePdfRenderer();

        // Convert HTML string to PDF
        var htmlContent = "<h1>Hello World</h1><p>This is HTML content.</p>";
        var pdf = renderer.RenderHtmlAsPdf(htmlContent);

        // Save the PDF file
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class IronPdfHtmlToPdf
{
    static void Main()
    {
        // Create a ChromePdfRenderer instance
        var renderer = new ChromePdfRenderer();

        // Convert HTML string to PDF
        var htmlContent = "<h1>Hello World</h1><p>This is HTML content.</p>";
        var pdf = renderer.RenderHtmlAsPdf(htmlContent);

        // Save the PDF file
        pdf.SaveAs("output.pdf");
    }
}
$vbLabelText   $csharpLabel

Cet exemple illustre la différence architecturale fondamentale. SSRSnécessite la création d'une instance ReportViewer, le chargement d'un fichier de définition de rapport .rdlc, la définition de paramètres, puis l'appel de LocalReport.Render("PDF")avec plusieurs paramètres out pour les métadonnées.

IronPDF utilise un ChromePdfRendereravec RenderHtmlAsPdf()en seulement trois lignes de code. Aucun fichier de définition de rapport, aucun objet de paramètre, aucune manipulation de métadonnées n'est requise. Consultez la documentation HTML vers PDF pour des exemples complets.

Exemple 2 : URL vers PDF avec en-têtes et pieds de page

Avant (SSRS):

// SSRS- SQL Server Reporting Services
using System;
using System.IO;
using System.Net;
using Microsoft.Reporting.WebForms;

class SSRSUrlToPdf
{
    static void Main()
    {
        // Download HTML content from URL
        string url = "https://example.com";
        string htmlContent;

        using (var client = new WebClient())
        {
            htmlContent = client.DownloadString(url);
        }

        // Create RDLC report with header/footer configuration
        var reportViewer = new ReportViewer();
        reportViewer.ProcessingMode = ProcessingMode.Local;
        reportViewer.LocalReport.ReportPath = "WebReport.rdlc";

        // Set parameters for header and footer
        var parameters = new ReportParameter[]
        {
            new ReportParameter("HeaderText", "Company Report"),
            new ReportParameter("FooterText", "Page " + DateTime.Now.ToString()),
            new ReportParameter("HtmlContent", htmlContent)
        };
        reportViewer.LocalReport.SetParameters(parameters);

        // Render to PDF
        string mimeType, encoding, fileNameExtension;
        string[] streams;
        Warning[] warnings;

        byte[] bytes = reportViewer.LocalReport.Render(
            "PDF", null, out mimeType, out encoding,
            out fileNameExtension, out streams, out warnings);

        File.WriteAllBytes("webpage.pdf", bytes);
    }
}
// SSRS- SQL Server Reporting Services
using System;
using System.IO;
using System.Net;
using Microsoft.Reporting.WebForms;

class SSRSUrlToPdf
{
    static void Main()
    {
        // Download HTML content from URL
        string url = "https://example.com";
        string htmlContent;

        using (var client = new WebClient())
        {
            htmlContent = client.DownloadString(url);
        }

        // Create RDLC report with header/footer configuration
        var reportViewer = new ReportViewer();
        reportViewer.ProcessingMode = ProcessingMode.Local;
        reportViewer.LocalReport.ReportPath = "WebReport.rdlc";

        // Set parameters for header and footer
        var parameters = new ReportParameter[]
        {
            new ReportParameter("HeaderText", "Company Report"),
            new ReportParameter("FooterText", "Page " + DateTime.Now.ToString()),
            new ReportParameter("HtmlContent", htmlContent)
        };
        reportViewer.LocalReport.SetParameters(parameters);

        // Render to PDF
        string mimeType, encoding, fileNameExtension;
        string[] streams;
        Warning[] warnings;

        byte[] bytes = reportViewer.LocalReport.Render(
            "PDF", null, out mimeType, out encoding,
            out fileNameExtension, out streams, out warnings);

        File.WriteAllBytes("webpage.pdf", bytes);
    }
}
$vbLabelText   $csharpLabel

Après (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System;

class IronPdfUrlToPdf
{
    static void Main()
    {
        // Create a ChromePdfRenderer instance
        var renderer = new ChromePdfRenderer();

        // Configure rendering options with header and footer
        renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
        {
            HtmlFragment = "<div style='text-align:center'>Company Report</div>"
        };

        renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter()
        {
            HtmlFragment = "<div style='text-align:center'>Page {page} of {total-pages} - " + DateTime.Now.ToString("MM/dd/yyyy") + "</div>"
        };

        // Convert URL to PDF
        string url = "https://example.com";
        var pdf = renderer.RenderUrlAsPdf(url);

        // Save the PDF file
        pdf.SaveAs("webpage.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System;

class IronPdfUrlToPdf
{
    static void Main()
    {
        // Create a ChromePdfRenderer instance
        var renderer = new ChromePdfRenderer();

        // Configure rendering options with header and footer
        renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
        {
            HtmlFragment = "<div style='text-align:center'>Company Report</div>"
        };

        renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter()
        {
            HtmlFragment = "<div style='text-align:center'>Page {page} of {total-pages} - " + DateTime.Now.ToString("MM/dd/yyyy") + "</div>"
        };

        // Convert URL to PDF
        string url = "https://example.com";
        var pdf = renderer.RenderUrlAsPdf(url);

        // Save the PDF file
        pdf.SaveAs("webpage.pdf");
    }
}
$vbLabelText   $csharpLabel

SSRS ne peut pas convertir directement les URL en PDF. Vous devez télécharger manuellement le contenu HTML avec WebClient.DownloadString(), créer un fichier de rapport .rdlc distinct, transmettre le texte HTML et le texte d'en-tête/pied de page sous forme de tableaux ReportParameter, puis effectuer le rendu avec la signature complexe de la méthode Render().

Le RenderUrlAsPdf()d'IronPDF prend en charge l'ensemble du processus en un seul appel. Les en-têtes et les pieds de page sont configurés avec des objets HtmlHeaderFooter qui prennent en charge l'intégralité du HTML/CSS et des caractères génériques tels que {page} et {total-pages}. Pour en savoir plus, consultez nos tutoriels.

Exemple 3 : Rapport basé sur une base de données

Avant (SSRS):

// SSRS- SQL Server Reporting Services
using System;
using System.Data;
using System.Data.SqlClient;
using Microsoft.Reporting.WebForms;
using System.IO;

class SSRSDatabaseReport
{
    static void Main()
    {
        // Create a ReportViewer instance
        var reportViewer = new ReportViewer();
        reportViewer.ProcessingMode = ProcessingMode.Local;
        reportViewer.LocalReport.ReportPath = "SalesReport.rdlc";

        // Create database connection and fetch data
        string connString = "Server=localhost;Database=SalesDB;Integrated Security=true;";
        using (var connection = new SqlConnection(connString))
        {
            var adapter = new SqlDataAdapter("SELECT * FROM Sales", connection);
            var dataSet = new DataSet();
            adapter.Fill(dataSet, "Sales");

            // Bind data to report
            var dataSource = new ReportDataSource("SalesDataSet", dataSet.Tables[0]);
            reportViewer.LocalReport.DataSources.Clear();
            reportViewer.LocalReport.DataSources.Add(dataSource);
        }

        // Render to PDF
        string mimeType, encoding, fileNameExtension;
        string[] streams;
        Warning[] warnings;

        byte[] bytes = reportViewer.LocalReport.Render(
            "PDF", null, out mimeType, out encoding,
            out fileNameExtension, out streams, out warnings);

        File.WriteAllBytes("sales-report.pdf", bytes);
    }
}
// SSRS- SQL Server Reporting Services
using System;
using System.Data;
using System.Data.SqlClient;
using Microsoft.Reporting.WebForms;
using System.IO;

class SSRSDatabaseReport
{
    static void Main()
    {
        // Create a ReportViewer instance
        var reportViewer = new ReportViewer();
        reportViewer.ProcessingMode = ProcessingMode.Local;
        reportViewer.LocalReport.ReportPath = "SalesReport.rdlc";

        // Create database connection and fetch data
        string connString = "Server=localhost;Database=SalesDB;Integrated Security=true;";
        using (var connection = new SqlConnection(connString))
        {
            var adapter = new SqlDataAdapter("SELECT * FROM Sales", connection);
            var dataSet = new DataSet();
            adapter.Fill(dataSet, "Sales");

            // Bind data to report
            var dataSource = new ReportDataSource("SalesDataSet", dataSet.Tables[0]);
            reportViewer.LocalReport.DataSources.Clear();
            reportViewer.LocalReport.DataSources.Add(dataSource);
        }

        // Render to PDF
        string mimeType, encoding, fileNameExtension;
        string[] streams;
        Warning[] warnings;

        byte[] bytes = reportViewer.LocalReport.Render(
            "PDF", null, out mimeType, out encoding,
            out fileNameExtension, out streams, out warnings);

        File.WriteAllBytes("sales-report.pdf", bytes);
    }
}
$vbLabelText   $csharpLabel

Après (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;
using System;
using System.Data;
using System.Data.SqlClient;
using System.Text;

class IronPdfDatabaseReport
{
    static void Main()
    {
        // Create database connection and fetch data
        string connString = "Server=localhost;Database=SalesDB;Integrated Security=true;";
        var dataTable = new DataTable();

        using (var connection = new SqlConnection(connString))
        {
            var adapter = new SqlDataAdapter("SELECT * FROM Sales", connection);
            adapter.Fill(dataTable);
        }

        // Build HTML table from data
        var htmlBuilder = new StringBuilder();
        htmlBuilder.Append("<h1>Sales Report</h1><table border='1'><tr>");

        foreach (DataColumn column in dataTable.Columns)
            htmlBuilder.Append($"<th>{column.ColumnName}</th>");
        htmlBuilder.Append("</tr>");

        foreach (DataRow row in dataTable.Rows)
        {
            htmlBuilder.Append("<tr>");
            foreach (var item in row.ItemArray)
                htmlBuilder.Append($"<td>{item}</td>");
            htmlBuilder.Append("</tr>");
        }
        htmlBuilder.Append("</table>");

        // Convert to PDF
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(htmlBuilder.ToString());
        pdf.SaveAs("sales-report.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
using System.Data;
using System.Data.SqlClient;
using System.Text;

class IronPdfDatabaseReport
{
    static void Main()
    {
        // Create database connection and fetch data
        string connString = "Server=localhost;Database=SalesDB;Integrated Security=true;";
        var dataTable = new DataTable();

        using (var connection = new SqlConnection(connString))
        {
            var adapter = new SqlDataAdapter("SELECT * FROM Sales", connection);
            adapter.Fill(dataTable);
        }

        // Build HTML table from data
        var htmlBuilder = new StringBuilder();
        htmlBuilder.Append("<h1>Sales Report</h1><table border='1'><tr>");

        foreach (DataColumn column in dataTable.Columns)
            htmlBuilder.Append($"<th>{column.ColumnName}</th>");
        htmlBuilder.Append("</tr>");

        foreach (DataRow row in dataTable.Rows)
        {
            htmlBuilder.Append("<tr>");
            foreach (var item in row.ItemArray)
                htmlBuilder.Append($"<td>{item}</td>");
            htmlBuilder.Append("</tr>");
        }
        htmlBuilder.Append("</table>");

        // Convert to PDF
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(htmlBuilder.ToString());
        pdf.SaveAs("sales-report.pdf");
    }
}
$vbLabelText   $csharpLabel

SSRS nécessite un fichier de rapport .rdlc préconçu ("SalesReport.rdlc"), le remplissage d'un DataSet, la création d'un ReportDataSourceavec un nom spécifique ("SalesDataSet") qui doit correspondre à la définition du rapport, l'effacement des sources de données existantes, l'ajout de la nouvelle source de données, puis le rendu.

IronPDF utilise votre code d'accès aux données existant (même schéma SqlDataAdapter), puis construit le HTML de manière dynamique avec StringBuilder. Vous avez un contrôle total sur la mise en page à l'aide de HTML/CSS standard - aucun fichier de définition de rapport propriétaire n'est requis.


Comparaison des fonctionnalités

Fonction SSRS IronPDF
Infrastructure
Serveur requis Oui (Report Server) Non
Licence SQL Server Les exigences sont les suivantes Pas nécessaire
Serveur Windows Les exigences sont les suivantes Toutes les plates-formes
Base de données requise Oui (ReportServer DB) Non
Développement
Concepteur visuel Oui (.rdlc) Éditeurs HTML
Format du modèle RDLC/RDL HTML/CSS/Razor
Sources de données DSN intégré Toutes les données C#
Rendu
HTML vers PDF Non Chromium complet
URL vers PDF Non Oui
Support CSS Limité CSS3 complet
JavaScript Non ES2024 complet
Graphiques Intégré Via les bibliothèques JS
Déploiement
Déploiement du rapport Au serveur Avec l'app
Configuration Complexe Simple
Entretien Haut Faible

Problèmes de migration courants

Édition 1 : Définitions des rapports RDLC

SSRS: Utilise le format XML propriétaire .rdlc.

Solution: Convertir en modèles HTML :

  1. Ouvrir .rdlc dans Visual Studio
  2. Documenter la structure de la mise en page
  3. Recréer en HTML/CSS
  4. Utiliser Razor pour la liaison de données

Edition 2 : Sources de données partagées

SSRS:Chaînes de connexion dans Report Server.

Solution: Utilisez la couche d'accès aux données de votre application :

var data = await _dbContext.Sales.ToListAsync();
// Then bind to HTML template
var data = await _dbContext.Sales.ToListAsync();
// Then bind to HTML template
$vbLabelText   $csharpLabel

Sujet 3 : Interface utilisateur des paramètres de rapport

SSRS:Intégration d'invites de paramètres.

Solution: Construisez une interface utilisateur paramétrée dans votre application :

// Your own parameter form, then:
var pdf = GenerateReport(startDate, endDate, region);
// Your own parameter form, then:
var pdf = GenerateReport(startDate, endDate, region);
$vbLabelText   $csharpLabel

Numéro 4 : Abonnements/Rapports programmés

SSRS: Moteur d'abonnement intégré.

Solution: Utiliser un cadre de travail en arrière-plan :

// Using Hangfire or similar
RecurringJob.AddOrUpdate("weekly-report",
    () => GenerateAndEmailReport(), Cron.Weekly);
// Using Hangfire or similar
RecurringJob.AddOrUpdate("weekly-report",
    () => GenerateAndEmailReport(), Cron.Weekly);
$vbLabelText   $csharpLabel

Liste de contrôle de la migration

Pré-migration

  • Inventaire de tous les rapports SSRS(fichiers .rdlc )
  • Sources et connexions des données du document
  • Captures d'écran des mises en page des rapports à titre de référence visuelle
  • Lister les paramètres de chaque rapport
  • Notez les horaires d'abonnement
  • Obtenez votre clé de licenceIronPDFsur ironpdf.com

Mises à jour du code

  • Supprimer les packages ReportViewer
  • Installez le package NuGet IronPdf
  • Convertir les fichiers .rdlc en modèles HTML
  • Remplacez LocalReportpar ChromePdfRenderer
  • Remplacer ReportDataSourcepar des données C# et des modèles HTML
  • Remplacer ReportParameterpar une interpolation de chaîne
  • Remplacez LocalReport.Render(&quot;PDF&quot;) par RenderHtmlAsPdf()
  • Implémenter des en-têtes/pieds de page avec HtmlHeaderFooter
  • Ajouter l'initialisation de la licence au démarrage de l'application

Infrastructure

  • Mise hors service du serveur de rapports de planification
  • Migrer les abonnements vers le planificateur de tâches (Hangfire, etc.)
  • Mettre à jour les scripts de déploiement

Essai

  • Comparer visuellement le résultat PDF
  • Vérifier l'exactitude des données
  • Test de pagination
  • Vérifier tous les paramètres
  • Tests de performance

Curtis Chau
Rédacteur technique

Curtis Chau détient un baccalauréat en informatique (Université de Carleton) et se spécialise dans le développement front-end avec expertise en Node.js, TypeScript, JavaScript et React. Passionné par la création d'interfaces utilisateur intuitives et esthétiquement plaisantes, Curtis aime travailler avec des frameworks modernes ...

Lire la suite