10
votes

Transférer du contenu lors de la génération de rapports de Jasperserver à l'aide de l'API de repos

Je travaille sur un projet qui vise à remplacer notre générateur PDF actuel avec JasperReports Server. Le plan consiste à utiliser l'API REST / HTTP pour atteindre un niveau élevé d'abstraction entre les systèmes.

de manière optimale, nous ne voulons pas laisser le serveur JasperReports tirer les données de la base de données, car cela contournerait la journalisation et l'autorisation existantes dans l'architecture de l'application appelante. Au lieu de cela, nous aimerions commencer par extraire le contenu de l'application appelante, puis transmettre ce contenu à JasperReports Server.

Nous avons fait beaucoup d'enquête et le manque de résultats pertinents indique que ce n'est pas la manière dont vous utilisez généralement le serveur JASPORREPORTS. Les paramètres d'entrée dans les didacticiels que nous avons trouvés sont généralement des valeurs scalaires (entiers, booléens ou chaînes), et non des structures ou des objets complexes. En outre, cela semble être plus ou moins chaque échantillon suppose que vous souhaitez laisser le serveur JasperReports Connecter à une base de données.

S'il est possible de passer dans des structures complexes (comme un éventail de cartes, où certains éléments de carte sont des matrices ou des cartes elles-mêmes), quelle est la meilleure pratique pour le faire? Je n'ai aucune idée de la manière dont une telle structure doit être formatée dans le corps de la demande. L'API SOAP est-il un meilleur ajustement?

Si ce n'est pas du tout comment vous devez concevoir une solution de serveur JasperReports, quels produits / solutions alternatives sont plus appropriés?

Merci d'avance pour toute entrée.


2 commentaires

Vous pouvez utiliser le fichier obtenir pour obtenir le fichier de modèle d'obtention du rapport (JRXML). Après cela, vous pouvez passer au rapport tout ce que vous voulez (avec l'aide de l'API JasperReports). Par exemple, vous pouvez passer des haricots comme DataSource ou passez une carte comme paramètre.


Merci pour votre réponse Alex. Comme je viens d'écrire ci-dessous, j'ai décidé d'aller avec une autre approche. Quoi qu'il en soit, je ne suis pas sûr de voir le point de récupérer le JRXML à l'aide de l'API HTTP ...


3 Réponses :


8
votes

Après plusieurs heures passées à la recherche, je pense que je suis prêt à répondre à ma propre question.

Le serveur JasperReports ("JRS" ci-dessous) est conçu fondamentalement pour récupérer des données par lui-même. Bien qu'il soit possible de forcer l'alimentation JRS avec des données, j'ai décidé de ne pas.

L'un des inconvénients les plus évidents de ne pas laisser chercher JRS récupérer les données elles-mêmes est qu'elle ne serait plus possible de générer des rapports de l'interface Web JRS. L'intégration d'autres systèmes devient également impossible ou difficile si l'application client est responsable de la fourniture des données dans un format prédéfini.

Dans le projet sur lequel je travaille, nous avons décidé de construire une DataSource JRS personnalisée basée sur la télécommande XML DataSource, qui invoque l'API XML de l'application clientèle. En d'autres termes, l'application client demande un rapport de JRS, et JRS demande ensuite à ses données sur la demande du client. L'API XML devra être étendue pour couvrir tous nos besoins en matière de déclaration, mais c'est une bonne chose à mon avis. Une bonne couverture API sera utile à l'avenir.

J'espère que ces pensées m'aide à avoir des questions similaires.


1 commentaires

Bonne réponse. Ayant répondu à votre propre question que vous pouvez - mais vous n'avez pas besoin d'accepter votre réponse. Vous devriez accepter le vôtre.



1
votes

Comme vous l'avez écrit, la récupération de données est plus naturelle pour les JRS. Cependant, j'avais besoin d'aller à la manière opposée - je posterai des données pour signaler assis dans JRS Repo via un appel de repos.

Je passe des données XML dans mon paramètre "xmldocument" et, au moyen d'un "truc", un rapport exécuté, un rapport exécuté. Peut utiliser ce XML pour d'autres requêtes de path x.

xmldocument est juste une chaîne simple: xxx

à la phase de conception, je crée un adaptateur de données XML avec XML fichier que j'utilise pour la prévisualisation. Notez qu'un nouveau paramètre xml_input_stream est apparu après avoir choisi l'adaptateur XML.

Puis je publie le rapport à JRS. Au cours de l'exécution du rapport, lorsque le rapport n'est pas lié à une source de données, il lit le paramètre xml_input_stream (en tant que source de données de repli), qui semble comme suit: xxx

i wrap " xmldocument "chaîne à inupperam.


0 commentaires

0
votes

Même si je suis d'accord avec la réponse, Sorcière stipule que le Jasperserver a été construit pour aller chercher des données par lui-même, je devais toujours transmettre le creux de données l'API de repos, car c'est le mode héritage de ma société de construire des rapports Jasper et parce que Nous voulons utiliser des services Java personnalisés pour aller chercher des données.

J'ai trouvé que cela décrit ci-dessus était le moyen le plus simple possible de le faire. H2>

Avoir ce pojo personnalisé simple que vous voulez passer à la RAPPORT API WEB API: P>

    "reportUnitUri" : "/report/Custom_report",
"async":"false",
"outputFormat":"pdf",
"parameters" : {
    "reportParameter" : [
        {
            "name": "customReport",
            "value": ["{ \"content\" : \"test content\" } "]
        }
    ]
}


0 commentaires