Übergeben von Inhalt beim Generieren des JasperServer-Berichts mithilfe der REST-API

8

Ich arbeite an einem Projekt, das unseren aktuellen PDF-Generator durch JasperReports Server ersetzen soll. Es ist geplant, die REST / HTTP-API zu verwenden, um eine hohe Abstraktionsebene zwischen den Systemen zu erreichen.

Im Optimalfall möchten wir nicht, dass JasperReports Server die Daten aus der Datenbank bezieht, da dies die vorhandene Protokollierung und Autorisierung in der Architektur der aufrufenden Anwendung umgehen würde. Stattdessen möchten wir mit dem Extrahieren des Inhalts in der aufrufenden Anwendung beginnen und diesen Inhalt dann an JasperReports Server übergeben.

Wir haben einige Nachforschungen angestellt, und der Mangel an relevanten Ergebnissen zeigt, dass Sie normalerweise nicht JasperReports Server verwenden. Die Eingabeparameter in den Lernprogrammen, die wir gefunden haben, sind typischerweise skalare Werte (Ganzzahlen, Boolesche Zeichenfolgen oder Zeichenfolgen) und keine komplexen Strukturen oder Objekte. Darüber hinaus scheint es so, als ob jedes Sample annimmt, dass JasperReports Server eine Verbindung zu einer Datenbank herstellen soll.

Wenn es möglich ist, komplexe Strukturen (wie ein Array von Karten, bei denen einige Kartenelemente selbst Arrays oder Karten sind) zu übergeben, was ist die beste Vorgehensweise dafür? Ich habe keine Ahnung, wie eine solche Struktur im Anfragetext formatiert werden soll. Passt die SOAP API besser?

Wenn Sie keine JasperReports Server-Lösung entwerfen sollten, welche alternativen Produkte / Lösungen sind besser geeignet?

Vielen Dank im Voraus für eine Eingabe.

    
MaxH 09.01.2012, 22:17
quelle

2 Antworten

7

Nach mehreren Stunden Forschung, denke ich, bin ich bereit, meine eigene Frage zu beantworten.

JasperReports Server (nachfolgend "JRS" genannt) ist im Wesentlichen so konzipiert, dass er Daten selbst abruft. Obwohl es möglich wäre, Feed-JRS mit Daten zu erzwingen, habe ich mich entschieden, dies nicht zu tun.

Einer der offensichtlichsten Nachteile davon, dass JRS die Daten nicht selbst abrufen darf, ist, dass es nicht mehr möglich ist, Berichte über die JRS-Webschnittstelle zu generieren. Die Integration von anderen Systemen wird ebenfalls unmöglich oder schwierig, wenn die Client-Anwendung für die Bereitstellung der Daten in einem vordefinierten Format verantwortlich ist.

In dem Projekt, an dem ich gerade arbeite, haben wir uns entschieden, eine benutzerdefinierte JRS-DataSource basierend auf der Remote-XML-DataSource zu erstellen, die die XML-API der Client-Anwendung aufruft. Mit anderen Worten fordert die Clientanwendung einen Bericht von JRS an, und JRS fordert dann seine Daten von der Clientanwendung an. Die XML-API muss erweitert werden, um alle unsere Berichtsanforderungen zu erfüllen, aber das ist meiner Meinung nach eine gute Sache. Eine gute API-Abdeckung wird in Zukunft nützlich sein.

Ich hoffe, diese Gedanken helfen jemandem, ähnliche Fragen zu haben.

    
MaxH 16.01.2012, 21:36
quelle
0

Wie Sie geschrieben haben, ist das Abrufen von Daten natürlicher für JRS. Allerdings musste ich den umgekehrten Weg gehen - ich POST Daten zu berichten, sitzen in JRS-Repo über einen REST-Aufruf.

Ich übergebe XML-Daten in meinem Parameter "xmlDocument" und mit einem "Trick" kann ein ausgeführter Bericht dieses XML für weitere X-Pfad-Abfragen verwenden.

xmlDocument ist nur ein einfacher String:

%Vor%

In der Entwurfsphase erstelle ich einen XML-Datenadapter mit einer XML-Datei, die ich für die Vorschau verwende. Beachten Sie, dass nach dem Auswählen des XML-Adapters ein neuer Parameter XML_INPUT_STREAM angezeigt wurde.

Dann veröffentliche ich den Bericht bei JRS. Wenn der Bericht während der Berichtsausführung nicht mit einer Datenquelle verknüpft ist, liest er stattdessen den Parameter XML_INPUT_STREAM (als Fallback-Datenquelle), der wie folgt aussieht:

%Vor%

Ich verpacke die Zeichenfolge "xmlDocument" in InputStream.

    
PeterS 12.10.2017 08:36
quelle