Specyfikacja obiektów report i output (Formaty wejściowe oraz wyjściowe)

Opis mechanizmu

W sPrint API właściwości wejściowe pakietów szablonów (przekazywane w obiekcie report) oraz parametry zapisu dokumentów wynikowych (konfigurowane w obiekcie output) opierają się na strukturach polimorficznych. O tym, jaki zestaw pól zostanie poddany walidacji przez silnik renderujący, decyduje wartość nadrzędna przekazana w polu dataFormat.

Te uniwersalne komponenty wchodzą w skład struktur żądań dla kluczowych operacji API, takich jak sprawdzenie reportIds szablonu i jego podszablonów, synchroniczne generowanie raportów (szczegóły znajdziesz w dokumentacji POST /api/v0/Print czy asynchroniczne kolejkowanie zadań (POST /api/v0/PrintQueue/enqueue). Elastyczność polimorfizmu pozwala integratorom na swobodne mieszanie podejść – można przykładowo załadować plik szablonu z chmury S3, ale wymusić zwrot gotowego pliku PDF bezpośrednio w strumieniu odpowiedzi HTTP (Bytes).

 


Struktura obiektu „report” (Szablon wejściowy)

Właściwość report definiuje wejściowy plik projektu sPrint (.sp) i bazuje na modelu kontraktu FormattedSourceBaseViewModel. W zależności od zadeklarowanego trybu dostarczania danych, obiekt przyjmuje jedną z trzech poniższych struktur:

1. Wariant: Path (Wczytanie z dysku)

Używany w infrastrukturach on-premise lub sieciach lokalnych, gdzie serwer sPrint API posiada bezpośrednie uprawnienia dostępu do lokalnego bądź sieciowego systemu plików, na którym zdeponowane są pliki .sp.

"report": {
  "dataFormat": "Path",
  "path": "C:\\Ścieżka\\Do\\Pliku\\Raportu.sp"
}
  • dataFormat (string): Wartość stała "Path" wymuszająca walidację fizycznej lokalizacji pliku.
  • path (string): Pełna ścieżka bezwzględna wskazująca na strukturę pliku na dysku.

2. Wariant: Bytes (Bezpośredni przesył w formacie binarnym)

Dedykowany dla architektur rozproszonych i środowisk mikroserwisowych. Pozwala na przesłanie kompletnego pliku szablonu bezpośrednio w strukturze komunikatu JSON bez konieczności wcześniejszego zapisywania go na dysku.

"report": {
  "dataFormat": "Bytes",
  "source": "SGVsbG8gd29ybGQhSW50ZWdyYWNqYSBTY3JpbnQgQVBJIHYw..."
}
  • dataFormat (string): Wartość stała "Bytes" wymuszająca dekodowanie strumienia wejściowego.
  • source (string): Zawartość pliku binardnego szablonu .sp, przekonwertowana w całości do ciągu tekstowego Base64.

3. Wariant: S3 (Repozytorium Chmurowe)

Wskazuje silnikowi sPrint, że ma samodzielnie nawiązać połączenie i pobrać plik szablonu bezpośrednio z magazynu obiektowego chmury Amazon S3.

"report": {
  "dataFormat": "S3",
  "url": "https://s3.eu-central-1.amazonaws.com/bucket-erp/templates/invoice.sp"
}
  • dataFormat (string): Wartość stała "S3" wymuszająca walidację adresu URI repozytorium.
  • url (string): Pełny, bezpośredni publiczny bądź zabezpieczony tokenem adres URL obiektu przechowywanego w usłudze S3.

 


Struktura obiektu „output” (Zapis dokumentu wynikowego)

Właściwość output definiuje zachowanie silnika sPrint po pomyślnym zakończeniu renderowania pliku i bazuje na modelu FormattedOutputBaseViewModel. Obiekt steruje fizyczną dystrybucją wygenerowanego dokumentu (PDF, Excel, Word):

1. Wariant: Bytes (Strumień zwrotny)

Zmusza serwer do przetworzenia dokumentu w pamięci i odesłania go bezpośrednio w ciele odpowiedzi żądania synchronicznego jako plik binarny. Nie wymaga żadnych dodatkowych pól konfiguracyjnych.

"output": {
  "dataFormat": "Bytes"
}
  • dataFormat (string): Wartość stała "Bytes"
    API odsyła gotowy dokument w postaci binarnego strumienia bajtów. Zachowanie systemu zależy od wybranego endpointu żądania:

    • W przypadku synchronicznego /api/v0/Print: Silnik sPrint generuje dokument w pamięci RAM i zwraca go natychmiast, bezpośrednio w ciele tej samej odpowiedzi (Response Body) z kodem statusu 200 OK. Dane nie są nigdzie zapisywane po stronie serwera.
    • W przypadku asynchronicznego /api/v0/PrintQueue/enqueue: Procesor tła generuje plik i bezpiecznie buforuje jego bajty w magazynie kolejki (StoragePath). Po tym, jak zadanie osiągnie status „Succeeded”, plik należy jawnie pobrać osobnym żądaniem GET na endpoint /api/v0/PrintQueue/{operationId}/result.

2. Wariant: Path (Zapis na dysk serwera)

Wymusza na silniku sPrint zapisanie wyrenderowanego dokumentu bezpośrednio na udostępnioną przestrzeń dyskową serwera aplikacji.

"output": {
  "dataFormat": "Path",
  "path": "C:\\sPrint\\Outputs\\Faktura_Zaksięgowana.pdf"
}
  • dataFormat (string): Wartość stała "Path"Zwraca nagłówek HTTP 201 Created po udanej i trwałej alokacji pliku.
  • path (string): Docelowa, pełna ścieżka zapisu pliku na dysku serwera (musi być dostępna dla konta usługi serwera sPrint).

3. Wariant: S3 (Zapis bezpośrednio do magazynu chmurowego AWS)

Silnik sPrint po zakończeniu procesu renderowania automatycznie przesyła plik bezpośrednio do struktury Twojego zewnętrznego repozytorium S3 za pomocą mechanizmu przesyłania strumieniowego pliku.

"output": {
  "dataFormat": "S3",
  "url": "https://s3.eu-central-1.amazonaws.com/bucket-erp/archives/2026/doc.pdf"
}
  • dataFormat (string): Wartość stała "S3"Zwraca status HTTP 201 Created po poprawnym zakończeniu przesyłania obiektu.
  • url (string): Pełny adres URL umożliwiający silnikowi sPrint wgranie dokumentu chmurowego.

 


Realne Kompleksowe Przykłady (JSON Payload dla /api/v0/Print)

Poniższe kompletne struktury pokazują, jak w praktyce można łączyć polimorficzne właściwości obiektów report oraz output wewnątrz jednego zapytania biznesowego do sPrint API.

Przykład 1: report: Path -> output: Bytes

Scenariusz, w którym szablony są przechowywane w ustrukturyzowanym katalogu na dysku serwera aplikacji, a wygenerowany dokument wraca do aplikacji binarnie, ona go przetwarza i wyświetla go operatorowi na ekranie lub wysyła dalej w zależności od wdrożonej implementacji.

{
  "operationId": "print-action-001",
  "printFormat": "Pdf",
  "report": {
    "dataFormat": "Path",
    "path": "C:\\sPrint\\Templates\\FakturaSprzedazy.sp"
  },
  "output": {
    "dataFormat": "Bytes"
  }
}

Przykład 2: report: Bytes -> output: Bytes

Scenariusz w pełni bezdyskowy. Integrator pobiera szablon .sp z bazy danych systemu nadrzędnego, koduje go w Base64 i przesyła w żądaniu, oczekując zwrotnie gotowego strumienia dokumentu Excel bez dotykania systemu plików serwera.

{
  "operationId": "print-action-002",
  "printFormat": "Xlsx",
  "report": {
    "dataFormat": "Bytes",
    "source": "SGVsbG8gd29ybGQhSW50ZWdyYWNqYSBTY3JpbnQgQVBJIHYw"
  },
  "output": {
    "dataFormat": "Bytes"
  }
}

Przykład 3: report: S3 -> output: S3

Zarówno pobranie bazowego szablonu .sp, jak i ostateczny eksport gotowego dokumentu PDF realizowany jest automatycznie na poziomie chmurowych zasobów AWS S3.

{
  "operationId": "print-action-003",
  "printFormat": "Pdf",
  "report": {
    "dataFormat": "S3",
    "url": "https://s3.eu-central-1.amazonaws.com/szablony-erp/faktura.sp"
  },
  "output": {
    "dataFormat": "S3",
    "url": "https://s3.eu-central-1.amazonaws.com/wydruki-erp/2026/FV_10_2026.pdf"
  }
}

Przykład 4: report: S3 -> output: Path

Scenariusz dedykowany dla rozproszonych środowisk hybrydowych. Szablon raportu pobierany jest centralnie z repozytorium chmurowego, ale ostateczny wydruk PDF zostaje trwale zapisany na dysku serwera lokalnego w archiwum plikowym firmy.

{
  "operationId": "print-action-004",
  "printFormat": "Pdf",
  "report": {
    "dataFormat": "S3",
    "url": "https://s3.eu-central-1.amazonaws.com/szablony-erp/faktura.sp"
  },
  "output": {
    "dataFormat": "Path",
    "path": "C:\\sPrint\\Outputs\\WygenerowanaFaktura.pdf"
  }
}

Czy ten artykuł był pomocny?