Formulaires avec la propriété "ImplementationName" différentes?

Bonjour,
J’ai écris une macro affectée à un bouton qui permet d’ouvrir un formulaire dont le nom se trouve dans la propriété “Complément d’information” (Tag) du bouton.

oForm = ThisDataBaseDocument.FormDocuments.getByName(sForm).Open
wait 100
xray oForm
oForm = oForm.CurrentController
oFrame= oForm.Frame
oCW = oFrame.ContainerWindow

le .CurrentController fonctionne pour les formulaires ayant la propriété “ImplementationName” = “swXTextDocument” mais pas pour ceux dont la propriété = “com.sun.star.comp.form.ODatabaseForm”
Je ne comprend pas cette différence de type de “stockage”.
Comment faire pour que tous mes formulaires aient le même “ImplementationName” ?
Ce lien https://ask.libreoffice.org/t/thisdatabasedocument-vs-thiscomponent/25373
Ne m’apporte pas de réponse
Merci pour vos réponses

Bonjour @reginacoco

Pourrais-tu donner un contexte précis où tu as ce problème ? On obtient par ex. cette valeur pour ImplementationName lors de l’ouverture d’un document writer comprenant un formulaire.

Et que veux-tu faire exactement ?

Cordialement

Bonjour @PYS
Voici une base test
Test_Formulaires.odb (76.7 KB)
Tous mes formulaires sont basés sur des documents writer…
Charge au préalable xRay
Il faut ouvrir le formulaire frmMenu.
chaque bouton ouvre un formulaire à travers une sub (ouvrirformpartag).
Quand j’ai ouvert le tropic j’avais un problème car le formulaire frmFacturation ne souvrait pas en swXTextDocument et donc l’instruction “sTag = oEvt.Source.Model.Tag” de la procédure se plantait.
En vérité je n’arrive plus à reproduire le phénomène :smirk:
Par contre dans le formulaire frmTiers quand je lance la procédure de vérification de saisie “VerifierTiers” je suis obligé de tester le ImplementationName car la procédure tourne 2 fois !??
une fois avec org.openoffice.comp.svx.FormController(
une fois avec com.sun.star.comp.forms.ODatabaseForm
Ce qui semble normal !??
Mais ça remet en cause l’instruction oDetail =oEvt.Source.Model qui ne fonctionne plus avec
com.sun.star.comp.forms.ODatabaseForm :thinking:
Je ne devrait peut-être pas utiliser oEvt.Source.Model pour récupérer mes contrôles de formulaire ?

A bientôt

J’utilise mri qui correspond mieux à mon usage (ce qui n’enlève rien à la qualité de xray)

Ok :slightly_smiling_face:

Oui puisque dans le deuxième cas ( ODatabaseForm) tu as directement le model. Mais je ne vois pas où est le problème puisque tu testes justement, donc tu peux adapter.

En revanche, pour info. il manque un t à oEvt dans ta procédure

Sub PrenomSaisi(oEv As Object)

Cordialement

oui je peux adapter mais je trouve pas ça très efficace.
Je viens de faire un essai qui me permet de m’affranchir de ce test suite aux observations de Mike Kaganski
au lieu de remonter la recherche des contrôles à partir oEvt.Source il suffit de faire
oDetail = ThisComponent.DrawPage.Forms.getByName(“fChoix”).getByName(“sfDetail”)
Comme ça on va directement au bon sous formulaire et on reste dans swxTextDocument.
et ça marche … :grinning:

C’est pas grave puisque c’est un Private.

“Descendre” depuis thiscomponent est efficace… “Remonter” depuis l’événement l’est aussi, en particulier lorsque le traitement s’applique au contrôle appelant.
Naturellement plus on doit “remonter” moin c’est efficace :slight_smile:

Euh… ce ne serait pas grave si tu employais le même nom de variable dans la procédure :slight_smile:

1 Like