Fermer

septembre 26, 2023

Comment basculer entre le service REST de reporting et le serveur de rapports


Il est facile de basculer entre le service REST Telerik Reporting et Report Server. Voici brièvement comment procéder ainsi que les avantages et les inconvénients de chaque méthode.

Ce que je parviens à réaliser avec cet article, c’est de montrer à quel point il est facile de basculer entre les deux méthodes de rendu des rapports : avec Serveur de rapports Telerik (TRS) et avec Rapports Telerik REST. Je montrerai également les avantages et les inconvénients de chaque méthode et comment exécuter les deux solutions côte à côte avec un commutateur pour basculer entre les deux. Cet article n’est pas vraiment destiné à être un article pratique complet. Cependant, vous pouvez me demander comment j’ai réalisé les aspects les plus techniques de la commutation.

Une chose à noter : cela demande un peu de mise en place. Vous devez déjà disposer d’un site ASP.NET Core. Ceci est utilisé pour « appeler » les instances de reporting TRS et REST via la visionneuse de rapports HTML5 Telerik.

La configuration initiale

Pour la configuration initiale permettant de basculer entre les rapports TRS et REST, nous devons procéder comme suit :

TRS : configurer une instance TRS

Assurez-vous que la version correspond à la version de Telerik Reporting sur le site ASP.NET Core.

  1. Configurez un sous-domaine sur votre site principal ou exécutez localhost sur un port. Remarque : la version du sous-domaine nécessite une licence Telerik, contrairement à localhost.
  2. Copiez le site Web du dossier d’installation vers la zone d’hébergement physique.
  3. Modifiez la zone de la chaîne de connexion et l’instance TRS devrait commencer à fonctionner.

Rapports REST : créer un site de rapports Telerik REST

  1. Cela implique la création d’un projet de service Telerik Reporting REST. Remarque : Dans mon cas, j’ai créé une version .NET Framework du service Reporting REST. En effet, j’avais déjà certaines fonctions utilisateur dans un projet .NET Framework et celles-ci ne fonctionneraient pas dans un environnement .NET Core. Remarque également : il est possible d’appeler le projet .NET Framework à partir du site Web .NET Core et de .NET Core Worker (c’est-à-dire qu’il n’est pas nécessaire d’avoir une interface utilisateur pour appeler le projet REST).

    (Vous pouvez également utiliser le projet nommé CSharp.NetFramework.ReportingRestServiceCorsDemo.csproj, qui est distribué avec l’installation du produit, comme modèle. Cela peut accélérer les choses si vous n’êtes pas familier avec la configuration CORS. Remarque : cela peut être utilisé via le boîte de dialogue initiale du projet Visual Studio.)

    Il est nécessaire de décorer la classe Controller avec ce qui suit, sinon il y aura une erreur CORS.

[EnableCors(origins: "https://staging.buku.uk"
    , headers: "*", methods: "*")
        ]
            public class ReportsController : ReportsControllerBase
            
            
  1. De plus, il est nécessaire de placer certains rapports dans un répertoire appelé Rapports à la racine du projet. Vous pouvez séparer les rapports à l’aide de sous-répertoires.

  2. J’utilise un résolveur de rapport personnalisé pour réparer « comme par magie » la chaîne de connexion et les paramètres fournis par la fonction appelante. Dans la plupart des cas, il s’agit d’une visionneuse de rapports Telerik HTML5. Cependant, les tâches en arrière-plan peuvent être exécutées à partir du processus Worker toujours actif.

    Remarque : La propriété Booking.Data.NET.Classes.Configuration._sBookingConnectionString se résout en une chaîne de connexion basée sur la variable _nServerInstance. c’est-à-dire Dev, Staging ou Live.

using System.Collections.Generic;
using System.IO;
using System.Linq;
using Telerik.Reporting;
using Telerik.Reporting.Services;
using Booking.Library.NET.Classes;

namespace Booking.Reporting.NET.REST.Classes
{
  public class CustomReportSourceResolver : IReportSourceResolver
  {
    public string ReportsPath { get; set; }

    public CustomReportSourceResolver(string reportsPath)
    {
      this.ReportsPath = reportsPath;
    }

    public ReportSource Resolve(string reportId, OperationOrigin operationOrigin, IDictionary<string, object> currentParameterValues)
    {
      try
      {
        string reportPath = Path.Combine(this.ReportsPath, reportId);
        var reportPackager = new ReportPackager();
        Report report = null;
        using (var sourceStream = System.IO.File.OpenRead(reportPath))
        {
          report = (Report)reportPackager.UnpackageDocument(sourceStream);
        }
        if (currentParameterValues.Any(CPV => CPV.Key == "nServerInstance"))
        {
          var lnServerInstance = currentParameterValues.Where(CPV => CPV.Key == "nServerInstance").FirstOrDefault().Value;
          Booking.Data.NET.Classes.Configuration._nServerInstance = (int)(long)lnServerInstance;
        }
        ReportConnectionStringManager loReportConnectionStringManager = new ReportConnectionStringManager(Booking.Data.NET.Classes.Configuration._sBookingConnectionString);
        ReportSource loReportSource = loReportConnectionStringManager.UpdateReportSource(new InstanceReportSource() { ReportDocument = report });
        foreach (var parameter in currentParameterValues)
        {
          loReportSource.Parameters.Add(parameter.Key, parameter.Value);
        }
        return loReportSource;
      }
      catch (System.Exception loException)
      {
        Logger.LogException(loException);
      }
      return null;
    }
  }
}

Avantages et inconvénients

Les avantages et les inconvénients de choisir l’un ou l’autre sont principalement liés au coût. Même si le TRS vaut chaque centime dépensé, certains clients ont des contraintes budgétaires qui pourraient empêcher une vente sous certaines conditions. La plateforme Buku est conçu pour fonctionner sur l’infrastructure client là où le client souhaite que cela se produise (c’est-à-dire que ses propres serveurs et réseau, ainsi que le produit, peuvent fonctionner entièrement sur un ordinateur portable Windows). Ainsi, si chaque fois que nous trouvions un client souhaitant utiliser le logiciel, il devait également acheter TRS, ses coûts augmenteraient considérablement.

La solution REST peut rendre les rapports de la même manière que la solution TRS et le seul coût pour le client est l’espace disque dur et la puissance de l’ordinateur. (Sous le TRS se trouve une implémentation du service REST, qui facilite de tels scénarios de commutation.) Notez qu’il doit également y avoir une version cloud dans laquelle les clients peuvent s’inscrire pour utiliser le produit, et les données sont dans le cloud sécurisé.

La solution TRS présente certains avantages supplémentaires dans la possibilité d’exécuter des rapports depuis le serveur lui-même, bien que nous n’utilisons pas pleinement cette fonctionnalité dans la plateforme Buku. Les clients voient uniquement le moteur de reporting de la plateforme Buku. Actuellement, nous proposons uniquement la conception de rapports à titre de conseil supplémentaire. Nous prévoyons un module de reporting qui permettrait à l’utilisateur de concevoir des rapports personnalisés en fonction de sources de données préprogrammées.

Ainsi, la façon dont la visionneuse de rapports HTML5 est configurée est l’une des considérations de conception qui rendent possible le basculement entre TRS et REST.

Ce qui suit est la partie supérieure de la visionneuse de rapports. Plusieurs points à noter :

  1. TRS dispose d’un mode invité qui ne nécessite pas d’informations d’identification de connexion, comme vous pouvez le voir sur les lignes sous l’URL.
  2. REST n’a pas de méthode d’authentification. Cependant, laisser les lignes d’informations d’identification là où elles se trouvent est ignoré.
  3. Les sources de données TRS sont contrôlées par un connecteur de données TRS, en réalité une chaîne de connexion. Il existe également des sources de données d’objet pour certains des plus petits rapports.
  4. Le programme REST utilise toujours un arrangement _nServerInstance pour déterminer la chaîne de connexion selon qu’il s’agit de Dev, Staging ou Live.
  5. Les différents types de rapports comportent différents types et nombres de paramètres ; cependant, certains rapports utilisent les mêmes paramètres et types de paramètres. Ceux-ci peuvent être regroupés à l’aide du même bloc pour plusieurs rapports.
$(document).ready(function () {
  $("#rvMain").telerik_ReportViewer({
    reportServer: {
      url: "@this.Model._sReportingUrl",
      username: null,
      password: null
    },
    reportSource: {
      report: '@this.Model._sReport',
      parameters: {
        @switch ((Booking.Library.Classes.Enums.Reports)this.Model._nReport)
        {
          case Booking.Library.Classes.Enums.Reports.AdHocSLInvoice1:
          case Booking.Library.Classes.Enums.Reports.AdHocSLInvoice2:
          case Booking.Library.Classes.Enums.Reports.AdHocSLCreditNote1:
          case Booking.Library.Classes.Enums.Reports.AdHocSLCreditNote2:
          case Booking.Library.Classes.Enums.Reports.AdHocPLInvoice1:
          case Booking.Library.Classes.Enums.Reports.AdHocPLInvoice2:
          case Booking.Library.Classes.Enums.Reports.AdHocPLCreditNote1:
          case Booking.Library.Classes.Enums.Reports.AdHocPLCreditNote2:
          case Booking.Library.Classes.Enums.Reports.AdHocPLPayment:
          case Booking.Library.Classes.Enums.Reports.AdHocSLReceipt:
          {
            <text>
              nServerInstance: @Booking.Data.Classes.Configuration._nServerInstance,
              gTransactionId: '@this.Model._gId.ToString()',
              gCompanyId: gCompanyId,
              sCulture: sCompanyCulture
            </text>
          }
            break;
          case Booking.Library.Classes.Enums.Reports.AdHocDisbursementBatch:
          {
            <text>
              nServerInstance: @Booking.Data.Classes.Configuration._nServerInstance,
              gBatchId: '@this.Model._gId.ToString()',
              sCulture: sCompanyCulture
            </text>
          }
            break;
          case Booking.Library.Classes.Enums.Reports.DisbursementBatch:
          {
            <text>
              nServerInstance: @Booking.Data.Classes.Configuration._nServerInstance,
              gCompanyId: gCompanyId,
              dStart: kendo.parseDate('@this.Model._dStart.ToString("dd/MM/yyyy")', "dd/MM/yyyy"),
              dEnd: kendo.parseDate('@this.Model._dEnd.Date.AddDays(1).ToString("dd/MM/yyyy")', "dd/MM/yyyy"),
              bPosted: '@this.Model._bPosted.ToString().ToLower()',
              nReport: @this.Model._nReport,
              bAll: '@this.Model._bAll.ToString().ToLower()' == 'true',
              sCulture: sCompanyCulture
            </text>
          }
            break;
          case Booking.Library.Classes.Enums.Reports.AdHocJournalBatch:

D’une certaine manière, le rapport REST dispose d’un mécanisme plus simple pour maintenir les rapports à jour. Le rapport sur le disque est le plus récent et est toujours enregistré sur le disque. Les rapports TRS doivent être publiés sur le serveur.

Afin de gérer la commutation, j’utilise deux contrôles, un switch et un champ Url TRS/REST. Le switch est simplement très activé ou désactivé. Le Champ contenant l’Url aurait pour TRS https://trs.buku.uk et REPOS https://rs.buku.uk (Staging des rapports (RS)).

Revenir à TRS après avoir utilisé REST est un peu compliqué car souvent les rapports ne sont pas à jour sur TRS et doivent donc être repoussés.


Apprendre encore plus

Pour en savoir plus, cet article de blog explique plus en détail comment vous pouvez combiner et personnaliser Telerik Report Server et Telerik Reporting. [SDK]: Reportage Telerik [SDK] & Report Server : le duo dynamique de reporting.

Les deux produits de reporting proposent un essai gratuit, vous pouvez donc commencer à expérimenter dès aujourd’hui :

Essayez les rapports Telerik Essayez le serveur de rapports Telerik

Mieux encore, Telerik Reporting et Telerik Report Server sont disponibles dans Telerik DevCraft Ultimate Bundle : avec nos bibliothèques d’interface utilisateur .NET et JavaScript, des tests automatisés, des outils de simulation et bien plus encore. Découvrez cet essai gratuit robuste dès aujourd’hui !

Essayez Telerik DevCraft




Source link

septembre 26, 2023