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 :

Script data set : remplir avec intervalle de date


Sujet :

BIRT

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Avril 2005
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 238
    Points : 0
    Points
    0
    Par défaut Script data set : remplir avec intervalle de date
    Bonjour,

    Je souhaite mettre en place un scripted data set avec un intervalle de date. Les date de début et de fin proviennent de deux paramètres.
    Lorsque que j'exécute le préview du dataset, j'ai un message d'erreur du type "il manque ";" avant une instruction DATASET[DATEDS].bm_open"...
    Pouvez-vous m'aidez ? Merci
    BIRT version 2.2.2
    Dans le script du OPEN j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    var startDate = params["pStartDate"].value;
    var endDate = params["pEndDate"].value;
     
    importPackage(Packages.java.util);
    importPackage(Packages.java.text);
     
    Calendar dateRangeStart = Calendar.getInstance();
    dateRangeStart.setTime(startDate);
    Calendar dateRangeEnd = Calendar.getInstance();
    dateRangeEnd.setTime(endDate);
     
    dateRangeIntervalType = Calendar.DATE;
     
    dateRangeFormatter = new SimpleDateFormat("yyyy-MM-dd");
    Dans le script du fetch :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    var dateVal;
    if (dateRangeStart.compareTo(dateRangeEnd) <= 0) {
        dateVal = dateRangeFormatter.format(dateRangeStart.getTime());    
        dateRangeStart.add(dateRangeIntervalType, 1);
        //row["DateTimeRange"] = dateVal;
        row["DATEDS"] = dateVal;
        return true;
    } else {
        return false;
    }

  2. #2
    Nouveau Candidat au Club
    Inscrit en
    Avril 2005
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 238
    Points : 0
    Points
    0
    Par défaut
    Bonjour,

    Sinon y-a-t-il une autre solution pour remplir un dataset avec les dates comprises entre deux paramètres ?

    Merci

  3. #3
    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,

    Le scripted dataset est la bonne solution pour ce besoin. Peut être que tu compliques un peu trop le script, birt a des fonctions natives pour manipuler les dates. C'est même plutôt simple, cf. scripts ci dessous tirés de cet exemple:

    Script open:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    currentDay=params["startDate"].value;
    Script fetch:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if (BirtDateTime.diffDay(currentDay,params["endDate"].value)>=0){
        row["date"]=currentDay;
    	currentDay=BirtDateTime.addDay(currentDay,1);
      	return true;
    }else{
    	return false;
    }
    Maintenant la version que tu utilises est tellement ancienne, difficile de savoir quelles étaient les fonctions disponibles à l'époque Pas moyen d'upgrader birt?

  4. #4
    Nouveau Candidat au Club
    Inscrit en
    Avril 2005
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 238
    Points : 0
    Points
    0
    Par défaut
    Bonsoir,

    ça fonctionne à ravir avec ce script.

    Merci pour cette aide

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Avril 2005
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 238
    Points : 0
    Points
    0
    Par défaut problème de format date
    J'ai encore un problème avec les paramètres. Je récupère les paramètres de début et de fin en format string yyyymmdd.
    J'ai essayé avec le code ci-dessous mais j'ai des erreurs du type cannot read property value :
    OPEN :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    depart = params["restri_HOPHJOUDAT_1_>="].value
    fin = params["restri_HOPHJOUDAT_2_>="].value
    sdf = new java.text.SimpleDateFormat("yyyyMMdd"); 
    currentDay = sdf.parse(depart);
    df = new java.text.SimpleDateFormat("yyyyMMdd"); 
    endDate = df.parse(fin);
    FETCH :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if (BirtDateTime.diffDay(currentDay,endDate)>=0){
        row["DATEDS"]= currentDay;
    	currentDay=BirtDateTime.addDay(currentDay,1);
      	return true;
    }else{
    	return false;
    }
    Comment résoudre ce problème

  6. #6
    Nouveau Candidat au Club
    Inscrit en
    Avril 2005
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 238
    Points : 0
    Points
    0
    Par défaut
    Je suis parvenu à régler le problème comme ci-dessous :
    Dans le OPEN :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    sdf = new java.text.SimpleDateFormat("yyyyMMdd"); 
    d1= sdf.parse(params["restri_HOPHJOUDAT_1_>="]);
    d2= sdf.parse(params["restri_HOPHJOUDAT_2_<="]);
    currentDay = d1;
    endDate = d2;

  7. #7
    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
    Si ça fonctionne bien comme ça c'est le principal, mais apparemment tu as déclaré les 2 paramètres de rapport comme des chaines de caractère normales (String), alors qu'ici il vaut mieux les typer en "Date": il n'y aurait pas eu besoin de faire les "parse", entre autres nombreux avantages

  8. #8
    Nouveau Candidat au Club
    Inscrit en
    Avril 2005
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 238
    Points : 0
    Points
    0
    Par défaut
    Oui ça fonctionne et je ne peux pas faire autrement car mes paramètre de date sont format string sous la forme de yyyymmdd.

    Par contre dans le script du fetch est-il possible de produire un champ avec le numéro de la semaine ?

    merci

  9. #9
    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
    Il y a bien une fonction "week" qui retourne le numéro de semaine:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BirtDateTime.week(MyCurrentDateInScriptedDataset);

  10. #10
    Nouveau Candidat au Club
    Inscrit en
    Avril 2005
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 238
    Points : 0
    Points
    0
    Par défaut
    Bonjour,
    ça ne fonctionne pas :
    FETCH :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if (BirtDateTime.diffDay(currentDay,endDate)>=0){
        row["DATEDS"]= currentDay;
    	currentDay=BirtDateTime.addDay(currentDay,1);
    	BirtDateTime.week(MyCurrentDateInScriptedDataset);
      	return true;
    }else{
    	return false;
    }

  11. #11
    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
    Je pensais avoir donné un nom de variable explicite avec "MyCurrentDateInScriptedDataset" , j'aurais pu l'appeler "NomVariableDateAtransmettrePourObtenirNumeroSemaine".

    En préalable il faut bien entendu créer la colonne WEEK dans le dataset.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if (BirtDateTime.diffDay(currentDay,endDate)>=0){
        row["DATEDS"]= currentDay;
        row["WEEK"]=BirtDateTime.week(currentDay);
        currentDay=BirtDateTime.addDay(currentDay,1);
        return true;
    }else{
    	return false;
    }

  12. #12
    Nouveau Candidat au Club
    Inscrit en
    Avril 2005
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 238
    Points : 0
    Points
    0
    Par défaut
    Merci ça fonctionne parfaitement.
    Bonne soirée

Discussions similaires

  1. req sql avec intervalle de date
    Par ahmedmido dans le forum Langage SQL
    Réponses: 4
    Dernier message: 05/12/2008, 14h49
  2. écriture d'une requête avec intervalle de date
    Par urbanspike dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 08/10/2008, 15h49
  3. accéder à une classe JAVA via un Scripted Data Set
    Par elbrujo2323 dans le forum BIRT
    Réponses: 3
    Dernier message: 19/03/2008, 16h41
  4. Réponses: 3
    Dernier message: 01/08/2007, 14h15
  5. Réponses: 6
    Dernier message: 31/07/2007, 15h48

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