Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour à tous
J'aimerais me connecter à mon objet r_echeance qui est en fait un état conçu sous Infomaker 11.0 build 6525. J'aimerais aussi pouvoir par le code accéder à tous les champs, bref prendre un contrôle total des champ par le code. J'ai déjà conçu mon état.
Merci je compte beaucoup sur vous.
Hors ligne
Par exemple pour manipuler un DW, on fait w_fen.dw_1 et pour un objet du DW, on fait :
w_fen.dw_1.Object.nom_objet[ indice_ligne ]. J'aimerais le faire avec un report
Merci
Hors ligne
Bonjour, ton report est-il inclus dans un composite ?
Hors ligne
Bonjour erasorz,
Mon report n'est pas inclut dans une composite. J'ai choisit la source de données External et j'ai identifié chaque controle de mon report.
Merci
Hors ligne
Il est donc mis directement dans un dw control de fenêtre ? Le cas écheant w_fen.dw_1 devrait marcher...
Hors ligne
Bonjour erasorz,
Ce matin j'ai appliqué les instructions de vincent janssens et ca m'a donné des résultats positifs
Mon report est mis dans un dw_control.
Puis je lui associe mon report via un
dw_control.dataobject = 'r_echeance';
Puis un
dw_control.settransobject(sqlca);
Puis
w_control.retrieve(<tes retrieval arguments>);
Le dw_control affiche les données correctement. Est-il possible d'ouvrir mon report dans l'éditeur infomaker directement sans passer par l'objet dw_control? Sinon, Une fois que mon report s'affiche dans le dw_control, est-il possible de le mettre en page et de l'imprimer?
Merci
Hors ligne
en fait, je ne comprends pas vraiment le contexte
tu bosses avec IM tu veux éditer un report ?
tu veux faire un programme PB incluant un report créé sous IM ?
Hors ligne
Bonjour erasorz
Oui exactement je veux ouvrir mon état crée sous Infomaker 11.0 à partir de PB et l'exploiter dans l'éditeur de Infomaker.
Merci
Hors ligne
en mode développement ou exécutable ?
Hors ligne
en mode éxécutable biensûr
Hors ligne
Bonjour,
Est ce quelqu'un a déjà utilisé infomaker pour créer un état et l'a utilisé dans PB ? Si oui comment fait-il pour paramétrer son état et l'afficher dans PB et ensuite l'imprimer. Parce qu'à part le dw_control, est-il possible de visualiser son état dans PB lorsqu'on clique sur un bouton?
Merci de votre réponse
Hors ligne
IM n'est ni plus ni moins qu'une version light de PB avec uniquement le painter DWO...
Un état créé dans IM ou PB s'utilise de la même façon dans PB. (dw control)
Ou bien ?
Hors ligne
Bonjour,
C'est exactement ce que je fais dans mon PGI. Parcontre, je stocke les reports dans la base de données.
Afin de pouvoir les éditer avec infomaker, je les exporte dans une PBL temporaire afin de pouvoir les ouvrir avec infomaker.
Un petit extrait de mon code permettant d'ouvrir un report dans infomaker, je pense que tu comprendras aisément la signification de mes variables d'environnement (glog.sBase, gFileNames.Infomaker (chemin infomaker), gFileNames.PBL (chemin complet de la PBL), ls_nom (nom du report à ouvrir), la connexion est réalisée en ODBC) :
ls_Reg_Key = "HKEY_CURRENT_USER\Software\Sybase\PowerBuilder\11.0\DatabaseProfiles\PowerBuilder\" + glog.sBase // On crée l'arborescence nécessaire dans la base de registre // pour que infomaker s'ouvre sans la boite de connexion RegistrySet( ls_Reg_Key, "Autocommit", RegString!, 'FALSE') RegistrySet( ls_Reg_Key, "Database", RegString!, '') RegistrySet( ls_Reg_Key, "DatabasePassword", RegString!, '0000') RegistrySet( ls_Reg_Key, "DBMS", RegString!, 'ODBC') RegistrySet( ls_Reg_Key, "DBParm", RegString!, "ConnectString='DSN=" + glog.sBase + ";UID=dba;PWD=PWD=XXXXXXXXXXXX'") RegistrySet( ls_Reg_Key, "Lock", RegString!, '') RegistrySet( ls_Reg_Key, "LogId", RegString!, '') RegistrySet( ls_Reg_Key, "LogPassword", RegString!, '0000') RegistrySet( ls_Reg_Key, "NewLogic", RegString!, 'TRUE') RegistrySet( ls_Reg_Key, "Prompt", RegString!, 'FALSE') RegistrySet( ls_Reg_Key, "ServerName", RegString!, '') RegistrySet( ls_Reg_Key, "UserId", RegString!, '') ls_Reg_Key = "HKEY_CURRENT_USER\Software\Sybase\PowerBuilder\11.0\DatabaseProfiles\PowerBuilder" // Il ne faut pas oublier de changer ce paramètre car c'est // lui qui détermine avec quelle base ouvrir infomaker RegistrySet( ls_Reg_Key, "MRUProfile", glog.sBase ); ls_cmd = '"' + gFileNames.Infomaker + '" /p Report /l ' + gFileNames.PBL + " /O " + lower( TRIM ( ls_nom ) ) IF Run( ls_cmd, MAXIMIZED! ) = -1 THEN ls_ErrorMsg = MsgGetStr('INFOMAKER' , 'INFOMAKER_NOTFOUND' ) MessageBox( 'ERREUR', ls_ErrorMsg + '~r' + gFileNames.Infomaker ) Return END IF
Hors ligne
Bonjour,
J'étais en train de répondre lorsque tu as posé une autre question :
Est ce quelqu'un a déjà utilisé infomaker pour créer un état et l'a utilisé dans PB ? Si oui comment fait-il pour paramétrer son état et l'afficher dans PB et ensuite l'imprimer. Parce qu'à part le dw_control, est-il possible de visualiser son état dans PB lorsqu'on clique sur un bouton?
La réponse est oui, tu peux apercevoir une copie d'écran çi-dessous montrant un aperçu avant impression d'un report dans l'application PB :
(Pour le code, tu géres comme pour une datawindow normale dw_1.dataobject= 'xx', dw_1.SettransObject(..), dw_1.Retrieve(...),dw_1.Print(), ...)
Hors ligne
A quoi renvoie la variable d'environnement glog.sBase ?
Merci
Hors ligne
Bonjour buck,
J'utilise l'objet transaction sqlca pour me connecter à oracle 10g.
Voici les paramètres que j'utilise pour me connecter
// Profile ETMF
SQLCA.DBMS = "O10 Oracle10g (10.1.0)"
SQLCA.LogPass = <****>
SQLCA.ServerName = "ET_ANNE"
SQLCA.LogId = "ETMF"
SQLCA.AutoCommit = False
SQLCA.DBParm = ""
J'ai crée les variables d'environnement dans windows comme suit:
gFileNames.Infomaker = C:\Program Files\Sybase\InfoMaker 11.0\im110
gFileNames.PBL = C:\Documents and Settings\HP_Propriétaire\Bureau\ETMF\etmf.pbl
glog.sBase = = O10 Oracle10g (10.1.0)
Et voici comment j'agence le code du bouton:
string ls_reg_key , ls_cmd , ls_nom , ls_ErrorMsg dw_5.dataobject = 'rpt_echeance' dw_5.settransobject(sqlca) //dw_5.retrieve() //dw_5.print(true,true) ls_Reg_Key = "HKEY_CURRENT_USER\Software\Sybase\PowerBuilder\11.0\DatabaseProfiles\PowerBuilder\" + glog.sBase // On crée l'arborescence nécessaire dans la base de registre // pour que infomaker s'ouvre sans la boite de connexion RegistrySet( ls_Reg_Key, "Autocommit", RegString!, 'FALSE' ) RegistrySet( ls_Reg_Key, "Database", RegString!, '' ) RegistrySet( ls_Reg_Key, "DatabasePassword", RegString!, 'MFET' ) RegistrySet( ls_Reg_Key, "DBMS", RegString!, 'O10 Oracle10g (10.1.0)' ) RegistrySet( ls_Reg_Key, "DBParm", RegString!, '' ) RegistrySet( ls_Reg_Key, "Lock", RegString!, '' ) RegistrySet( ls_Reg_Key, "LogId", RegString!, 'ETMF' ) RegistrySet( ls_Reg_Key, "LogPassword", RegString!, 'MFET' ) RegistrySet( ls_Reg_Key, "NewLogic", RegString!, 'TRUE' ) RegistrySet( ls_Reg_Key, "Prompt", RegString!, 'FALSE' ) RegistrySet( ls_Reg_Key, "ServerName", RegString!, 'ET_ANNE' ) RegistrySet( ls_Reg_Key, "UserId", RegString!, '') ls_Reg_Key = "HKEY_CURRENT_USER\Software\Sybase\PowerBuilder\11.0\DatabaseProfiles\PowerBuilder" // Il ne faut pas oublier de changer ce paramètre car c'est // lui qui détermine avec quelle base ouvrir infomaker RegistrySet( ls_Reg_Key, "ETMF", glog.sBase ) ls_nom = 'rpt_echeance' //nom du report à ouvrir ls_cmd = '"' + gFileNames.Infomaker + '" /p Report /l ' + gFileNames.PBL + " /O " + lower( TRIM ( ls_nom ) ) IF Run( ls_cmd, MAXIMIZED! ) = -1 THEN ls_ErrorMsg = MsgGetStr('INFOMAKER' , 'INFOMAKER_NOTFOUND' ) MessageBox( 'ERREUR', ls_ErrorMsg + '~r' + gFileNames.Infomaker ) Return END IF
Il m'affiche les erreurs suivantes:
Undefined variable: glog
Undefined variable: gfilenames
Unknown function name: msggetstr
Comment déclarer les variables d'environnement ?
Comment écrire la fonction msggetstr ?
Merci infiniment buck
Hors ligne
Bonjour,
Toutes les inscriptions dans la base de registre correspondent à l'équivalent de la création d'un "DB Profile" manuel dans infomaker.
L'exemple donnée est pour une base Adaptive Server Anywhere en connexion ODBC et non pour une connexion native oracle.
Tu crées ton db profile oracle dans infomaker et tu regardes dans la clé => HKEY_CURRENT_USER\Software\Sybase\PowerBuilder\11.0\DatabaseProfiles\PowerBuilder\" + Nom du profil
et tu adaptes le code en fonction de ce que tu vois sous cette clé.
gFileNames.Infomaker et gFileNames.PBL sont des nvos propres à mon application qui sont initialisées au chargement de l'application.
Pour test tu les remplaces par :
string ls_infomaker string ls_pbl
De même, MsgGetStr est une fonction propre à mon application pour les messages à partir de la base de données (internationalisation). Pour test, tu remplaces uniquement par un MessageBox :
MessageBox("Erreur", "Infomaker non trouvé")
Hors ligne
Bonsoir Buck et infiniment merci,
j'ai modifié tes variables en mettant des string et j'ai vérifié que les valeurs dans le registre sont ceux que j'utilise dans mon code et ca a marché. Mon état s'ouvre dans infomaker en mode développement(création) , mais j'aimerais qu'il apparaisse en mode éxécution afin qu'on ne puisse pas le modifier.
Merci
Hors ligne
Bonjour,
Je n'ai pas bien compris ta réponse. Tu veux ouvrir le report en mode compilé sans pouvoir appliquer de modification dessus ou tu veux un aperçu avant impression de la sortie du report (donc non-modifiable).
Parce que l'intérêt d'ouvrir le report avec infomaker est de permettre à l'utilisateur de créer, modifier et personnaliser ses propres reports.
Hors ligne
je veux un aperçu avant impression de la sortie du report (non modifiable) comme tu l'a fait avec l'extrait de compte ci-dessus. Puisque l'utilisateur ne doit pas pouvoir modifier la structure du report.
Merci
Hors ligne
Bonjour,
Tu codes comme exactement comme avec une datawindow. Tu poses un contrôle datawindow sur une fenêtre avec comme datobject ton report et tu fais un "Retrieve" (sans oublier le SetTransObject).
Hors ligne
Bonjour Buck,
Je précise ma question: en fait je veux que mon rapport s'ouvre dans infomaker mais je ne veux pas que les fenêtres <propriétés> et <design> s'ouvrent. je veux voir juste l'aperçu du rapport s'afficher dans infomaker(1 seule fenêtre). Est-il possible?
Merci
Hors ligne