Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour,
je suis en train de faire un écran d'édition générique auquel on peut passer des paramètres.
Une des fonctionnalités est de passer une ou plusieurs datawindow (rapports)
disons que l'on a w_source qui contient mon rapport dw_source
Quand on clique sur le bouton imprimer de w_source cela ouvre un opensheetwithparm(w_impression,... dw_source ...)
Dans ma dw_impression j'ai un openUserObject(dw_impression,'datawindow')
Puis je fais un dw_impression = dw_source
Sauf que c'est un pointeur vers dw_source et non un clone de l'objet.
dw_source peut être n'importe quel type de datawindow (composite, contenir des nested reports, contenir des dropdowndatawindow)
Donc un simple dw_impression.dataObject = dw_source.dataObject et dw_impression.object.data = dw_source.object.data ne vont pas fonctionner correctement.
Il existe getFullstate et setFullState qui fonctionnent bien mais dès que le blob atteint une certaine taille (qui dépend de plusieurs facteur mais bien loin des 2GO théoriques) l'application plante.
Est-ce que quelqu'un aurait une autre méthode ou un algo tout prêt pour cloner une datawindow quel que soit sa structure.
Merci par avance
Hors ligne
Hello, via une copy du dataobject puis des sharedata, principal et dddw ?
Hors ligne
merci
je ferai plutôt des rowscopy pour avoir un snapshot au lieu du sharedata.
La question était surtout pour savoir si quelqu'un avait un truc par rapport aux "gros" blob qui font planter l'appli, ou une technique de derrière les fagots ou un algo tout prêt (je suis un peu overbooké depuis quelques années ça m'aurait fait gagner un poil de temps )
Hors ligne
Bonjour,
En ce qui me concerne, tous les reports sont stockés dans la base de données. Du coup, dans notre fenêtre universelle d'impression, on fait :
iw_Previsu.dw_Print.CREATE(ls_syntaxe)
La méthode CREATE est peu être une piste à explorer pour toi pour avoir une source conforme à la cible et copier les données.
Hors ligne
Pour ton plantage sur le getFullState/SetfullState je ne l'ai jamais expérimenté et nos applications l'utilisent, tu sais a partir de quelle taille du blob ça commence à planter ?.
Hors ligne
J'ai le même plantage sur les fileReadEx.
La limite des blob est variable mais se situe aux alentours de 90-100 Mo
Selon les cas c'était soit le GetFullState soit le SetFullState qui ne fonctionnait pas.
J'avais fait des tests il y a un moment
Si mes souvenirs sont bons cette limite bouge en fonction de la mémoire utilisée par l'appli, la mémoire totale des applications 32bits qui tournent sur la machine.
En passant ce patch http://www.ntcore.com/4gb_patch.php la limite est plus haute.
J'ai ce même genre de plantages si je fais du fileread dans une dll en vb.net appelée par mon appli PB en OLE (utilisation d'un byte array)
Toujours selon mes souvenirs j'avais parfois le len(blob) qui me retournait des valeurs négatives après le GetFullState.
A une époque je pouvais faire des fileReadEx sur des fichiers de plusieurs centaines de mega sans problème puis la même application s'est mise à planter sur les gros fichiers au fil de temps.
Hors ligne
Ca ressemble bien à des limitations de resources, est-ce que tu testes toujours la sortie de GetFullState ?
Est-ce qu'après avoir redémarré la machine tu as la même limitation ? (ca me fait penser à des leaks de commit memory, pas forcement lié à ton app)
Hors ligne