Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Salut à tous !
Je suis un p'tit nouveau dans le système et je susi actuellement en stage. Le but de celui-ci est de pouvoir à partir d'états Infomaker (donc .pbl) faire soit une vue web ou autre qui rafraichirait automatiquement les données de l'état (par exemple le suivi des livraisons)...
Le problème c'est que je cherche depuis un petit moment et que tout ce que je vois c'est qu'on doit faire un retrieve manuel dans InfoMaker ou dans l'application qu'on peut créer pour la mise à jour... Donc je me demandais s'il y avait possibilité d'automatiser ces retrieve, d'une façon ou d'une autre.
Si on ne peut pas, je serais obligé d'attaquer direct la base et donc faire une copie des états en web...
Je sais pas si j'ai été assez clair mais j'en découvre un peu plus chaque heure donc je pourrai peut-être vous donner plus de précisions.
D'avance merci pour vos réponses,
PiR.R
Dernière modification par piR.R (05-04-2012 08:44:44)
Hors ligne
Bonjour et ,
Tu peux déclarer un timer de x secondes dans lequel tu refais un retrieve de ton état.
Hors ligne
Merci !
Donc je peux ça en powerbuilder si je comprend bien ?
Hors ligne
Je pose sûrement des questions bêtes mais comme je ne connais pas du tout powerbuilder et que l'entreprise où je suis se contente de faire des états avec infomaker je pars de zéro...
PowerBuilder gère donc le format pbl et les états crées par infomaker si je comprend bien ?
Hors ligne
Bonjour,
Pour faire rapide "entre-guillemet", infomaker est une version très "light" de Powerbuilder ne permettant de travailler que sur les datawindows. Powerbuilder est l'environnement de développement complet (PBL = PowerBuilder Library).
Hors ligne
C'est ce que j'ai cru comprendre, oui.
Est-ce que quelqu'un connaît un peu InfoMaker ?
Ce que je cherche en faite c'est que le retrieve de ma DataWindow se fasse automatiquement tous les x secondes par exemple. J'ai trouvé une option "Timer interval" dans les propriétés d'un DataWindow, est-ce que cette propriété permet le rafraichissement ?
Hors ligne
Bonjour,
La réponse est non, dans l'aide en ligne :
When a computed field uses Now as its expression value, it refreshes the displayed value every time the timer interval period elapses.
Je ne vois pas d'autres solutions à ton problème que de passer par une application Powerbuilder avec un "timer".
Hors ligne
non elle ne permet pas de provoquer un refresh automatique des données, c'est pour forcer la datawindow à mettre a jour les expressions calculés, par exemple, un compute qui affiche l'heure.
Hors ligne
Effectivement, je viens de tester la chose, à part rafraîchir la fenêtre et emballer les ventilos ça fait pas grand chose...
D'accord, je vais regarder ça. Par contre je suppose qu'une licence PowerBuilder ne coûte pas la même chose qu'une InfoMaker...
Hors ligne
Autre question, je pourrai bien récupérer les états pbl d'infomaker dans powerbuilder ?
(Parce qu'en fait, la personne voudrait pouvoir refaire des états par la suite et qu'ils soient eux aussi facilement "rafraichissable")
Hors ligne
Je reviens à la charge mais j'ai beaucoup de mal avec PowerBuilder. Je l'ai installé hier et j'essaie de me familiariser avec cet outil ce qui n'est pas simple...
Vous m'avez dit d'inclure un timer où je ferais mon retrieve, le problème c'est qu'après avoir lu plusieurs tutoriels, je n'y comprend pas grand chose...
Où je pourrais mettre ce timer sachant que les fenêtres que j'ai sont simplement consultatives et il n'y a pas de boutons (donc pas de PowerScript, si ce n'est Default...) ?
PS: j'ai ce code dans mon Default.
forward global transaction sqlca global dynamicdescriptionarea sqlda global dynamicstagingarea sqlsa global error error global message message end forward global type default from application end type global default default on default.create appname = "default" message = create message sqlca = create transaction sqlda = create dynamicdescriptionarea sqlsa = create dynamicstagingarea error = create error end on on default.destroy destroy( sqlca ) destroy( sqlda ) destroy( sqlsa ) destroy( error ) destroy( message ) end on
Du coup je ne vois pas à quoi appliquer le Retrieve...
Dernière modification par piR.R (04-04-2012 08:10:45)
Hors ligne
piR.R a écrit:
Où je pourrais mettre ce timer sachant que les fenêtres que j'ai sont simplement consultatives et il n'y a pas de boutons (donc pas de PowerScript, si ce n'est Default...) ?
Le timer permet de déclencher périodiquement l'évènement Timer(), et pour le démarrer il suffit d'appeler la méthode Timer(période) (attention ce n'est pas la même chose ). À partir de ce moment, l'évènement se produira toute les périodes, jusqu'à la destruction de l'objet ou l'appel de la méthode Timer(0).
Pour l'appel, suivant le type d'objet on peut le mettre dans l'évènement Open() (pour une fenêtre ou une application) ou l'évènement Constructor() pour un userobject. (On peut aussi appeler le timer dans n'importe quel script mais c'était pour parler du cas où on n'a pas de bouton ou autre.)
Par exemple :
Timer(42)
fera que toutes les 42 secondes, l'évènement Timer() sera appelé.
Note : la période peut être un nombre décimal. Si on appelle Timer(0.5), l'appel se fait toutes les demi-secondes.
Hors ligne
piR.R a écrit:
PS: j'ai ce code dans mon Default.
[...]
Du coup je ne vois pas à quoi appliquer le Retrieve...
Ah oui, pour visualiser des données c'est un peu léger
Il faudrait au moins que l'application au démarrage ouvre (dans l'évènement open()) une fenêtre (à créer), dans laquelle il faut placer un contrôle datawindow dont le dataobject sera le nom du rapport infomaker à afficher. La fenêtre peut faire le retrieve de la dw dans son évènement open() ou dans le timer() si ça doit se rafraîchir périodiquement.
Hors ligne
D'accord merci pour toutes ces précisions j'y vois un peu plus clair !
Pas facile de débuter en PowerBuilder
Merci beaucoup en tout cas je te tiens au courant de l'avancement du boulot !
Hors ligne
Bon visiblement ça marche ! Merci beaucoup je commence à comprendre le système de PowerBuilder après avoir ramé deux jours !
Dernière petite question, il me demande la source de données (j'utilise odbc) à chaque fois que je lance l'appli... Comment faire pour pouvoir automatiser ça ?
Hors ligne
Bonjour,
Le plus simple, pour travailler avec powerbuilder, tu as certainement créé un dbprofile odbc dans powerbuilder. Tu édites les propriétés de ton profil de base de données et tu vas dans l'onglet preview et tu appuis sur le bouton "copy". Ensuite, tu colles le code dans programme Powerbuilder juste avant l'instruction CONNECT USING SQLCA (mettre le bon mot de passe dans PWD);
Note : je suppose que tu as utilisé l'objet transaction par défaut SQLCA
ex :
// Profile SQLCA.DBMS = "ODBC" SQLCA.AutoCommit = False SQLCA.DBParm = "ConnectString='DSN=MYDATABASE;UID=dba;PWD=password'" CONNECT USING SQLCA;
Hors ligne
Oui j'ai déjà fait ça au niveau du login mdp et base c'est ok, mais il me demande la "source de données", un fichier .dsn
Hors ligne
Bonjour,
Normalement, tu as dû créer un profil ODBC pour te connecter à la base de données dans le gestionnaire de source ODBC du système, donc DSN="nom de la source de données ODBC".
Hors ligne
Oui j'ai bien crée un profil et tout est ok mais quand je lance mon appli, il me demande ma source de données, ce que je lui donne et tout fonctionne il n'y a pas de soucis à ce niveau là.
Le problème c'est comment faire pour qu'il aille chercher sa source de données tout seul et ne pas avoir à l'indiquer lors du lancement de l'appli.
Hors ligne
Bonjour,
Normalement, c'est le but de cette déclaration dans ton code :
// Profile SQLCA.DBMS = "ODBC" SQLCA.AutoCommit = False SQLCA.DBParm = "ConnectString='DSN=MYDATABASE;UID=dba;PWD=password'" CONNECT USING SQLCA;
Tu es sur quelle système ? Attention de bien créer une source de données avec ODBC 32 bits sur les systèmes 64 bits.
Hors ligne
Sous 7 64bits mais j'ai bien crée un profil en 32.
J'ai ça dans mon code :
SQLCA.DBMS="ODBC" SQLCA.DBPARM="Connecstring='DSN=obidemo ;UID=***** ;PWD=*****'" Connect using SQLCA; dw_1.SetTransObject(SQLCA)
Edit:
Ma bdd s'appelle obidemo, mon serveur obilogdemo11, ma source de données obidemo dans l'admin ODBC
Edit2:
Je me suis aperçu en postant de mon erreur (bête, mais pas taper !) "ConnecString" ça aide pas... Tout est ok, excuse moi pour le dérangement...
En tout cas merci beaucoup, la réactivité est vraiment bonne sur ce forum ça donne envie de continuer !
Dernière modification par piR.R (05-04-2012 08:27:28)
Hors ligne
piR.R a écrit:
J'ai ça dans mon code : [...] SQLCA.DBPARM="Connecstring='DSN=obilogdemo11 ;UID=***** ;PWD=*****'"
Pas trop le temps de creuser à l'instant, mais une idée comme ça : tu as essayé en virant les espaces après le dsn, login et password ?
Hors ligne
J'ai edité en même temps que tu postais, merci encore ;-)
Hors ligne
piR.R a écrit:
J'ai edité en même temps que tu postais, merci encore ;-)
Ah, oui j'avais pas vu le "ConnecString"... Faut dire qu'à cette heure (et après une partie de la nuit à jouer sur une lib PB ) j'ai encore du mal à garder les 2 yeux ouverts en même temps
piR.R a écrit:
En tout cas merci beaucoup, la réactivité est vraiment bonne sur ce forum ça donne envie de continuer !
Bah, faut dire que des dev PB francophones il n'y en a pas tant que ça sur le web. Bon d'après le forum, il y a quelques nids où il y a beaucoup de dev PB (quelques administrations et grands organismes) mais ici c'est toujours les mêmes qu'on voit (heureusement la rareté est compensée par la qualité ).
PS: au fait si ta question de départ est résolue, pense à l'indiquer dans le titre (il faut remonter sur la question initiale, modifier et ajouter [RESOLU], en majuscules et avec les crochets).
Dernière modification par seki (05-04-2012 08:38:52)
Hors ligne
Tu me rassures on est dans le même cas (sauf que j'étais sur de la cryptographie )
Oui c'est vrai que j'ai eu un peu de mal au départ à trouver des sources de bonne qualité mais on y arrive ! Et pis ça a beau être toujours les mêmes du moment que c'est du bon boulot !
Pas de soucis !
Hors ligne