Implementacja: PrintReportWithOdbcSource
Opis scenariusza biznesowego
Klasa demonstracyjna PrintReportWithOdbcSource prezentuje implementację uniwersalnego zasilania danych z wykorzystaniem interfejsu standardu ODBC (Open Database Connectivity). Model ten jest kluczowy w systemach przedsiębiorstw, gdzie zachodzi potrzeba generowania wydruków na podstawie rozproszonych źródeł danych nieposiadających dedykowanych, natywnych sterowników ADO.NET.
W analizowanym przykładzie kod demonstruje pobieranie danych za pośrednictwem zdefiniowanego w systemie operacyjnym Windows źródła danych DSN (Data Source Name) o nazwie testaaa. Zapytanie SQL nakierowane na obiekt Arkusz1$ bezpośrednio wskazuje na scenariusz, w którym sPrint API traktuje arkusz kalkulacyjny pliku MS Excel lub plik płaski jako zewnętrzną, relacyjną tabelę bazy danych.
Analiza modelu i struktury żądania ODBC
W odróżnieniu od natywnego dostawcy bazodanowego (DbSourceViewModel), model OdbcSourceViewModel upraszcza strukturę żądania sieciowego, agregując parametry sieciowe wewnątrz jednego ciągu konfiguracyjnego:
- ConnectionString (Ciąg połączenia): Zamiast rozbijać parametry na Server, Port i DatabaseName, deweloper przekazuje gotowy ciąg autoryzacyjny standardu ODBC. Może on odwoływać się do skonfigurowanego w systemie profilu (np. DSN=testaaa) lub zawierać pełną definicję sterownika i ścieżki pliku (Driver-Based Connection String).
- Query (Zapytanie strukturalne): Treść zapytania SQL dostosowana do dialektu sterownika ODBC, który zarządza plikiem źródłowym lub bazą danych.
Pełny kod źródłowy przykładu (C#)
Poniższy kod prezentuje kompletną, asynchroniczną strukturę klasy PrintReportWithOdbcSource zrealizowaną na platformie .NET 8, z wykorzystaniem polimorficznych modeli ścieżkowych (Path Methodology):
using Comarch.BI.CounterSprint.Integration.Client;
namespace Comarch.BI.CounterSprint;
public static class PrintReportWithOdbcSource
{
private static readonly string ReportPath = Path.GetFullPath(@"Packages\OdbcSource\CounterSprintOdbcMain.sp");
private static readonly string PrintResultPath1 = Path.GetFullPath(@"Packages\OdbcSource\CounterSprintOdbcMain1.pdf");
/// <summary>
/// Demonstration method: prints a report using file paths as sources and ODBC connection.
/// </summary>
public static async Task PrintReportFromPath(IntegrationApiClient client)
{
var operationId = Guid.NewGuid().ToString();
LogStep($"Retrieving report information, operation ID: {operationId}");
var infoRequest = CreateInfoRequestFromPath(operationId);
var info = await client.InfoAsync(infoRequest);
LogStep($"Printing report to PDF, operation ID: {operationId}");
var printRequest = CreatePrintRequestFromPath();
await client.PrintAsync(printRequest);
LogStep($"Report saved to {PrintResultPath1}");
}
private static PrintViewModel CreatePrintRequestFromPath()
=> new ()
{
OperationId = Guid.NewGuid().ToString(),
Report = new PathSourceViewModel { Path = ReportPath },
PrintFormat = FileFormat.Pdf,
Output = new PathOutputViewModel { Path = PrintResultPath1 },
DataSources = [new OdbcSourceViewModel()
{
ConnectionString = "DSN=testaaa", // Nazwa profilu systemowego ODBC (DSN)
Query = "Select * from \"Arkusz1$\"", // Zapytanie SQL dedykowane dla struktury ODBC
}],
Parameters = [new ParameterToReplaceViewModel
{
Name = "group_name",
Value = "Furniture"
}]
};
private static InfoViewModel CreateInfoRequestFromPath(string operationId)
=> new ()
{
OperationId = operationId,
Report = new PathSourceViewModel { Path = ReportPath }
};
private static void LogStep(string message)
=> Console.WriteLine($"[Demo PrintReportWithOdbcSource] {message}");
}
Ważne uwagi dla deweloperów i administratorów
- Konfiguracja środowiskowa (System DSN): Ponieważ usługa sPrint API działa jako niezależna usługa systemowa Windows Service, profil źródła danych ODBC musi być bezwzględnie zdefiniowany jako System DSN (a nie User DSN) w systemowym administratorze narzędzi ODBC Data Source Administrator. Profil zdefiniowany na poziomie użytkownika (User DSN) nie będzie widoczny dla procesu sPrint API.
- Architektura bitowa sterowników (64-bit vs 32-bit): sPrint API jest nowoczesną aplikacją 64-bitową. Oznacza to, że konfigurując profil systemowy DSN, należy użyć 64-bitowej wersji konfiguratora ODBC (standardowo zlokalizowanego w C:\Windows\System32\odbcad32.exe) oraz upewnić się, że zainstalowane w systemie sterowniki (np. Microsoft Excel Driver) są również w wersji 64-bitowej.
- Wstrzykiwanie parametrów (ParametersScope): Pomimo specyfiki warstwy ODBC, wstrzykiwanie zmiennych biznesowych odbywa się w sposób identyczny jak w przypadku natywnych baz SQL – silnik sPrint przed wywołaniem interfejsu ODBC podmienia parametry zdefiniowane w tablicy Parameters na wartości produkcyjne (w tym przypadku filtrowanie rekordów dla grupy Furniture).