Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Crystal Report - Persistance des données

3 réponses
Avatar
Richard Torre
Bonjour à tous,

je cherche un moyen de faire persister mon report sans avoir à le recharger
ou à utiliser les variables sessions (ce que je trouve vraiment très crade à
moins qu'on puisse leur dire de s'autoéliminer au bout d'un certain temps
(si vous avez des pistes là-dessus, ça m'interresse vraiment même si les
variables cache en sont pourvues).

J'avais pensé au viewstate mais il semblerait que les objets crystal ne
soient pas sérializables. Et que dire si mon rapport est lourd ma page le
sera deux fois plus ?

Je sais pas trop, un peu perdu avec ça. Je laisse mon code pour montrer au
niveau session ce que ça donne.

Code :

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Handles Me.Load
If Not IsPostBack Then
Dim ds As New dsListePersonnel

'je charge mon dataset avec une fonction
ds = RemplirDataset()
myrpt.SetDataSource(ds)

Session("myds") = myrpt

End If
Me.cr_reportviewer.ReportSource = Session("myds")
End Sub

Predalpha

3 réponses

Avatar
Delf
Le 01/04/2008, Richard Torre a supposé :

je cherche un moyen de faire persister mon report sans avoir à le recharger
ou à utiliser les variables sessions (ce que je trouve vraiment très crade à
moins qu'on puisse leur dire de s'autoéliminer au bout d'un certain temps (si
vous avez des pistes là-dessus, ça m'interresse vraiment même si les
variables cache en sont pourvues).



Ton rapport, c'est un objet en mémoire ou un document électronique au
final ?

J'avais pensé au viewstate mais il semblerait que les objets crystal ne
soient pas sérializables. Et que dire si mon rapport est lourd ma page le
sera deux fois plus ?



Je ne pense pas que le ViewState soit fait pour ceci ; par ailleurs, si
l'utilisateur change de page, l'état du ViewState sera perdu...

--
Delf
Avatar
Richard Torre
Salut Delf,

Je n'ai pas besoin de conserver le rapport en mémoire en dehors de la page
consultée.
Le crystalreportviewer peut me permettre de générer mon rapport en
.doc,.pdf,.xls,... de manière automatique sans une ligne de code.
Le problème est que lorsque je clique sur le bouton d'export prévu à cet
effet, cela déclenche un autopostback, et raffiche ma page mais mon rapport
a disparu (car on dirait que l'objet crystalreportviewer ne se sauvegarde
pas dans le viewstate).

Pour l'instant le moyen le moins crade mais que je trouve crade quand même,
c'est le passage en session de la variable contenant le rapport. Mais c'est
quand même dingue que rien n'ai été prévu pour gérer cela car si je vais
plus loin cela va être l'anarchie.

Exemple :

J'ai une liste qui affiche le personnel selon le département souhaité.
(informatique,comptabilité,ressources humaines,...)

L'utilisateur veut connaitre le personnel informatique --> ouverture popup
de la page --> selection du département --> affichage du rapport et
sauvegarde en session du rapport. Le rapport indique qu'il existe 2 pages de
personnel dans le département informatique.

Puis l'utilisateur veut connaitre le personnel comptabilité --> ouverture
popup de la page --> selection du département --> affichage du rapport et
sauvegarde en session du rapport. Le rapport indique qu'il existe 3 pages de
personnel en comptabilité.

L'utilisateur se retrouve ainsi avec trois fenetres explorateur, sa page
principale, et ses 2 popups contenant ses deux listes. Pour l'instant tout
va bien. Mais supposons que l'utilisateur veuille passer à la page 2 du
personnel informatique, cela lui affichera la page 2 de la compta ou
plantage --> étant donné que ma variable session a été écrasée lors de
l'affichage du personnel de comptabilité.


Résultat :

- Soit cela me convient
- Soit je crée une nouvelle variable session pour chaque rapport crée (mais
il faut alors que je trouve une solution pour libérer la mémoire de temps en
temps)

Qu'en penses-tu?
Au passage désolé pour la tartine.
Avatar
Delf
Richard Torre a couché sur son écran :

Je n'ai pas besoin de conserver le rapport en mémoire en dehors de la page
consultée.
Le crystalreportviewer peut me permettre de générer mon rapport en
.doc,.pdf,.xls,... de manière automatique sans une ligne de code.



Ok.

Exemple :

J'ai une liste qui affiche le personnel selon le département souhaité.
(informatique,comptabilité,ressources humaines,...)

L'utilisateur veut connaitre le personnel informatique --> ouverture popup de
la page --> selection du département --> affichage du rapport et sauvegarde
en session du rapport. Le rapport indique qu'il existe 2 pages de personnel
dans le département informatique.

Puis l'utilisateur veut connaitre le personnel comptabilité --> ouverture
popup de la page --> selection du département --> affichage du rapport et
sauvegarde en session du rapport. Le rapport indique qu'il existe 3 pages de
personnel en comptabilité.

L'utilisateur se retrouve ainsi avec trois fenetres explorateur, sa page
principale, et ses 2 popups contenant ses deux listes. Pour l'instant tout va
bien. Mais supposons que l'utilisateur veuille passer à la page 2 du
personnel informatique, cela lui affichera la page 2 de la compta ou plantage
--> étant donné que ma variable session a été écrasée lors de l'affichage du
personnel de comptabilité.


Résultat :

- Soit cela me convient
- Soit je crée une nouvelle variable session pour chaque rapport crée (mais
il faut alors que je trouve une solution pour libérer la mémoire de temps en
temps)

Qu'en penses-tu?



Au lieu d'utiliser une variable de Session, tu peux utiliser la
propriété Cache de l'objet Page en utilisant dans la partie de la clé
le SessionID de l'utilisateur pour ne pas écraser les objets en cache
entre utilisateurs.

Ensuite, rien ne t'empêche d'utiliser 2 clés distinctes pour chaque
report : ExportCompta_ICI_LE_SESSION_ID &
ExportPersInfo_ICI_LE_SESSION_ID

Ca peut devenir chiant à manipuler alors pourquoi ne pas créer un objet
qui permettrait de stocker les différents reports ? Ensuite cet objet
serait stocké dans le Cache.

Après, même si l'utilisateur ferme les pages, le Cache sera toujours
actif mais tu peux y mettre des timers d'expiration.

Au passage désolé pour la tartine.



=)
En espérant avoir proposer une piste...

--
Delf