Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
On crée les colonnes "à vide" , et les valeurs elles arrivent quand alors?
Je suis totalement perdu la, le ls_syntax quand il est fini je l'utilise comment ?
Je ne comprends pas comment on fait pour créer une colonne "Consultant_name" à laquelle est associée le projet du AM et le projet du PM pour un jour X
Je sais que je suis lourd, j'en suis désolé mais je suis complètement perdu dans les explications la.
Le SELECT je dois le créer comment et ou ?
Dernière modification par johnpelu (25-11-2008 15:00:54)
Hors ligne
johnpelu a écrit:
On crée les colonnes "à vide" , et les valeurs elles arrivent quand alors?
Ben dans la methode uof_retrievePlanning...
Cortex a écrit:
4/ Dans une methode genre uof_retrievePlanning, tu purrais:
- retriever dans une datastore, en utilisant ton SQL pour récupérer toutes les infos (dates, nom de consultant, type de projet,...)
- faire un this.create( uof_generateDWObjectSyntaxe() ) pour initialiser ton dataObject de ta DWControl
- tester avec un isvalid(this.object) que tout s'est bien passé... (facultatif, mais recommandé)
- parcourir ta dataStore ligne à ligne (ou en filtrant par date, projet ou que sais-je d'abord si tu dois d'abord aggréger un peu les données brutes), et progressivement remplir ta datawindowControle tunnée avec les valeurs précalculées (sans oublier le label de ligne)
johnpelu a écrit:
Je suis totalement perdu la, le ls_syntax quand il est fini je l'utilise comment ?
Voir ci-dessus, dans le this.create( uof_generateDWObjectSyntaxe() ) (voir aide PB sur la methode create de la datawindow controle.
johnpelu a écrit:
Je ne comprends pas comment on fait pour créer une colonne "Consultant_name" à laquelle est associée le projet du AM et le projet du PM pour un jour X
ta colonne "Consultant_name", elle est retrievée dans la datastore, on est d'accord, avec toutes les données dont tu pense avoir besoin.
Et dans la datawindow object de présentation (le planning en lui même), ben tes noms de consultant te servent à nommer tes en-tête de colonne, donc comme je le disais, une fois ta syntaxe faite et ton controle initialisé, tu ira mettre ces noms dans les champs texte que j'ai apellé "labelColy".
Tandis que tes projets, tu les mettra dans les colonnes "valeur_am_..." et "valeur_pm..." adéquats. Pour ça, il suffira que tu ailles chercher pour le consultant "toto" dans la datastore, et pour le jour "J" les données qu'il te faut. Et sur ta ligne de planning, tu rempli le "ligneLabel" avec "jour J", et dans les colonnes "valeur_am_y" et "valeur_pm_y" avec y = l'indice du consultant "toto", t'ira mettre ta valeur de projet (1 pour le matin, et une pour l'aprem)
johnpelu a écrit:
Je sais que je suis lourd, j'en suis désolé mais je suis complètement perdu dans les explications la.
C'est pas grave, mais je pense que tu as tout là, réfléchis-y à tête reposée, au calme, et ça ira... Ca fait longtemps que tu développe en PB?
johnpelu a écrit:
Le SELECT je dois le créer comment et ou ?
Ben comme dit plus haut, le même select que tu utilisait avant mais dans la datastore...
Franchement, on tourne en rond là, peut-être que tu pourrais regarder ça avec un de tes collègue, parfois un regard externe ça aide. Je vois pas ce que je peux faire de plus, à part peut-être venir te fournir un exemple, mais là je suis overbooké, il faudrait que je réinstalle PB, j'ai 2 projets en attente, et même si j'aime pas laisser quelqu'un qui n'a pas compris, j'ai des délais à tenir aussi.
Mais no stress, ce n'était qu'une piste je te le répète, tu peux l'adapter à ton gout, c'était juste pour te donner une solution qui - à mon sens - tiendra la route plus longtemps si jamais tes specs changent. Et puis ça marche, c'est comme ça que j'avais fait mon planning moi.
Bonne lecture.
Hors ligne
Je pense que je vais créer une Datastore qui va récupérer les données dont j'ai besoin, et affecter ces données dans ma Datawindow créée dynamiquement auparavant , en gros je pense que c'est ce que tu m'as expliqué, je te tiens au courant.
merci beaucoup en tout cas
Hors ligne
Bonjour, mon ls_syntax est comme ceci :
release 11.5; table(column=(type=date updatewhereclause=yes name=day_service dbname='consultant_day.day_service' ) column=(type=char(50) name=consultant_name_1 dbname='consultants_consultant_name' ) column=(type=char(30) name=projects_project_name_1 dbname='projects_project_name' ) column=(type=char(30) name=projects_project_name_2 dbname='projects_project_name' ) column=(type=char(50) name=consultant_name_2 dbname='consultants_consultant_name' ) column=(type=char(30) name=projects_project_name_3 dbname='projects_project_name' ) column=(type=char(30) name=projects_project_name_4 dbname='projects_project_name' ) ) column(band=detail id=1 alignment="0" tabsequence=32766 border="2" color="33554432" x="133" y="56" height="52" width="329" format="[general]" html.valueishtml="0" name=consultant_day_day_service visible="1" edit.limit=0 edit.case=any edit.focusrectangle=no edit.autoselect=yes edit.autohscroll=yes font.face="Verdana" font.height="-7" font.weight="400" font.family="2" font.pitch="2" font.charset="0" background.mode="1" background.color="536870912" background.transparency="0" background.gradient.color="8421504" background.gradient.transparency="0" background.gradient.angle="0" background.brushmode="0" background.gradient.repetition.mode="0" background.gradient.repetition.count="0" background.gradient.repetition.length="100" background.gradient.focus="0" background.gradient.scale="100" background.gradient.spread="100" tooltip.backcolor="134217752" tooltip.delay.initial="0" tooltip.delay.visible="32000" tooltip.enabled="0" tooltip.hasclosebutton="0" tooltip.icon="0" tooltip.isbubble="0" tooltip.maxwidth="0" tooltip.textcolor="134217751" tooltip.transparency="0" transparency="0" ) column(band=detail id=2 alignment="2" tabsequence=32766 border="2" color="33554432" x="466" y="0" height="52" width="699" format="[general]" html.valueishtml="0" name=consultants_consultant_name visible="1" edit.limit=50 edit.case=any edit.focusrectangle=no edit.autoselect=yes edit.autohscroll=yes font.face="Verdana" font.height="-8" font.weight="700" font.family="2" font.pitch="2" font.charset="0" background.mode="1" background.color="536870912" background.transparency="0" background.gradient.color="8421504" background.gradient.transparency="0" background.gradient.angle="0" background.brushmode="0" background.gradient.repetition.mode="0" background.gradient.repetition.count="0" background.gradient.repetition.length="100" background.gradient.focus="0" background.gradient.scale="100" background.gradient.spread="100" tooltip.backcolor="134217752" tooltip.delay.initial="0" tooltip.delay.visible="32000" tooltip.enabled="0" tooltip.hasclosebutton="0" tooltip.icon="0" tooltip.isbubble="0" tooltip.maxwidth="0" tooltip.textcolor="134217751" tooltip.transparency="0" transparency="0" ) column(band=detail id=3 alignment="2" tabsequence=32766 border="2" color="33554432" x="466" y="56" height="52" width="347" format="[general]" html.valueishtml="0" name=projects_project_name_AM_1 visible="1" edit.limit=30 edit.case=any edit.focusrectangle=no edit.autoselect=yes edit.autohscroll=yes font.face="Verdana" font.height="-7" font.weight="400" font.family="2" font.pitch="2" font.charset="0" background.mode="1" background.color="536870912" background.transparency="0" background.gradient.color="8421504" background.gradient.transparency="0" background.gradient.angle="0" background.brushmode="0" background.gradient.repetition.mode="0" background.gradient.repetition.count="0" background.gradient.repetition.length="100" background.gradient.focus="0" background.gradient.scale="100" background.gradient.spread="100" tooltip.backcolor="134217752" tooltip.delay.initial="0" tooltip.delay.visible="32000" tooltip.enabled="0" tooltip.hasclosebutton="0" tooltip.icon="0" tooltip.isbubble="0" tooltip.maxwidth="0" tooltip.textcolor="134217751" tooltip.transparency="0" transparency="0" ) column(band=detail id=4 alignment="2" tabsequence=32766 border="2" color="33554432" x="818" y="56" height="52" width="347" format="[general]" html.valueishtml="0" name=projects_project_name_PM_2 visible="1" edit.limit=30 edit.case=any edit.focusrectangle=no edit.autoselect=yes edit.autohscroll=yes font.face="Verdana" font.height="-7" font.weight="400" font.family="2" font.pitch="2" font.charset="0" background.mode="1" background.color="536870912" background.transparency="0" background.gradient.color="8421504" background.gradient.transparency="0" background.gradient.angle="0" background.brushmode="0" background.gradient.repetition.mode="0" background.gradient.repetition.count="0" background.gradient.repetition.length="100" background.gradient.focus="0" background.gradient.scale="100" background.gradient.spread="100" tooltip.backcolor="134217752" tooltip.delay.initial="0" tooltip.delay.visible="32000" tooltip.enabled="0" tooltip.hasclosebutton="0" tooltip.icon="0" tooltip.isbubble="0" tooltip.maxwidth="0" tooltip.textcolor="134217751" tooltip.transparency="0" transparency="0" ) column(band=detail id=5 alignment="2" tabsequence=32766 border="2" color="33554432" x="1170" y="0" height="52" width="699" format="[general]" html.valueishtml="0" name=consultants_consultant_name visible="1" edit.limit=50 edit.case=any edit.focusrectangle=no edit.autoselect=yes edit.autohscroll=yes font.face="Verdana" font.height="-8" font.weight="700" font.family="2" font.pitch="2" font.charset="0" background.mode="1" background.color="536870912" background.transparency="0" background.gradient.color="8421504" background.gradient.transparency="0" background.gradient.angle="0" background.brushmode="0" background.gradient.repetition.mode="0" background.gradient.repetition.count="0" background.gradient.repetition.length="100" background.gradient.focus="0" background.gradient.scale="100" background.gradient.spread="100" tooltip.backcolor="134217752" tooltip.delay.initial="0" tooltip.delay.visible="32000" tooltip.enabled="0" tooltip.hasclosebutton="0" tooltip.icon="0" tooltip.isbubble="0" tooltip.maxwidth="0" tooltip.textcolor="134217751" tooltip.transparency="0" transparency="0" ) column(band=detail id=6 alignment="2" tabsequence=32766 border="2" color="33554432" x="1170" y="56" height="52" width="347" format="[general]" html.valueishtml="0" name=projects_project_name_AM_3 visible="1" edit.limit=30 edit.case=any edit.focusrectangle=no edit.autoselect=yes edit.autohscroll=yes font.face="Verdana" font.height="-7" font.weight="400" font.family="2" font.pitch="2" font.charset="0" background.mode="1" background.color="536870912" background.transparency="0" background.gradient.color="8421504" background.gradient.transparency="0" background.gradient.angle="0" background.brushmode="0" background.gradient.repetition.mode="0" background.gradient.repetition.count="0" background.gradient.repetition.length="100" background.gradient.focus="0" background.gradient.scale="100" background.gradient.spread="100" tooltip.backcolor="134217752" tooltip.delay.initial="0" tooltip.delay.visible="32000" tooltip.enabled="0" tooltip.hasclosebutton="0" tooltip.icon="0" tooltip.isbubble="0" tooltip.maxwidth="0" tooltip.textcolor="134217751" tooltip.transparency="0" transparency="0" ) column(band=detail id=7 alignment="2" tabsequence=32766 border="2" color="33554432" x="1522" y="56" height="52" width="347" format="[general]" html.valueishtml="0" name=projects_project_name_PM_4 visible="1" edit.limit=30 edit.case=any edit.focusrectangle=no edit.autoselect=yes edit.autohscroll=yes font.face="Verdana" font.height="-7" font.weight="400" font.family="2" font.pitch="2" font.charset="0" background.mode="1" background.color="536870912" background.transparency="0" background.gradient.color="8421504" background.gradient.transparency="0" background.gradient.angle="0" background.brushmode="0" background.gradient.repetition.mode="0" background.gradient.repetition.count="0" background.gradient.repetition.length="100" background.gradient.focus="0" background.gradient.scale="100" background.gradient.spread="100" tooltip.backcolor="134217752" tooltip.delay.initial="0" tooltip.delay.visible="32000" tooltip.enabled="0" tooltip.hasclosebutton="0" tooltip.icon="0" tooltip.isbubble="0" tooltip.maxwidth="0" tooltip.textcolor="134217751" tooltip.transparency="0" transparency="0" )
Je fais ensuite :
ls_syntax = this.of_create_dynamic_dw( ) if dw_planning.Create(ls_syntax, ls_returnError) = 1 then dw_planning.SetTransobject(sqlca) dw_planning.Retrieve() else messagebox("Error",ls_returnError) end if
Je n'ai aucune erreur, "l'affichage" de ma DataWindow est vide, sans rien du tout, je suppose que c'est normal, est ce que maintenant je peux essayer d'affecter les données de ma Datastore à cette DataWindow ?
Dernière modification par johnpelu (26-11-2008 10:37:24)
Hors ligne
Ok, parfait.
Ne fais pas le settransobject, ni le retrieve (puisqu'ici, dw_planning contient une "datawindow external", c'est à dire sans query - comme tu peux le voir dans la syntaxe- juste de colonnes...)
ET en effet, maintenant tu peux remplir dw_planning avec les données de ta datastore... Et dw_planning reste vide puisqu'elle ne contient pas de données, n'étant pas liée à un SQL, puisque tu dois la remplir à la main il y a actuellement 0 lignes donc rien à voir encore.
Hors ligne
Ok, j'effectue un petit test avant de me lancer dans le remplissage de toutes les lignes et colonnes, et en essayant de remplir le jour pour la ligne 1, je n'obtiens aucun résultat (toujours affichage vide)
String ls_syntax, ls_returnError, ls_filter Long ll_colCount, ll_col,ll_row,ll_i_consult,ll_count_day,ll_count_data Date ldt_start_date, ldt_day_date DataStore lds_data_planning DataStore lds_consultants lds_consultants = CREATE DataStore lds_consultants.DataObject = 'd_consultants' lds_consultants.SetTransObject(SQLCA) lds_consultants.Retrieve( ) ll_colCount = lds_consultants.rowcount() lds_data_planning = CREATE DataStore lds_data_planning.DataObject = 'd_data_planning' lds_data_planning.SetTransObject(SQLCA) lds_data_planning.Retrieve( ) ll_count_data = lds_data_planning.rowcount() ldt_start_date = date('01-01-2009') ldt_day_date = ldt_start_date ls_syntax = this.of_create_dynamic_dw( ) if dw_planning.Create(ls_syntax, ls_returnError) = 1 then for ll_row = 1 to ll_count_data //Filter by Day ls_filter = "consultant_day_day_service= '" + string(ldt_day_date) +"'" lds_data_planning.setfilter(ls_filter) lds_data_planning.filter() dw_planning.object.day_service[ll_row] = ldt_day_date next else messagebox("Error",ls_returnError) messagebox("syntax",ls_syntax) end if dw_planning.SetTransobject(sqlca) dw_planning.Retrieve() destroy lds_consultants destroy lds_data_planning
Dernière modification par johnpelu (26-11-2008 11:52:11)
Hors ligne
en principe il faut faire une deuxième boucle sur les lignes de lds_data_planning après le filtre
puis insérer une ligne dans dw_planning avant d'affecter les valeurs de colonne :
ll_insert = dw_planning.InsertRow( 0 ) dw_planning.SetItem( ll_insert, 'col1', val1 ) dw_planning.SetItem( ll_insert, 'col2', val2 )
et comme Cortex l'a déjà mentionné il ne faut pas faire :
dw_planning.SetTransobject(sqlca) dw_planning.Retrieve()
Hors ligne
erasorz a écrit:
en principe il faut faire une deuxième boucle sur les lignes de lds_data_planning après le filtre
puis insérer une ligne dans dw_planning avant d'affecter les valeurs de colonne :Code: pb
ll_insert = dw_planning.InsertRow( 0 ) dw_planning.SetItem( ll_insert, 'col1', val1 ) dw_planning.SetItem( ll_insert, 'col2', val2 )et comme Cortex l'a déjà mentionné il ne faut pas faire :
Code: pb
dw_planning.SetTransobject(sqlca) dw_planning.Retrieve()
Non, rien ne s'affiche
Hors ligne
quoi qu'il en soit, il y a un pb de conception dans ton script...
tu fais une boucle sur les lignes de lds_data_planning et dans cette boucle tu refiltres lds_data_planning...
quelles sont les requêtes de lds_consultants et lds_data_planning ?
en principe une seule datastore avec date, consultant, tache te suffirait
Hors ligne
J'ai changé cela, le filtre était inutile.
Mais rien ne s'affiche pour autant, pourtant le SetItem me retourne 1 et le ll_insert est ok également.
Pourquoi ca ne s'affiche pas ?
Hors ligne
johnpelu a écrit:
J'ai changé cela, le filtre était inutile.
Mais rien ne s'affiche pour autant, pourtant le SetItem me retourne 1 et le ll_insert est ok également.
Pourquoi ca ne s'affiche pas ?
Ca ne peut que marcher, sans doute une petite distraction...
Vérifie que :
1/ dw_planning est ok après le create():
if not isvalid(dw_planning.object) then messagebox("Erreur", "DWObjet non créé.")
2/ quelle est la valeur de ll_insert? Ca devrait être 1 la 1ere fois...
3/ récupère la syntaxe de la dw que tu génère et essaie la sur une nouvelle datawindow en developpement, histoire de voir s'il y aurait pas une hauteur de bande détail de 0 des fois...
4/ Si tout ça ne donne rien, c'est pas normal.
Hors ligne
Cortex a écrit:
johnpelu a écrit:
J'ai changé cela, le filtre était inutile.
Mais rien ne s'affiche pour autant, pourtant le SetItem me retourne 1 et le ll_insert est ok également.
Pourquoi ca ne s'affiche pas ?Ca ne peut que marcher, sans doute une petite distraction...
Vérifie que :
1/ dw_planning est ok après le create():Code: pb
if not isvalid(dw_planning.object) then messagebox("Erreur", "DWObjet non créé.")
2/ quelle est la valeur de ll_insert? Ca devrait être 1 la 1ere fois...
3/ récupère la syntaxe de la dw que tu génère et essaie la sur une nouvelle datawindow en developpement, histoire de voir s'il y aurait pas une hauteur de bande détail de 0 des fois...
4/ Si tout ça ne donne rien, c'est pas normal.
JE vais finier par t'aimer mdr , effectivement Detail était egal à 0...
Bon bah je vais essayer d'ajouter mes valeurs, par contre on dirait qu'il affiche encore consultant_name à chaque ligne, je vais pallier à cela comment ?
Hors ligne
johnpelu a écrit:
Bon bah je vais essayer d'ajouter mes valeurs, par contre on dirait qu'il affiche encore consultant_name à chaque ligne, je vais pallier à cela comment ?
Ben à la place de la datawindow, je ferais pareil aussi moi...
Mais reprenons un instant ta syntaxe de datawindow si tu le permet, parce qu'évidemment, c'est pas la chose la plus simple du monde que de pondre une syntaxe correcte de dw à la main...
Tu as défini ce que j'appellerai 7 "dataColumn" (pour les différencier des colonnes de présentations que j'appellerai "displayColumn"):
- consultant_day.day_service (id 1) !!!Enlève le point!!! Pas de fantaisie avec PB...
- consultant_name_1 (id 2)
- projects_project_name_1 (id 3)
- projects_project_name_2 (id 4)
- consultant_name_2 (id 5)
- projects_project_name_3 (id 6)
- projects_project_name_4 (id 7)
Ok. Tu n'étais pas obligé de leur donner des noms en rapport avec le nom de tees colonnes DB puisqu'ici on est pas lié à un query. Pour ton info, ce sont ces noms de colonne qui sont utilisé quand tu veux faire un setItem ou un getItem... Et met tout les dbname à "", ce n'est pas faux, mais évitons de perturber PB...
Par contre, là où je trouve ça bizarre (mais toujours pas faux, mais perturbant), c'est la liste de tes displayColumn:
- consultant_day_day_service (id 1)
- consultants_consultant_name (id 2)
- projects_project_name_AM_1 (id 3)
- projects_project_name_PM_2 (id 4)
- consultants_consultant_name (id 5)
- projects_project_name_AM_3 (id 6)
- projects_project_name_PM_4 (id 7)
1/ Pourquoi ne pas avoir gardé le même nom que pour les dataColumn? Sauf erreur de ma part, le nom des dataColumn est utilisé pour les get/setItems tandis que lors d'accès à des propriété de colonne (visible, color,...) c'est le nom des displayColumn qui est utilisé... Bref, garde ça à l'esprit, sinon tu vas t'emmeler.
2/ L'idée de numéroter les "projects_project_name_AM_..." était d'avoir "projects_project_name_AM_12" pour le consultant 12 et "projects_project_name_PM_12" pour ce meme consultant 12, bref, plus facile à retrouver que si tu as "projects_project_name_AM_3" et "projects_project_name_PM_4" pour le consultant 2 comme tu as fait là, non?
3/ evite de donner le même nom à des displayColumn: consultants_consultant_name... Même si ça passe maintenant, PB ne saura pas à quelle colonne tu veux accéder si tu lui parle de celle-là. Essaie plutot "consultants_consultant_name_1" et "consultants_consultant_name_2", en plus, tu garde l'info de l'ordre du consultant...
Et pour revenir à ta question initiale, comme tu peux le voir, tu lui dit "Affiche moi 2 colonnes 'consultant_name' par ligne, qui seront respectivement liées aux données d'id 2 et 5". Donc, à mon sens c'est normal... Par contre, si je lis bien entre les lignes, je pense deviner que tu t'attendais à les voir apparaitre en en-tête de colonne... Sauf que pour ça, il faut placer ces 2 colonne dans le header . De plus, ce ne doivent pas être des "column" pour ces 2 là, mais des "text"! Voir des "compute" avec en expression "~tconsultant_name_1[1]" (ou "_2[1]")...
Hors ligne
Ok, pour ce qui est du Header je le ferai à la fin, je vais d'abord m'assurer que les filtres et les valeurs son ok.
Ce filtre ci ne fonctionne pas, pourtant ma colonne est bien de type Date tout comme ma variable
ls_filter = "consultant_day_day_service= '"+ string(ldt_day_date) +"'"
J'ai même essayé sans les '', quel que soit le filtre ,ca me retourne 9 lignes alors (donc actuellement toute ma table) au lieu de 2 lignes
Dernière modification par johnpelu (26-11-2008 14:14:04)
Hors ligne
Fait un messagebox de la string que tu passe au setFilter (m'étonnerait pas qu'il y ait une couille date-datetime ou un truc du genre), puis que retournent setfilter() et filter()?
PS: tu sais que tu n'es pas obligé de faire un post à chaque nouveau problème que tu rencontre, tu peux aussi chercher un peu par toi même d'abord... Là ce sera juste une question d'algorithmique, donc à mon sens là tu peux te débrouiller, surtout qu'on sort pas mal du cadre du post maintenant...
Good luck!
Et n'oublions jamais que PB est fourni avec une super aide...
Hors ligne
Cortex a écrit:
Fait un messagebox de la string que tu passe au setFilter (m'étonnerait pas qu'il y ait une couille date-datetime ou un truc du genre), puis que retournent setfilter() et filter()?
PS: tu sais que tu n'es pas obligé de faire un post à chaque nouveau problème que tu rencontre, tu peux aussi chercher un peu par toi même d'abord... Là ce sera juste une question d'algorithmique, donc à mon sens là tu peux te débrouiller, surtout qu'on sort pas mal du cadre du post maintenant...
Good luck!
Et n'oublions jamais que PB est fourni avec une super aide...
Ok :-)
La j'en suis au résultat que :
Ca s'affiche correctement , je vais modifier les headers, changer les couleurs de cellules et essayer les Event du style DoubleClicked .
Un tout grand merci
JE pense que ce topic est résolu
Hors ligne