Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour,
Je copie une datawindow dans une autre en passant par un rows copy et en prenant soin d'affecter le dataobject. Mon soucis est que dans le cas d'une dropdown colonne, je ne récupère que les codes et non pas les displayvalue.
Je parcours donc les enregistrements pour aller récupérer les valeurs, sauf que pour les afficher dans la nouvelle datawindow, il faut qu'au préalable je puisse changer le format de la colonne pour qu'elle correspond au type de la display colonne avant de pouvoir faire un setitem.
Je voudrais pouvoir faire un truc du genre..mais ca ne marche pas.
ls_str_retour = dw_destination.Modify(ls_obj_courant+".coltype='char(32766)'")
D'avance merci pour votre aide
Laurence
Dernière modification par djeckelle (20-10-2008 07:31:47)
Hors ligne
bonjour,
il faut que tu charges ta dropdowndatawindow.
Hors ligne
Bonjour,
En fait je dois écrire une méthode générique qui doit permettre de copier les enregistrement d'une datawindow vers une autre.
Dans la datawindow de destination je ne peux pas faire de retrieval car elle ne posséde pas le lien avec avec la datawindow de la dropdown.
Donc pour le moment j'en suis arrivée à (sans entrer dans les détails) l'enchainement suivant qui fonctionne presque. Car je vient de faire la dure découverte que je ne peux pas ajouter de colonne qui ne soit pas dans mon buffer, de ce fait l'ajout d'une colonne avec un ID qui n'existe pas n'est pas possible, et surtout je ne peus pas forcer le format char(0) de ma nouvelle colonne.
J'ai bien penser a à compute mais si je met dans l'expression la fonction lookupdisplay, elle ne peut pas être interprétée......
Je crois bien que je suis coincée....(Ps je débute en PB)
... ... dw_destination.dataobject = dw_source.dataobject dw_destination.settransobject(sqlca) // copy de l'une vers l'autre dw_source.RowsCopy(dw_sourceGetRow(), dw_source.RowCount(), Primary!, dw_destination, 1, Primary!) .... .... //Récupération de la liste des objets ls_list_objet = dw_detsination.Describe("datawindow.objects") ls_list_objet = adw.Describe("datawindow.objects") li_len_string_obj = len(ls_list_objet) li_pos_fin = Pos(ls_list_objet,ls_sep,1) //on parcours les objets de la datwindow if li_pos_fin >= 1 Then DO WHILE not lb_fin li_pos_fin = Pos(ls_list_objet,ls_sep,1) if li_pos_fin = 0 then lb_fin = true li_pos_fin = li_len_string_obj+1 end if // on récupère l'objet courant ls_obj_courant = Mid(ls_list_objet, li_pos_deb, (li_pos_fin - li_pos_deb)) ... ... if dw_destination.dw_export.Describe(ls_obj_courant+".Edit.Style") = 'dddw' then //Nom de la display colonne ls_ddw_col = dw_destination.Describe(ls_obj_courant+".DDDW.DisplayColumn") if (ls_ddw_col <> "?") and (ls_ddw_col <> "!") then ... ... ls_create = 'create column(band=detail ' ls_create += ' id=1' + string(integer(Max_id)+1) + ' ' ls_create += ' alignment="' + "2" + '" tabsequence=32766 ' ls_create += 'border="' + "0" + '" color="' + ls_font_color + '"' ls_create += ' x="' + as_x + '" y="'+as_y+'" height="' + as_height + '" width="' +as_width+ '" ' ls_create += 'format="' + ls_format + '" ' ls_create += 'name= ' + as_nom + ' ' ls_create += 'visible="' + as_visible + '" ' ls_create += 'edit.limit=0 edit.case=any edit.autoselect=yes ' ls_create += 'edit.format="' + ls_format + '" ' ls_create += 'font.face="Arial" font.height="-8" ' ls_create += 'font.weight="400" font.family="2" font.pitch="2" font.charset="0" ' ls_create += 'background.mode="'+as_bkg_mode+'" background.color='+as_bkg_color+'") ' ls_err = w_export_datawindow.dw_export.Modify(ls_create) if ls_err <> "" then f_isa_error(0, "Problème lors de la création de la colonne : " + ls_err, "nvo_export_data.uof_ajouter_colonne", 16) li_ret = -1 end if // Boucle sur les enrgeistrements de la datawindow source pour récupérer les displayvalues FOR li_cpt=1 TO dw_source.rowcount() ls_displayvalue = dw_source.Describe("Evaluate('LookUpDisplay("+ls_obj_courant+")'," + string(li_cpt)+")") if (ls_displayvalue <> "!") and (ls_displayvalue <> "?") then //On enregistre la valeur dans l adatwindow de destination. li_code_retour = dw_destination.SetItem(li_cpt,ls_new_col, ls_displayvalue) if li_code_retour = -1 then f_error(li_code_retour, "Problème sur l'affectation", "F_copier", 75) end if end if NEXT end if end if // On supprime l'objet courant de la liste des objet à traiter li_len_obj_courant = len(ls_obj_courant) ls_list_objet = Right(ls_list_objet, (li_len_string_obj - li_len_obj_courant - 1)) //On re-calcul la longueur de la chaîne li_len_string_obj = len(ls_list_objet) LOOP end if
Dernière modification par djeckelle (19-06-2008 11:49:32)
Hors ligne
J'ai quand même une question : ta DW cible n'est pas connectée à la base de donnée ?
Car si ce n'est pas le cas (donc si elle est connectée), tu peux très bien forcer le retrieve de la DDDW sur la cible avant d'y transférer les enregs.
Sinon, c'est juste une piste, mais tu dois pouvoir définir une DDDW de type external sur la colonne de ta datawindow cible.
Ainsi, il n'y a pas de retrieve à faire et le type de la colonne reste le même et ton utilisateur voit la valeur affichée attendue...
Pour ce faire, avant le transfert des enregistrement de la source vers la cible, tu lis la DDDW de la source et tu alimentes la DDDW de la cible avec les mêmes valeurs/libellés (GetChild des deux DDDW, getitem sur la DDDW source, insertrow et setitem sur la DDDW cible). Ensuite tu transfères tes données de la DW à exporter vers la DW cible sans t'occuper de la fameuse colonne car la DDDW affichera toute seule les info liées aux valeurs.
Hors ligne
Non je n'ai pas de connections sur ma dw cible..en fait c'est une boîte vide invisible à l'utilisateur et elle me sert juste pour mettre an forme les données avant un export vers excel.(Masque les objets invisibles, traiter les conditions, évaluer les tag.......)
Je ne connais pas à l'avance le format et le contenu de la DW source...j'avais pensé à ta solution mais cela aurait sous entendu que je connaisse le nombre de ddw dont j'ai besoin à l'avance....
Je suis en train de vois si je ne peux pas récupérer la syntax de ma dw_destination dans une chaîne pour la modifier et ajouter ma colonne dans la requête SQL et dans la décalration des colonne pour ensuite la réimporter..mais ca me semble chaud.
.... je vais craquer...je croisje ne suis déjà pas une fan de PB..alors là...
En tout cas merci pour ton aide.
Hors ligne