Après windows pour les nuls, voici PB pour les bons (ou presque).

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.
  • Index
  •  » Powerscripts
  •  » [RESOLU] Modifier un control d'un rapport, lui-même inclus dans un datawindow

#26 07-05-2008 09:10:31

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,775,808
Site web

Re: [RESOLU] Modifier un control d'un rapport, lui-même inclus dans un datawindow

Je pense que c'est le rowcount de la datawindow principale. Mais cela veut dire que ta DW report est construite.

Autre test :
ajoute un event ue_post_retrieve() à ton controle DW.
Codes y ta ligne de modify du label.
Dans ton ue_print lances un this.Post ue_post_retrieve()

Pour voir...


Tu dois donc tu peux (Kant)

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

Hors ligne

 

#27 07-05-2008 09:40:14

Nyphel  
Membre Power Geek
Lieu: Grenoble
Date d'inscription: 06-05-2008
Messages: 253
Pépites: 12
Banque: 529,705,333,097,693

Re: [RESOLU] Modifier un control d'un rapport, lui-même inclus dans un datawindow

Comme j'avais un doute sur où il fallait placer ce nouvel event, j'en ai placé une copie dans :
- w_sheet_account, qui est ma sheet principale, celle qui déclenche et gère mon ue_print()
- dw_print, qui est ma datawindow qui contient le report

Code: pb

messagebox("", "w_sheet_account")
string ls_expression
ls_expression = dw_print.object.rpt_users.Describe("user_number_t.text")
messagebox("Expression", ls_expression)


Donc c'est bien celui de ma w_sheet_account qui est appelé, mais :
- l'appel se fait à la création/affichage de ma fenêtre
- forcément j'ai un autre appel lorsque je demande l'impression
- dans les deux cas j'ai droit au message d'erreur de type "accessing external property"

Dernière modification par Nyphel (07-05-2008 09:41:17)

Hors ligne

 

#28 07-05-2008 09:50:58

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,775,808
Site web

Re: [RESOLU] Modifier un control d'un rapport, lui-même inclus dans un datawindow

Petite question. Comment est affecté le dataobject à ton control DW de ta fenêtre d'impression avant le retrieve ?


Tu dois donc tu peux (Kant)

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

Hors ligne

 

#29 07-05-2008 09:57:21

Nyphel  
Membre Power Geek
Lieu: Grenoble
Date d'inscription: 06-05-2008
Messages: 253
Pépites: 12
Banque: 529,705,333,097,693

Re: [RESOLU] Modifier un control d'un rapport, lui-même inclus dans un datawindow

Voici ce qui se passe dans mon événement ue_print() de ma sheet w_sheet_account :

Code: pb

[...] // Initialisation des variables

dw_print.settransobject(SQLCA)

//translate datawindow
guo_message.Event ue_translate_datawindow(dw_print)

//retrieve
dw_print.Retrieve(il_accountnumber, ll_number_null, ls_null)

[...] // La partie qui me pose soucis, 
      // avec modification des titres de colonnes de 
      // dw_print.object.rpt_users.object.xxx


D'accord, merci pour le GetChild... J'avoue que ça me travaillait !

Dernière modification par Nyphel (07-05-2008 09:58:52)

Hors ligne

 

#30 07-05-2008 09:59:57

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,775,808
Site web

Re: [RESOLU] Modifier un control d'un rapport, lui-même inclus dans un datawindow

Ta datawindow dw_print à un dataobject fixe associé directement dans le DW painter ?


Tu dois donc tu peux (Kant)

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

Hors ligne

 

#31 07-05-2008 10:16:20

Nyphel  
Membre Power Geek
Lieu: Grenoble
Date d'inscription: 06-05-2008
Messages: 253
Pépites: 12
Banque: 529,705,333,097,693

Re: [RESOLU] Modifier un control d'un rapport, lui-même inclus dans un datawindow

Voici le processus de traduction :

w_sheet_account -> événement ue_print() :

Code: pb

guo_message.Event ue_translate_datawindow(dw_print)


uo_message -> événement ue_translate_datawindow(ref datawindow adw_datawindow) :

Code: pb

guo_language.of_translate_label(adw_datawindow)


uo_language -> function of_translate_label(readonly datawindow ad_datawindow) inherited from uo_base_language :

Code: pb

integer li_max
integer li_loop
string ls_object_text
integer li_object_tag
string ls_description
string ls_objectname[]
uo_base_string luo_string
integer li_datawindow_tag
string ls_translated_label

// is it useful to translate?
IF ii_targetlanguage = ii_defaultlanguage THEN RETURN


li_datawindow_tag = dec(ad_datawindow.tag)

ls_description = ad_datawindow.describe('dataWindow.Objects')
luo_string.of_parsetoarray(ls_description,'~t',ls_objectname)

li_max = upperbound(ls_objectname)

FOR li_loop=1 TO li_max

  ls_translated_label = space(255)
   IF right(ls_objectname[li_loop],2) = '_t' THEN
      
    li_object_tag = dec(ad_datawindow.describe(ls_objectname[li_loop]+'.tag'))
    ls_object_text = ad_datawindow.describe(ls_objectname[li_loop]+'.text')
    ls_translated_label = this.of_get_labels( li_datawindow_tag, li_object_tag, ls_object_text )
    IF trim(ls_translated_label) <> '' THEN ad_datawindow.Modify(ls_objectname[li_loop]+".text = '"+ls_translated_label+"'")
END IF

NEXT

Hors ligne

 

#32 07-05-2008 10:17:39

Nyphel  
Membre Power Geek
Lieu: Grenoble
Date d'inscription: 06-05-2008
Messages: 253
Pépites: 12
Banque: 529,705,333,097,693

Re: [RESOLU] Modifier un control d'un rapport, lui-même inclus dans un datawindow

Et ma datawindow dw_print a un report directement associé dans le painter :
properties -> onglet "General" -> report -> et là j'indique mon report de type d_account_user_print, qui est nommé rpt_users.

Hors ligne

 

#33 07-05-2008 10:48:52

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,775,808
Site web

Re: [RESOLU] Modifier un control d'un rapport, lui-même inclus dans un datawindow

Nyphel a écrit:

Voici le processus de traduction :

w_sheet_account -> événement ue_print() :

Code: pb

guo_message.Event ue_translate_datawindow(dw_print)


uo_message -> événement ue_translate_datawindow(ref datawindow adw_datawindow) :

Code: pb

guo_language.of_translate_label(adw_datawindow)


uo_language -> function of_translate_label(readonly datawindow ad_datawindow) inherited from uo_base_language :

Code: pb

integer li_max
integer li_loop
string ls_object_text
integer li_object_tag
string ls_description
string ls_objectname[]
uo_base_string luo_string
integer li_datawindow_tag
string ls_translated_label

// is it useful to translate?
IF ii_targetlanguage = ii_defaultlanguage THEN RETURN


li_datawindow_tag = dec(ad_datawindow.tag)

ls_description = ad_datawindow.describe('dataWindow.Objects')
luo_string.of_parsetoarray(ls_description,'~t',ls_objectname)

li_max = upperbound(ls_objectname)

FOR li_loop=1 TO li_max

  ls_translated_label = space(255)
   IF right(ls_objectname[li_loop],2) = '_t' THEN
      
    li_object_tag = dec(ad_datawindow.describe(ls_objectname[li_loop]+'.tag'))
    ls_object_text = ad_datawindow.describe(ls_objectname[li_loop]+'.text')
    ls_translated_label = this.of_get_labels( li_datawindow_tag, li_object_tag, ls_object_text )
    IF trim(ls_translated_label) <> '' THEN ad_datawindow.Modify(ls_objectname[li_loop]+".text = '"+ls_translated_label+"'")
END IF

NEXT

Ce script de traduction ne tient pas compte des sous-reports (une petite fonction récursive aurait été du meilleur effet).
C'est dommage. Mais c'est un autre problème...


Tu dois donc tu peux (Kant)

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

Hors ligne

 

#34 07-05-2008 10:54:25

Nyphel  
Membre Power Geek
Lieu: Grenoble
Date d'inscription: 06-05-2008
Messages: 253
Pépites: 12
Banque: 529,705,333,097,693

Re: [RESOLU] Modifier un control d'un rapport, lui-même inclus dans un datawindow

En effet, c'est d'ailleurs suite à cela que j'en viens à traduire le sous-report column par column... :-/

Hors ligne

 

#35 07-05-2008 10:58:46

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,775,808
Site web

Re: [RESOLU] Modifier un control d'un rapport, lui-même inclus dans un datawindow

Argl, ça vaut peut-être le coup de modifier la méthode pour quelle prenne en compte les sous-reports alors


Tu dois donc tu peux (Kant)

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

Hors ligne

 

#36 07-05-2008 11:07:54

Nyphel  
Membre Power Geek
Lieu: Grenoble
Date d'inscription: 06-05-2008
Messages: 253
Pépites: 12
Banque: 529,705,333,097,693

Re: [RESOLU] Modifier un control d'un rapport, lui-même inclus dans un datawindow

Je ne peux pas vraiment intervenir sur cette méthode : elle est héritée dans des dizaines et des dizaines de sheets/responses windows sur un projet qui a plus de 7 ans. Si je la modifie je devrai non seulement tester l'ensemble de l'application, mais aussi modifier les appels de traduction de titre de colonnes individuelles... Et cela je ne peux pas le faire, tant par manque d'expérience/capacité que par manque de temps :-/

Hors ligne

 

#37 07-05-2008 11:15:03

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,775,808
Site web

Re: [RESOLU] Modifier un control d'un rapport, lui-même inclus dans un datawindow

Nyphel a écrit:

Je ne peux pas vraiment intervenir sur cette méthode : elle est héritée dans des dizaines et des dizaines de sheets/responses windows sur un projet qui a plus de 7 ans. Si je la modifie je devrai non seulement tester l'ensemble de l'application, mais aussi modifier les appels de traduction de titre de colonnes individuelles... Et cela je ne peux pas le faire, tant par manque d'expérience/capacité que par manque de temps :-/

Par contre tu peux peut-être créer une méthode identique avec un datawindowchild en paramètre (tant pis pour la récurcivité ) et faire appel à cette méthode après avoir fait ton getchild (sur la colonne du user report )_.
Ca t'éviterait de traduire label par label ta DWC...


Tu dois donc tu peux (Kant)

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

Hors ligne

 

#38 07-05-2008 11:25:18

Nyphel  
Membre Power Geek
Lieu: Grenoble
Date d'inscription: 06-05-2008
Messages: 253
Pépites: 12
Banque: 529,705,333,097,693

Re: [RESOLU] Modifier un control d'un rapport, lui-même inclus dans un datawindow

Oui c'est une bonne idée... Je préfèrerai comprendre résoudre le problème, mais le cas échéant je me tournerai probablement vers cette solution ;-)

Hors ligne

 

#39 07-05-2008 11:40:33

hellkinder  
Kinder Surprise
Award: chocomordutk6
Lieu: Bordeaux
Date d'inscription: 12-09-2006
Messages: 902
Pépites: 0
Banque: 10,524,230,367,490

Re: [RESOLU] Modifier un control d'un rapport, lui-même inclus dans un datawindow

Vue que ton report est dans le detail band, tu peux essayer ça pour voir si cela fonctionne pour le premier report :

Code: pb

dw_print.object.rpt_users[1].object.user_number_t.text = 'essai'


Si ca fonctionne, il suffira d'une petite boucle sur dw_print.rowcount()..mais bon, on en est pas là.


http://img510.imageshack.us/img510/4229/userbar1204625572ha9.gif
"Pour la première fois dans l'histoire de l'humanité, tous les peuples de la Terre ne forment qu'un"

Hors ligne

 

#40 07-05-2008 11:58:14

Nyphel  
Membre Power Geek
Lieu: Grenoble
Date d'inscription: 06-05-2008
Messages: 253
Pépites: 12
Banque: 529,705,333,097,693

Re: [RESOLU] Modifier un control d'un rapport, lui-même inclus dans un datawindow

Ceci ne génère pas d'erreur :

Code: pb

dw_print.object.rpt_users[1].object.user_number_t.text = 'essai'


Toutefois, initialement il y avait cela :

Code: pb

dw_print.object.rpt_users.object.user_number_t.text = 'essai'

Ce qui générait - parfois - des erreurs, sur certains postes uniquement.
J'avoue que j'ai donc quelques réserves à me contenter de cette solution, d'autant plus que je ne sais pas pourquoi on indique cet indice [1] ?

Dernière modification par Nyphel (07-05-2008 11:58:26)

Hors ligne

 

#41 07-05-2008 12:03:43

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,775,808
Site web

Re: [RESOLU] Modifier un control d'un rapport, lui-même inclus dans un datawindow

Ha mais il y a une nouvelle information là !
Si le plantage a lieu que sur certains postes, il faut peut-être regarder du côté du runtime...

Pour ce qui est de la syntaxe les deux sont bonne. Celle de hellkinder permet de modifier le contenu pour une instance (une ligne de la DW principale) de la DWC, ta syntaxe d'origine permet de modifier pour toutes les instances d'un coup. Le paramètre [row] est facultatif.

Examples

Example 1  Suppose that a DataWindow has the Composite presentation style and includes a report called rpt_employee. The report includes a column emp_id. This expression gets the validation expression for the column:

string ls_valid

ls_valid = dw_composite.Object.rpt_employee.&

        Object.emp_id.Validation

Example 2  In a Composite DataWindow, one of the reports rpt_1 has a graph gr_1. This example turns on grid lines for the category axis of that graph. The example sets an instance variable to a default value of "not found." If the expression fails and triggers the Error event, the ExceptionSubstituteReturnValue! action causes the text "not found" to be returned so that the second assignment succeeds:

is_dwvalue = "not found"

dw_1.Object.rpt_1.Object.&

        gr_1.Category.MajorGridline = 5

st_status.Text = dw_1.Object.rpt_1.Object.&

        gr_1.Category.MajorGridline

The script for the Error event includes these lines:

action = ExceptionSubstituteReturnValue!

returnvalue = is_dwvalue

Example 3  Suppose that a DataWindow called dw_emp is a base report with employee information. The detail band includes a nested report of salary history called rpt_salary. This means there is a separate report with its own properties in each row.
The script checks whether the employee belongs to management (the value in the rank column in the base report is M). If so, the script assigns a DataWindow expression to the Color property of the salary column in the rpt_salary nested report. The expression highlights salaries that are over $60,000 in red.

Another statement sets the salary column's Mode property so the color change will be visible:

integer li_row

FOR li_row = 1 to RowCount( )

        IF dw_emp.Object.rank.Primary[li_row] = "M" THEN

         dw_emp.Object.rpt_salary[li_row].Object.&

            salary.Background.Color = &

            '255 ~t If(salary > 60000, 255, 0)'

         dw_emp.Object.rpt_salary[li_row].Object.&

            salary.Background.Mode = 0

        END IF

NEXT

Example 4  In this example there is a graph in the summary band of a base report called dw_emp. The graph is a nested report called rpt_graph_salaries. Although the graph is not related to a particular row, you still need to provide the row number associated with the summary band when you refer to its properties. This statement turns on autoscaling for the values axis:

dw_emp.Object.rpt_graph_salaries.Object.&

        gr_1.Values.AutoScale = 1

Example 5  If a column has a DropDownDataWindow edit style, there are properties that affect the column's appearance. Using nested object syntax, you can also change properties of the child DataWindow for the column. In this example, the DataWindow dw_gift allows a clerk at a nonprofit organization to record donations. The clerk can pick a standard donation amount from a drop-down DataWindow.
This example makes the drop-down DataWindow column called amount a required value and changes the display format for the dollars column in the child DataWindow:

dw_gift.Object.amount.dddw.Required = "Yes"

dw_gift.Object.amount.Object.dollars.Format = "$#,##0"


Tu dois donc tu peux (Kant)

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

Hors ligne

 

#42 07-05-2008 12:04:00

hellkinder  
Kinder Surprise
Award: chocomordutk6
Lieu: Bordeaux
Date d'inscription: 12-09-2006
Messages: 902
Pépites: 0
Banque: 10,524,230,367,490

Re: [RESOLU] Modifier un control d'un rapport, lui-même inclus dans un datawindow

En fait, ton report est dans la detail band, donc si ta dw retourne plusieurs row, il faut peut être indiquer le report de quel row tu veux modifier.

l'indice [1] signifie que tu vas toucher au champs texte du report du premier enregistrement.

donc si tu veux toucher à tous les reports, de chacun des enregistrements :

Code: pb

for i = 1 to dw_print.rowcount()
    dw_print.object.rpt_users[i].object.user_number_t.text = 'essai'
next


si tu as un seul report pour toute ta datawindow, met le dans la bande summury ou footer..

Enfin, je propose, je dis pas que ca marche...


http://img510.imageshack.us/img510/4229/userbar1204625572ha9.gif
"Pour la première fois dans l'histoire de l'humanité, tous les peuples de la Terre ne forment qu'un"

Hors ligne

 

#43 07-05-2008 12:07:09

hellkinder  
Kinder Surprise
Award: chocomordutk6
Lieu: Bordeaux
Date d'inscription: 12-09-2006
Messages: 902
Pépites: 0
Banque: 10,524,230,367,490

Re: [RESOLU] Modifier un control d'un rapport, lui-même inclus dans un datawindow

Chrnico a écrit:

Pour ce qui est de la syntaxe les deux sont bonne. Celle de hellkinder permet de modifier le contenu pour une instance (une ligne de la DW principale) de la DWC, ta syntaxe d'origine permet de modifier pour toutes les instances d'un coup. Le paramètre [row] est facultatif.

Tu es sûr que pour les reports, ça se comporte comme une colonne classique?
Perso, j'essairais quand même...pour ce que ca coute.. la petite boucle

Code: pb

if dw_print.rowcount() > 0 then
   for i = 1 to dw_print.rowcount()
       dw_print.object.rpt_users[i].object.user_number_t.text = 'essai'
   next
end if

http://img510.imageshack.us/img510/4229/userbar1204625572ha9.gif
"Pour la première fois dans l'histoire de l'humanité, tous les peuples de la Terre ne forment qu'un"

Hors ligne

 

#44 07-05-2008 12:08:30

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,775,808
Site web

Re: [RESOLU] Modifier un control d'un rapport, lui-même inclus dans un datawindow

Oui je suis sur

Préciser la ligne permet de faire des modifs différentes dans la DWC pour chaque ligne de la DW principale.
Dans son cas (traduction des labels), la modif est la même pour toutes les instances de la DWC.

Je pencherai plus pour un prob de runtime vu les dernières infos (fonction du poste) : la pbdwe par exemple...


Tu dois donc tu peux (Kant)

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

Hors ligne

 

#45 07-05-2008 12:59:06

Nyphel  
Membre Power Geek
Lieu: Grenoble
Date d'inscription: 06-05-2008
Messages: 253
Pépites: 12
Banque: 529,705,333,097,693

Re: [RESOLU] Modifier un control d'un rapport, lui-même inclus dans un datawindow

Et bien ma DW ne retourne qu'un seul row, donc ça ça va.
Merci beaucoup, j'y vois déjà beaucoup plus clair avec vos précisions

En effet, j'aurais peut-être du spécifier que ça plantait sur certaines machines et pas sur d'autres... Mais comme j'avais déjà eu une erreur similaire sur un cas plus simple que j'avais résolu avec un Modify(), j'étais persuadé qu'en fait le Modify() était la façon "propre" d'alterrer les propriétés des DW/Reports et qu'il fallait éviter les notations par points (dw.object.control.property). J'en avais donc déduis que c'était normal que ça lève l'erreur sur certains postes, en fonction des versions/environnements plus ou moins tatillons...

Hors ligne

 

#46 13-05-2008 08:04:48

Nyphel  
Membre Power Geek
Lieu: Grenoble
Date d'inscription: 06-05-2008
Messages: 253
Pépites: 12
Banque: 529,705,333,097,693

Re: [RESOLU] Modifier un control d'un rapport, lui-même inclus dans un datawindow

La solution finalement trouvée fut :

Code: pb

string ls_test
ls_test = dw_print.object.rpt_users[i].object.user_number_t.text
ls_test = 'huhu'
dw_print.object.rpt_users[i].object.user_number_t.text = ls_test


Oui... C'est étrange, mais ça fonctionne. Si quelqu'un sait pourquoi, ça m'intéresse
Merci pour le coup de main !

Hors ligne

 

#47 14-05-2008 17:34:56

Nyphel  
Membre Power Geek
Lieu: Grenoble
Date d'inscription: 06-05-2008
Messages: 253
Pépites: 12
Banque: 529,705,333,097,693

Re: [RESOLU] Modifier un control d'un rapport, lui-même inclus dans un datawindow

Après de nombreux tests, le problème ne s'avère pas résolu. Même cause, même symptômes :-/

J'ai donc décidé de remédier au problème en reprenant la fonction qui se charge normalement de faire ce travail pour les datawindows de l'application. Je rapelle que cette fonction récupère tous les objets de la datawindow et traduit/met à jour les labels en récupérant la bonne valeur dans la base de données. Toutefois cette fonction n'étant pas récursive, elle ne traduit pas les datawindows/reports qui sont eux-même inclus dans la datawindow en cours de traduction.
C'est pourquoi, jusqu'alors, j'essayais de traduire "directement" les noms de colonnes d'un rapport qui est inclus dans une datawindow, elle même dans une sheet.

La traduction se fait avec la fonction of_get_labels( datawindow à traduire, control lu, label du control).
Chaque control donc le nom se termine par "_t" est destiné à être traduit.

Voici donc la fonction qui traduit l'ensemble des labels des controls d'une datawindow :
of_translate_labels(ref datawindow ad_datawindow)

Code: pb

integer li_max
integer li_loop
string ls_object_text
integer li_object_tag
string ls_description
string ls_objectname[]
uo_base_string luo_string
integer li_datawindow_tag
string ls_translated_label

// is it useful to translate?
IF ii_targetlanguage = ii_defaultlanguage THEN RETURN


li_datawindow_tag = dec(ad_datawindow.tag)

ls_description = ad_datawindow.describe('dataWindow.Objects')
luo_string.of_parsetoarray(ls_description,'~t',ls_objectname)


li_max = upperbound(ls_objectname)

FOR li_loop=1 TO li_max

  ls_translated_label = space(255)
   IF right(ls_objectname[li_loop],2) = '_t' THEN
      
    li_object_tag = dec(ad_datawindow.describe(ls_objectname[li_loop]+'.tag'))
    ls_object_text = ad_datawindow.describe(ls_objectname[li_loop]+'.text')
    ls_translated_label = this.of_get_labels( li_datawindow_tag, li_object_tag, ls_object_text )
    IF trim(ls_translated_label) <> '' THEN ad_datawindow.Modify(ls_objectname[li_loop]+".text = '"+ls_translated_label+"'")
  END IF

NEXT


Maintenant je décide de modifier cette fonction pour qu'elle traite le cas particulier des controls dont le nom se termine par "_myt", et je renomme mon rapport "rpt_users" en "rpt_users_t".

Code: pb

integer li_max
integer li_loop
string ls_object_text
integer li_object_tag
string ls_description
string ls_objectname[]
uo_base_string luo_string
integer li_datawindow_tag
string ls_translated_label

// is it useful to translate?
IF ii_targetlanguage = ii_defaultlanguage THEN RETURN


li_datawindow_tag = dec(ad_datawindow.tag)

ls_description = ad_datawindow.describe('dataWindow.Objects')
luo_string.of_parsetoarray(ls_description,'~t',ls_objectname)


li_max = upperbound(ls_objectname)

FOR li_loop=1 TO li_max

  ls_translated_label = space(255)
   IF right(ls_objectname[li_loop],2) = '_t' THEN
      
    li_object_tag = dec(ad_datawindow.describe(ls_objectname[li_loop]+'.tag'))
    ls_object_text = ad_datawindow.describe(ls_objectname[li_loop]+'.text')
    ls_translated_label = this.of_get_labels( li_datawindow_tag, li_object_tag, ls_object_text )
    IF trim(ls_translated_label) <> '' THEN ad_datawindow.Modify(ls_objectname[li_loop]+".text = '"+ls_translated_label+"'")
    
  // --------------------------------------------------------------------------------------------------------------  
  ELSEIF right(ls_objectname[li_loop],4) = '_myt' THEN
    ...
  // --------------------------------------------------------------------------------------------------------------
  END IF

NEXT


Et je bloque là...
Je ne parviens pas à récupérer le rapport en tant qu'objet, pour le manipuler ensuite. Je pourrais ainsi rappeler cette fonction sur lui, pour traduire ses controls.

Le but serai de pouvoir faire ce genre de choses, ou bien même rappeler la fonction de façon récursive :

Code: pb

    string ls_my_description    
    ls_my_description = ls_objectname[li_loop].describe('dataWindow.Objects')

Il y a bien [ ad_datawindow.describe(ls_objectname[li_loop]+'.name') ] qui me retourne "rpt_users_myt", mais ensuite je souhaite accéder à cet objet. Je me suis tourné vers GetChild() sans succès.

J'ai bien conscience qu'il s'agit probablement d'un problème basique, mais pourriez-vous m'aider s'il vous plait ?

Dernière modification par Nyphel (14-05-2008 17:50:58)

Hors ligne

 

#48 14-05-2008 17:43:53

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5122
Pépites: 97,200
Banque: 2,147,483,647

Re: [RESOLU] Modifier un control d'un rapport, lui-même inclus dans un datawindow

je suppose que tu as essayé :

Code: pb

Integer li_ok
DataWindowChild dwc_nested

li_ok = ad_datawindow.GetChild( ls_objectname[li_loop], dwc_nested )

If li_ok = -1 Then MessageBox( 'Erreur', 'GetChild ' +  ls_objectname[li_loop] )

N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#49 14-05-2008 17:47:17

Nyphel  
Membre Power Geek
Lieu: Grenoble
Date d'inscription: 06-05-2008
Messages: 253
Pépites: 12
Banque: 529,705,333,097,693

Re: [RESOLU] Modifier un control d'un rapport, lui-même inclus dans un datawindow

Oui, ce qui me retourne bien l'erreur :-/

Hors ligne

 

#50 15-05-2008 09:43:09

Nyphel  
Membre Power Geek
Lieu: Grenoble
Date d'inscription: 06-05-2008
Messages: 253
Pépites: 12
Banque: 529,705,333,097,693

Re: [RESOLU] Modifier un control d'un rapport, lui-même inclus dans un datawindow

Puisque ça ne fonctionne pas dans ma fonction de traduction, je vais voir ce que je peux faire directement depuis ma sheet... Là où j'esssayais jusqu'alors d'accéder directement aux columns du rapport.

Code: pb

    Integer li_ok
    DataWindowChild dwc_rpt_users

    li_ok = dw_print.GetChild("rpt_users_myt", dwc_rpt_users )

    If li_ok = -1 Then 
      MessageBox( 'GetChild', 'ERREUR : GetChild du rapport ')
    else 
      MessageBox( 'GetChild', 'OK : GetChild du rapport  ')
      string ls_description
      ls_description = dwc_rpt_users.describe('dataWindow.Objects')
      messagebox("Describe dwc_rpt_users", ls_description)
    end if


Cela échoue aussi.
Toutefois - dans le doute et à l'encontre de ce qui est spécifié dans la documentation - j'ai passé ma datawindow (dw_print) et mon report (rpt_users/rpt_users_myt) en "composite" au lieu de "form/tabular"... Et là ça fonctionne. Toutefois il est à noter que :
- ça ne fonctionne toujours pas si je fais mon GetChild directement dans ma fonction de traduction
- ça fonctionne si je laisse mon report en "form/tabular" (donc seul ma datawindow (dw_print) est passée en composite

Je vais donc poursuivre dans cette voie, et voir jsuqu'où je peux aller... Mais déjà ceci ne fonctionne pas :

Code: pb

guo_message.Event ue_my_translate_datawindow(dwc_rpt_users)

Error C0174: Type of actual parameter cannot be ancestor of formal reference parameter type.
Comme conseillé plus haut, je vais déclarer un second argument à ma fonction, pour lui passer du DataWindowChild... Voir même une nouvelle fonction recevant en paramètre directement un DataWindowChild plutôt qu'un DataWindow.

Cette solution semble fonctionner, j'en saurai un peu plus demain après les tests multi-machines.

Dernière modification par Nyphel (15-05-2008 10:09:32)

Hors ligne

 
  • Index
  •  » Powerscripts
  •  » [RESOLU] Modifier un control d'un rapport, lui-même inclus dans un datawindow

Pied de page des forums

Propulsé par FluxBB 1.2.22