Przeszukaj Bazę wiedzy po słowach kluczowych
Jasper
Przygotowywanie raportów Jasper
Do utworzenia raportu należy użyć TIBCO Jaspersoft Studio w wersji 6.10. Mirror: TIB_js-studiocomm_6.10.0_windows_x86_64.exe
Tworzenie adaptera danych JSON
Jako źródło danych raport otrzymuje plik JSON wygenerowany w WMS, przykładowy plik wraz z raportem znajduje się w katalogu workera WMS: WorkflowWorkerAlpolWMSERPXL\Docs\JasperTemplates
Utwórz nowy projekt w Jaspersoft Studio
File → New → Project… → Jaspersoft Studio → JasperReports Project → Podaj nazwę projektu → Next
Następnie należy dodać źródło danych, w tym celu przejdź do zakładki Repository Explorer (1)
Jeśli zakładka nie jest widoczna można ją włączyć za pomocą
Window → Show View → Other… -> JasperReports → Repository Explorer → Open
Widoczne będą wszystkie aktualnie dostępne adaptery, w celu utworzenia nowego adaptera dla nowego pliku JSON należy prawym klawiszem myszy kliknąć w Data Adapters (2) i wybrać opcję Create Data Adapter
Wybierz typ JSON File i zatwierdź przyciskiem Next
Uzupełnij nadaj dowolną nazwę dla nowego adaptera (1) oraz wskaż ścieżkę do pliku JSON klikając przycisk File (2) upewnij się, że opcja Create data source using this expression jest zaznaczona, i zatwierdź przyciskiem Finish (3)
Przygotowywanie raportu Jasper
Utwórz nowy raport Jasper
File → New → Jasper Report → Blank A4 →
Wybierz z listy uprzednio utworzony projekt (1), nadaj nazwę raportowi (2) i przejdź do następnego kroku (3)
Wybierz z listy Data Adapter uprzednio utworzony adapter dla pliku JSON (1), po wybraniu źródła zostaną wyświetlone dostępne pola, wybierz klikając dwukrotnie pozycję objectData (2) i przejdź do następnego kroku (3)
Przenieś wymagane pola z kolumny Dataset Fields do Fields za pomocą oznaczonych przycisków, w następnym kroku możliwe jest wybranie pól do grupowania, jednak nie jest to wymagane, zatwierdź nowy raport za pomocą przycisku Finish
Dostosowywanie źródła danych
W celu poprawnego zaczytania raportu przez WMS musi on posiadać poprawnie skonfigurowane pola danych.
Dwuklikiem otwórz raport z listy
Na dole aplikacji przejdź do widoku projektowania
Otwórz okno dialogowe DataSet and Query editor dialog
Wyczyść pola w tabeli Fields (1) zaznaczając je i klikając przycisk Delete lub klawisz Del
Dwuklikiem wybierz wymagane pole z list (2), w oknie zostanie wypisana pełna ścieżka do wartości np. objectData.Name
Kliknij prawym klawiszem myszy na wcześniej zaznaczony element listy (2) i wybierz opcję Add node as field
Zauważ, że w tabeli pojawiło się nowe pole wraz z podaną ścieżką w Field expression, w przypadku zmiennej posiadającej zbiór danych, do elementów można odnosić się poprzez indeks np: objectData.BinaryData[0].FileContentUrl
- Field Name – która będzie używana w każdym oknie dialogowym w Jaspersoft Studio
- Class Type – typ klasy z języka Java. Najczęściej używana i ustawiania domyślnie wartość to java.lang.String, zaleca się jej używanie do wszystkich pól które chcemy „wydrukować do pdf” niezależnie czy dane pole będzie reprezentować liczbę całkowitą, czy zmienna przeciekową. Inne typy klas używane są do konkretnych kontrolek, czy ekspresji
- Field Expression – dokładna ścieżka do której dane pole (z poziomu Jaspersoft Studio) odwołuje się do pola w json
Powtórz czynność dla wszystkich wymaganych przez raport pól
Uzupełnianie raportu
Wszystkie dodane pola znajdują się, w zakładce Outline → Fields
Jeśli zakładka nie jest widoczna można ją włączyć za pomocą
Window → Show View → Other… -> General → Outline → Open
Wybrane pola można przeciągać na raport, co automatycznie utworzy powiązanie z odpowiednim polem w pliku JSON
Pola można też tworzyć ręcznie za pomocą zakładki Palette z prawej strony okna programu, należy wtedy ręcznie przypisać pole do wartości, umożliwia to jednocześnie lepsze dostosowanie wartości pól
Dla przykładu pole TextField:
Przejdź do konfiguracji Text Field (1) w zakładce Properties, otwórz edytor ekspresji (2) i skonfiguruj swoje zapytanie, np:
$F{Name} + "(" + $F{Code} + ")"
spowoduje wypełnienie pola następującym tekstem dla przykładowego pliku JSON: Grabie ogrodnicze (GRABIE_OGR)
Utworzona ekspresja widoczna jest w polu tekstowym (3)
Zdjęcia
- Jeżeli zdjęcie jest w postaci URL to wystarczy dodać ekspresję kontrolki do pola
$F{objectData.BinaryData.FileContentURL}
, typjava.lang.String
- Jeżeli zdjęcie jest w base64 to musimy polączyć kod java z ekspresją do pola
new java.io.ByteArrayInputStream(java.util.Base64.getDecoder().decode($F{organizationImageBase64}))
,typjava.lang.String
Tablica obiektów
Aby wyświetlić tablicę obiektów w postaci tabeli należy dla przykładowego pliku json:
{ "objectData": { "DocumentNumber": "WZ/1243/07/2023", . . . }, "FooterContent": "(Status 7)", "Items": [ { "Lp": 1, "Code": "WIDLY", "Name": "Widły uniwersalne", "Ean": "978020137962", "Quantity": 1, "QuantityRealized": 1, "UnitCode": "szt" }, { "Lp": 2, "Code": "GRABIE", "Name": "Grabie ogrodowe", "Ean": "978020137962", "Quantity": 2, "QuantityRealized": 1, "UnitCode": "szt" } ] } }
Dodać do raportu element „Table”:
W kreatorze wybieramy kolejno: „Create a Table using new dataset”:
Wybieramy „Create new dataset…” i wpisujemy jego nazwę:
Zaznaczamy jeden z elemntów tablicy którą chcemy wyświetlić:
Wybieramy pola, któe będą używane w wierszach tabeli:
Wybieramy „Use JRDatasource expression” i wpisujemy wyrażenie (podmieniając ścieżkę do naszej tablicy):
((net.sf.jasperreports.engine.data.JsonDataSource)$P{REPORT_DATA_SOURCE}).subDataSource(„objectData.Items„)
Wybieramy kolumny, które będą wyświetlać się w tabeli:
Ustawiamy ewentualne formatowanie tabeli i wygląd:
Tabela jest gotowa. Klikając na tabelę możemy edytowąć jej układ, ukryć nagłowki, ustawić szerokość kolumn itp.
Sub-Report
Dodajemy nowy Subreport do raportu
Tworzymy nowy raport lub wybieramy istniejący
Wybieramy źródło danych, powinno być takie samo jak źródło danych raportu głównego
Zamykamy kreator, a następnie przechodzimy do edycji zbioru danych w nowo utworzonym raporcie
Dodaj wymagane pola do raportu, pamiętaj aby zmienić Field expression tak aby wskazywały bezpośrednio na nazwę pola
Jeśli subreport wymaga podania pól, które nie są zawarte w zbiorze danych (w przykładzie powyżej, w zbiorze Items) należy przejść do zakładki Source i na górze kodu nazwać wymagane parametry
Do pól dodatkowych odnosimy się poprzez $P{NAZWA_POLA}
Gdy subreport jest gotowy, należy go zapisać, a jego plik jrxml przekonwertować do Base64
Następnie należy skonfigurować raport główny:
W raporcie głównym przejdź do kontrolki Subreportu → Properties → Subreport
W polu Expression należy podać ciąg znaków Base64 zgodnie z przykładem:
- net.sf.jasperreports.engine.JasperCompileManager.compileReport(new java.io.ByteArrayInputStream(java.util.Base64.getDecoder().decode(„BASE64„)))
Podmień BASE64 na swój ciąg znaków.
W tym samym oknie należy skonfigorwać źródło danych dla subreportu. Aby wybrać zbiór danych, należy w Data Source Expression podać ścieżkę do zbioru danych, w naszym przypadku zbiór Items – jako zbiór danych ustawiamy objectData.Items
- ((net.sf.jasperreports.engine.data.JsonDataSource)$P{REPORT_DATA_SOURCE}).subDataSource(„objectData.Items„)
Następnie przejdź do zakładki Advanced → Subreport Properties → Edit Parameters
Dodaj wcześniej skonfigurowane w subraporcie pola
- Name – odpowiada nazwie pola w subraporcie
- Expression – odpowiada wartości jaką chcemy wysłać do subreportu
Polskie znaki w raporcie
Aby polskie znaki były widoczne na wydruku, należy na każdym polu, który będzie posiadał polskie znaki ustawić odpowiednie kodowanie.
W tym celu zaznacz element → Properties → Advanced → PDF → PDF Encoding
Zmień wartość pola na CP1250 (Central European)
Zapis raportu gotowego dla WMS
WMS wymaga raportu w postaci pliku *.jasper, Jaspersoft Studio pracuje z plikiem *.jrxml i należy go skompilować
w tym celu należy kliknąć przycisk Compile Report w prawym górnym rogu okna widoku projektowania
W katalogu z projektem zostanie utworzony plik *.jasper, który należy wczytać do WMS
Obsługa Jasper w WMS
Wydruki generowane są za pomocą zapytań FaaS i wymagają do poprawnego działania skonfigurowanego adresu URL oraz tokenu na AlpolWF.Configuration wpisy:
- FaasAuthToken
- FaasMainUrl
WMS rozpoznaje czy używać wydruków CrystalReport czy Jasper po nazwie wydruku, jeśli nazwa zawiera w sobie słowo jasper zostanie on użyty do wydruku