[Résolu][Base] lister ensemble des macros utilisées

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
CrazyDams
Membre lOOyal
Membre lOOyal
Messages : 34
Inscription : 27 août 2018 06:54

[Résolu][Base] lister ensemble des macros utilisées

Message par CrazyDams »

Bonjour à toutes et à tous,

A force de créer des macros à tout va dans ma base, je fini par perdre le fil. Du coup, j'aurais souhaité savoir s'il existe un moyen de lister l'ensemble des macros mais surtout de savoir à quel endroit elles sont utilisées.
Par exemple quelque chose comme : Macro1 de la bibliothèque Biblio1 de la base1 est utilisée avec le champ1 du formulaire2 ainsi qu'avec le champ4 du sous-formulaire10 et çà pour l'ensemble des macros de ma base.

Il y a bien outils>macros>OpenOffice Basic... où je trouve l'ensemble de mes bibliothèques avec les macros mais je ne trouve rien qui me disent à quoi elles sont rattachées.

Une solution miracle ? :D

Merci d'avance pour votre aide.
Dernière modification par CrazyDams le 12 sept. 2018 11:57, modifié 1 fois.
Apache OpenOffice 4.1.5
Windows 8.1 64 bits
Avatar de l’utilisateur
martinbrait
InconditiOOnnel
InconditiOOnnel
Messages : 753
Inscription : 09 avr. 2013 07:15
Localisation : T'as pas dit bonjour, merci et à bientot !

Re: [Base] lister ensemble des macros utilisées

Message par martinbrait »

Bonjour CrazyDams,

Bonne idée,
Cela démontre que tu es allé loin avec base.
L'outil dont tu parles est effectivement très intéressant,
mais il doit être entièrement codé, il me semble,
pour répondre à ce niveau de service.

Une fois réalisé, à placer certainement dans les "best-of"
Qui en a le courage ??
LibreOffice version 5.4.7.2.M6 (x64)
Windows 10
+
LibreOffice version 5.4.7.2.M6 (x64)
Windows 7

#HSQL Database Engine 1.8.0
version=1.8.0

Locale : fr-FR (fr_FR)

Obligation de version


Bonjour, merci et à bientôt !
CrazyDams
Membre lOOyal
Membre lOOyal
Messages : 34
Inscription : 27 août 2018 06:54

Re: [Base] lister ensemble des macros utilisées

Message par CrazyDams »

Bonjour Martinbrait,

En fait je m'en sentirais bien le courage, le seul souci est que je ne sais pas où trouver certaines informations. Ma seule piste pour le moment est que j'arrive à trouver l'ensemble des modules contenu dans la bibliothèque "Standard" de ma base grâce au code suivant et au plus qu'utile xray :

Code : Tout sélectionner

xray basiclibraries.getbyname("Standard").elementnames
Ensuite, lorsque je sélectionne mon module avec getbyname et toujours xray, j'obtiens le code contenu dans ce module, sans aucune propriété ni rien. Donc pour le moment, je ne sais pas trouver les macros par programmation.

Ce qu'il me faudrait ensuite, c'est l'endroit où est stockée l'information de l'association d'une macro avec un événement d'un contrôle en particulier dans un formulaire. Par exemple, j'ai associé une macro avec l’événement "modifié" d'une zone de liste. Je me disais que peut-être dans les propriétés de cette zone de liste on pouvait trouver quelque chose avec la méthode getproperty, mais je ne sais pas l'utiliser ni même si je suis sur la bonne voie.

Donc en attendant les lumières de quelqu'un de plus compétent que moi en la matière, je continue à creuser :lol:

Je viens de trouver une piste intéressante. J'ai écrit le code suivant dans une macro :

Code : Tout sélectionner

xray thiscomponent.currentcontroller.model.events.getbyname("OnStartApp")
Au départ cela m'a affiché "Donnée vide (empty)" et comme je ne savais pas ce que cela ouvrait j'ai tenté d'assigner une macro à l'événement "Démarrer l'application" du menu "personnalisé"

Là j'ai relancé ma macro et... surprise, j'ai obtenu ce qui s'affiche sur l'image jointe, à savoir un "EventType" et un "Script"

Donc il y a du progrès, mais je ne sais pas quoi faire de çà... en plus cela ne concerne que le document dans sa globalité... il faudrait arriver à faire la même chose pour chaque formulaire et chaque contrôle de formulaire...
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Apache OpenOffice 4.1.5
Windows 8.1 64 bits
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 18:07
Localisation : Guyane

Re: [Base] lister ensemble des macros utilisées

Message par Piaf »

Bonsoir
martinbrait a écrit :Qui en a le courage ??
Pourquoi pas toi :roll:
Un petit exemple des plus simples.

Code : Tout sélectionner

Sub listerEvents
	oDoc = thiscomponent
	oForm = oDoc.DrawPage.Forms(0)
	txt = "Formulaire : " & oForm.Name & Chr(13)
	For i = 0 to oForm.Count -1
		txt = txt & "Contrôle : " & oForm.ControlModels(i).Name & Chr(13)
		oEvent = oForm.getScriptEvents(i)
		For n = 0 To Ubound(oEvent)
			txt = txt & "Type listener : " & oEvent(n).ListenerType & " ;  Méthode : "  & oEvent(n).EventMethod & Chr(13)
			Decoupe = Split(oEvent(n).ScriptCode,"?")(0)
			suivant = Split(decoupe(1),":")(1)
			txt = txt & "Librairie : " & Split(Suivant,".")(0) & " ; Module : " & Split(Suivant,".")(1) & " ; Macro : " & Split(Suivant,".")(2) & chr(13)
		Next n	
	Next i
   msgBox txt
End Sub
Pour tester, tu ouvres le formulaire fAdhs et tu appuies sur le bouton Evenements
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
Avatar de l’utilisateur
DLE
SuppOOrter
SuppOOrter
Messages : 1477
Inscription : 30 déc. 2007 18:56
Localisation : Lille

Re: [Base] lister ensemble des macros utilisées

Message par DLE »

Bonjour,

Ayant eu ce problème il y a quelques années, j'ai fait cette petite extension qui liste tous les scripts contenus dans un fichier ODB. Cette extension fonctionne avec AOo 330 et supérieur.
Il faut que la base soit enregistrée, la liste (ListeDesScripts.txt) sera dans le dossier Temp défini dans les options de AOo (Chemins).
Pour l'exécution, vous ouvrez votre fichier ODB, puis
Outils>Macro>Exécuter la macro>MesMacros>ListesDesScripts>a_Formulaire>>Main
....un message est émis à la fin de l'exécution.

Cdlt.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
MacOS Sonoma 14.4.1 (iMac-Intel) : AOO 4.1.15 , LibreOffice 7.6.5.2, Adoptium-temurinJDK_1.8.0_402 -
Windows 10 64 bits :
AOO 4.1.15, Libreoffice 7.1.8.1 - FireFox, Thunderbird, ORB 1.2.1
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 07:26

Re: [Base] lister ensemble des macros utilisées

Message par Hubert Lambert »

Bonjour,
[b][color=#FF8000]DLE[/color][/b] a écrit :j'ai fait cette petite extension qui liste tous les scripts contenus dans un fichier ODB
Impeccable !
[b]CrazyDams[/b] a écrit :j'aurais souhaité savoir s'il existe un moyen de lister l'ensemble des macros
La méthode "getScriptProvider" du composant de base (thisComponent en général) renvoie une instance du service com.sun.star.script.provider.MasterScriptProvider, qui, via sa méthode "getChildNodes", permet de parcourir récursivement toutes les macros (tous langages confondus) du document. C'est le même service qui est utilisé en interne pour afficher l'arbre des macros dans le gestionnaire de macros.

Cordialement.
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 18:07
Localisation : Guyane

Re: [Base] lister ensemble des macros utilisées

Message par Piaf »

Bonjour
[color=#FF8000][b]DLE[/b][/color] a écrit :j'ai fait cette petite extension qui liste tous les scripts contenus dans un fichier ODB
:bravo: :bravo:
A+
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
CrazyDams
Membre lOOyal
Membre lOOyal
Messages : 34
Inscription : 27 août 2018 06:54

Re: [Base] lister ensemble des macros utilisées

Message par CrazyDams »

Merci à vous tous !!!
exactement ce qu'il me fallait :bravo:
Je savais bien qu'il y avait du script et du event dans l'air :lol:
Apache OpenOffice 4.1.5
Windows 8.1 64 bits