Pas de problème (pb), que du PowerBuilder (PB) ^^

Le forum (ô combien francophone) des utilisateurs de Powerbuilder.

Recherche rapide

Annonce

Certaines rubriques, dont des cours, sont uniquement visibles par les membres du forum ^^.
Dans la rubrique Liens & Références, vous avez accès à un sommaire de téléchargement, profitez-en !
Il existe maintenant un nouveau TOPIC "Votre CV en Ligne" accessible uniquement par demande.

#1 17-06-2008 13:30:48

djeckelle  
Membre Geek
Lieu: Beauvais
Date d'inscription: 02-06-2008
Messages: 38
Pépites: 3
Banque: 0

[RESOLU] Copy de datawindow avec dropdown

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.

Code: pb

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)


"Il vaut mieux échouer, apprendre et s'améliorer que ne pas avancer."
[Définition de l'échec en extrême programming d'après la revue programmez de Mai 2008]

Hors ligne

 

#2 17-06-2008 14:00:32

pick ouic  
La bourse ou la vie ^^
Award: gearotter
Lieu: Massy-Verrières
Date d'inscription: 29-05-2006
Messages: 4658
Pépites: 942
Banque: 2,147,483,647
Site web

Re: [RESOLU] Copy de datawindow avec dropdown

bonjour,
il faut que tu charges ta dropdowndatawindow.


Connaitre son ignorance est une grande part de la connaissance.
http://animegifs.free.fr/anime/mazinger/mazinger.gif

Hors ligne

 

#3 19-06-2008 11:29:50

djeckelle  
Membre Geek
Lieu: Beauvais
Date d'inscription: 02-06-2008
Messages: 38
Pépites: 3
Banque: 0

Re: [RESOLU] Copy de datawindow avec dropdown

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)

Code: 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)


"Il vaut mieux échouer, apprendre et s'améliorer que ne pas avancer."
[Définition de l'échec en extrême programming d'après la revue programmez de Mai 2008]

Hors ligne

 

#4 19-06-2008 11:52:45

Chrnico  
N2I Power
Award: bf
Lieu: Vanves
Date d'inscription: 05-06-2007
Messages: 1206
Pépites: 12,884,901,943
Banque: 9,223,372,036,854,776,000
Site web

Re: [RESOLU] Copy de datawindow avec dropdown

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.


Tu dois donc tu peux (Kant)

Tu peux donc tu dois (N2i)
www.n2i.fr

Hors ligne

 

#5 19-06-2008 12:29:06

djeckelle  
Membre Geek
Lieu: Beauvais
Date d'inscription: 02-06-2008
Messages: 38
Pépites: 3
Banque: 0

Re: [RESOLU] Copy de datawindow avec dropdown

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.


"Il vaut mieux échouer, apprendre et s'améliorer que ne pas avancer."
[Définition de l'échec en extrême programming d'après la revue programmez de Mai 2008]

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22