IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

BIRT Discussion :

Envoi de paramètres via un WS


Sujet :

BIRT

  1. #1
    Membre habitué Avatar de Juwan
    Femme Profil pro
    Data manager
    Inscrit en
    Avril 2011
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Data manager
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2011
    Messages : 172
    Points : 132
    Points
    132
    Par défaut Envoi de paramètres via un WS
    Bonjour à tous,

    j'ai un petit exercice à faire mais sur lequel je bute pas mal... j'ai parcouru pas mal de forums mais j'ai du mal à y voir clair et à proposer une solution.

    J'ai donc un web service (que je n'ai pas écrit et que j'ai bien du mal à comprendre) qui appel une synthèse "select.rptdesign".

    Voici le web service :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    import java.io.BufferedOutputStream;
    import java.io.ByteArrayOutputStream;
     
    import javax.ws.rs.Consumes;
    import javax.ws.rs.GET;
    import javax.ws.rs.Path;
    import javax.ws.rs.Produces;
    import javax.ws.rs.WebApplicationException;
    import javax.ws.rs.core.MediaType;
    import javax.ws.rs.core.Response;
     
    import org.eclipse.birt.report.engine.api.EXCELRenderOption;
    import org.eclipse.birt.report.engine.api.EngineException;
    import org.eclipse.birt.report.engine.api.IExcelRenderOption;
    import org.eclipse.birt.report.engine.api.IRenderOption;
    import org.eclipse.birt.report.engine.api.IReportEngine;
    import org.eclipse.birt.report.engine.api.IReportRunnable;
    import org.eclipse.birt.report.engine.api.IRunAndRenderTask;
    import org.eclipse.birt.report.engine.api.RenderOption;
    import org.joda.time.DateTime;
    import org.springframework.core.io.Resource;
    import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
    import org.springframework.stereotype.Service;
     
    import fr.eau.aerm.osmose.admin.birtsample.service.BirtEngineFactory;
    import fr.eau.aerm.osmose.core.webservice.OsmoseAbstractWebservice;
     
    @Path()
    @Service
    public class BirtWS extends OsmoseAbstractWebservice {
     
      @Path()
      @GET
      @Consumes({ MediaType.APPLICATION_JSON, MediaType.TEXT_PLAIN })
      @Produces("application/vnd.ms-excel")
      public Response test4() throws EngineException {
     
        final ByteArrayOutputStream output = new ByteArrayOutputStream();
        final BufferedOutputStream out = new BufferedOutputStream(output);
     
        try {
     
          // report engine
          final BirtEngineFactory bef = BirtEngineFactory.getInstance();
          final IReportEngine birtEngine = bef.getObject();
     
          // report
          IReportRunnable runnable = null;
     
          final Resource[] schemaLocation = new PathMatchingResourcePatternResolver()
              .getResources("classpath:/birtsample/select.rptdesign");
          if (schemaLocation != null && schemaLocation.length > 0) {
            runnable = birtEngine.openReportDesign(schemaLocation[0].getInputStream());
            final IRunAndRenderTask runAndRenderTask = birtEngine.createRunAndRenderTask(runnable);
     
            // options de rendu
            final IRenderOption options = new RenderOption();
     
            final EXCELRenderOption xlsOptions = new EXCELRenderOption(options);
            xlsOptions.setOutputFormat("xls");
            xlsOptions.setOption(IExcelRenderOption.OFFICE_VERSION, "office2003");
            xlsOptions.setOutputStream(out);
     
            runAndRenderTask.setRenderOption(xlsOptions);
            runAndRenderTask.run();
            runAndRenderTask.close();
          }
     
        } catch (final Exception e) {
          throw new WebApplicationException(e);
        }
        String name = "synthese_test_";
        final DateTime today = new DateTime();
        name = name + today.getYear() + today.getMonthOfYear() + today.getDayOfMonth() + today.getHourOfDay()
            + today.getMinuteOfHour() + today.getSecondOfMinute();
     
        return Response.ok(output.toByteArray(), "application/vnd.ms-excel")
            .header("content-disposition", "attachment; filename = " + name + ".xls").build();
      }
    }
    la requête qui accède à la base est en dur dans la synthèse. Et j’aimerai pouvoir y passer des paramètre pour la rendre dynamique via ce web service mais je n'ai aucune idée de comment cela marche...

    Pouvez vous me donner des indications ?

    Merci

  2. #2
    Membre éclairé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2009
    Messages
    529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2009
    Messages : 529
    Points : 836
    Points
    836
    Par défaut
    Salut,

    il faut envoyer les paramètres avec, dans ton exemple, l'objet "runAndRenderTask" avec la méthode "setParameterValue". Un exemple d'envoi de paramètre à un rapport par API ici. Il faut bien entendu aussi déclarer dans le rapport BIRT ce ou ces paramètres, et les utiliser avec des '?' dans la requête du rapport.

    Si tu souhaites que les utilisateurs du WS renseignent eux même ce paramètre dans leur requête (SOAP ou RESTful?), il faut connaitre la structure de la requête (l'objet "OsmoseAbstractWebservice " a sans doute déjà des methodes pour récupérer des paramètres) et l'exploiter dans ton code java avant d'utiliser l'API Birt "runAndRenderTask.setParameterValue(...)".

  3. #3
    Membre habitué Avatar de Juwan
    Femme Profil pro
    Data manager
    Inscrit en
    Avril 2011
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Data manager
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2011
    Messages : 172
    Points : 132
    Points
    132
    Par défaut
    Merci de ta réponse. Je vais creuser dans ce sens.

  4. #4
    Membre habitué Avatar de Juwan
    Femme Profil pro
    Data manager
    Inscrit en
    Avril 2011
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Data manager
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2011
    Messages : 172
    Points : 132
    Points
    132
    Par défaut
    Bonjour.

    J'ai creusé votre piste et j'utilise le code suivant pour passer mes paramètres :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    IReportRunnable runnable = birtEngine.openReportDesign(schemaLocation[0].getInputStream());
    final IRunAndRenderTask runAndRenderTask = birtEngine.createRunAndRenderTask(runnable);
     
    String param = "blabla_param";
    RunAndRenderTask.setParameterValue("Rparam", param);
    Cela marche très bien du côté de Birt où je recompose ma requête de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.queryText = "SELECT * FROM MY_TABLE WHERE MY_TABLE .CODE = '" + params["Rparam"] + "'  "
    Par contre je dois maintenant passer une ArrayList en paramètre et la décomposer dans Birt. La passer, ok mais la décomposer dans Birt ? Puis je faire ca dans le this.queryText ?

  5. #5
    Membre habitué Avatar de Juwan
    Femme Profil pro
    Data manager
    Inscrit en
    Avril 2011
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Data manager
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2011
    Messages : 172
    Points : 132
    Points
    132
    Par défaut
    A priori on ne peux pas passer d'arraylist mais seulement des tableaux. Or je passe un tableau de string mais dans le rapport Birt je n'arrive pas à préciser le type String[] pour un paramètre...

  6. #6
    Membre éclairé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2009
    Messages
    529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2009
    Messages : 529
    Points : 836
    Points
    836
    Par défaut
    Salut,

    l'équivalent du String[] dans un rapport est un paramètre de type String, avec la propriété "multi-value" activée. Il se manipule ensuite comme un tableau javascript classique, donc pour créer une clause SQL dynamique tu peux utiliser la fonction join. Pour un type String il faut ajouter des quotes, cela devrait faire l'affaire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "'"+params["myParamMulti"].join("','")+"'";

Discussions similaires

  1. envoi de fax via access
    Par dpie dans le forum Access
    Réponses: 2
    Dernier message: 09/10/2005, 19h41
  2. Pb passage de paramétres via l'url
    Par chpog dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 27/09/2005, 11h34
  3. Passage de paramètres via l'URL
    Par carolinebelle dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 02/08/2005, 17h16
  4. envoie de fichiers via les formulaires
    Par fabogranqi dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 10/10/2004, 22h34
  5. Pb d'envoi de requete via un TADOQuery à une BD access
    Par gsmurf dans le forum Bases de données
    Réponses: 4
    Dernier message: 15/06/2004, 14h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo