Question

Je construis un rapport qui doit inclure une colonne « estimation », qui est basée sur des données non disponibles dans l'ensemble de données.

Idéalement, je voudrais être en mesure de définir une interface Java

public int getEstimate(int foo_id, int bar_id, int quantity);

foo_id, bar_id et quantity sont disponibles dans la ligne que je veux l'estimation présentée.

Il y aura plusieurs stratégies pour produire l'estimation de sorte qu'il serait bon d'utiliser une interface pour permettre leur échange en cas de besoin.

En regardant les documents BIRT, je pense qu'il est possible que je devrais être en utilisant les mécanismes de gestionnaire d'événements, mais qui semble permettre seulement de définir une classe à utiliser et je un peu comme pour injecter un estimateur configuré.

Un exemple non-obfuscation peut être dire que j'ai un ensemble de données qui comprend une colonne d'adresse IP, et je voudrais être en mesure d'utiliser un service de GeoIP pour résoudre le pays à partir de l'adresse IP. Dans ce cas, j'aurais un public String getCountryName(String address) d'interface et les implémentations actuelles peuvent utiliser MaxMind, un cache local ou un autre système.

Comment dois-je prendre?

Ou .. serais-je mieux en écrivant une source de données scriptée qui peuvent intégrer les données calculées avant de le livrer à BIRT?

Ou .. une sorte de source de données scriptée qui est ensuite utilisé pour créer une jointure ensemble de données?

Était-ce utile?

La solution

Je pense une source de données scriptée fonctionnerait très bien, mais un gestionnaire d'événements Java serait plus simple. Vous pouvez la mettre en œuvre comme un simple POJO et obtenir l'accès à tout et tous les objets complexes et des outils qui vous permettront de calculer votre estimation. La solution peut plus simple de tout simplement l'ajout d'un champ calculé à l'ensemble de données.

Lors de la création du champ calculé, vous pouvez obtenir assez complexe en termes de logique de script que vous pouvez tirer parti pour produire la valeur résultante. La plus belle chose au sujet de cette route est que toutes les autres valeurs de la colonne de la ligne (que je suppose que vous devez calculer l'estimation) sont disponibles via l'éditeur d'expression. Vous pouvez tirer des objets complexes (POJO) pour aider dans vos calculs ici et en utilisant l'objet « packages » (à savoir var red = new Packages.redwood.HelloWorld())

Si vous voulez créer la classe gestionnaire d'événements, voici ce que je ferais. Je voudrais créer un objet texte et lier le onCreate même à votre POJO (en étendant le TextItemEventAdapter) et remplacer la méthode « onCreate ». Là, vous pouvez faire un travail que vous voulez et à la fin il suffit d'appeler « text.setText(theEstimateResult); » pour faire l'estimation elle-même visible. En ce qui concerne l'accès aux valeurs que de données pour faire vos calculs, vous pouvez obtenir à ceux du POJO aussi. Je suppose que l'estimation sera une partie d'une grande table de valeurs. Vous pouvez accéder à une valeur de ligne spécifique via le reportContext.

Ce sont les deux idées que je voudrais donner un essai en premier. La colonne calculée est la plus rapide à mettre en œuvre et les moins susceptibles de vous jeter une courbe au cours du déploiement. Faites-moi savoir de quelle manière vous choisissez et nous pouvons sortir plus de hachage si nécessaire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top