[Résolu][Writer] Extension : analyse ouverture de fichiers

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 !
chbok
Membre lOOyal
Membre lOOyal
Messages : 45
Inscription : 03 déc. 2013 15:26

[Résolu][Writer] Extension : analyse ouverture de fichiers

Message par chbok »

Bonjour,
Je cherche à savoir s'il est possible pour une extension de surveiller les ouvertures de fichiers d'un utilisateur, afin de "réagir" (boite de dialogue par exemple) lorsque des mots clés y sont présents ?

Une extension permet d'ajouter un menu contextuel ou de modifier les préférences. Je ne souhaite pas modifier de force "l'action assignée" de l'évènement "Chargement du document terminé".

Est-ce possible ?
Dernière modification par chbok le 13 déc. 2016 09:02, modifié 1 fois.
Version Libo (imposée) 7.3.7.2.M8 (x64) - Win 10
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 26195
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Writer] Extension : analyse ouverture de fichiers

Message par Dude »

Salut,
chbok a écrit :une extension de surveiller les ouvertures de fichiers d'un utilisateur,
Le processus d'E/S est assuré par le système d'exploitation.
Donc, je ne vois pas trop ce que Writer vient faire là-dedans.
chbok
Membre lOOyal
Membre lOOyal
Messages : 45
Inscription : 03 déc. 2013 15:26

Re: [Writer] Extension : analyse ouverture de fichiers

Message par chbok »

Salut,
Je ne parlais pas d'une surveillance de tous les fichiers de l'OS, uniquement de pouvoir exécuter une action macro après que l'utilisateur ait ouvert un document ODT (Writer) et que celui-ci contiennent certains mots. Ma question porte bien sur une extension de Writer pouvant (ou non) répondre à ce besoin.

Peut être ai-je mal formulé ma question ?
Version Libo (imposée) 7.3.7.2.M8 (x64) - Win 10
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 18:07
Localisation : Guyane

Re: [Writer] Extension : analyse ouverture de fichiers

Message par Piaf »

Bonjour
Sans extension, une simple macro dans Mes macros > Standard affectée à l'évènement Ouvrir le document de Libre Office devrait faire l'affaire.

Code : Tout sélectionner

	oDoc = thisComponent
	If Right(odoc.Title,3) = "odt" Then
		Dim Recherche As Object, motCle as String, trouv As Variant
		Recherche = oDoc.createSearchDescriptor
		motCle = "Test"
		With Recherche
			.SearchString = motCle
			.SearchWords = true
		End With
		trouv = oDoc.findAll(Recherche)
		If trouv.Count > 0 Then MsgBox "Bonjour"
	End if
A tester.
A+
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
chbok
Membre lOOyal
Membre lOOyal
Messages : 45
Inscription : 03 déc. 2013 15:26

Re: [Writer] Extension : analyse ouverture de fichiers

Message par chbok »

Merci Piaf,
Je n'ai pas de difficulté pour le script de recherche.
Comme je l'indiquais, ma question porte vraiment sur une extension qui doit pouvoir surveiller chaque ouverture de fichiers, sans modifier manuellement les paramètres des évènements de libreoffice.
Si j'arrive à passer cette étape, je pourrai finir mon projet qui concerne plusieurs personnes (d'où une extension). En fait, je ne sais pas si c'est possible ou non !
Version Libo (imposée) 7.3.7.2.M8 (x64) - Win 10
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 07:26

Re: [Writer] Extension : analyse ouverture de fichiers

Message par Hubert Lambert »

Bonjour,

Pour réagir à un événement global, il faut :
- définir et enregistrer un service qui implémente la fonction "execute" de l'interface com.sun.star.task.XJob ou la fonction "executeAsync" de l'interface com.sun.star.task.XAsyncJob;
- définir un fichier de configuration "job.xcu" qui fera le lien entre ce service et le ou les événements auxquels on souhaite réagir.
Un bon exemple d'extension de ce type est ImpressRunner.

Dans ton cas, le fichier d'implémentation (en python) pourrait ressembler à ceci :

Code : Tout sélectionner

import unohelper

from com.sun.star.task import XJob
from com.sun.star.awt.MessageBoxType import MESSAGEBOX, INFOBOX, ERRORBOX, WARNINGBOX, QUERYBOX

implementation_name = "org.chbok.TestOnLoad"

class TestOnLoad(unohelper.Base, XJob):
    def __init__ (self, ctx):
        self.ctx = ctx
    def createUnoService(self, service):
        return self.ctx.ServiceManager.createInstanceWithContext(service, self.ctx)
    def msgbox(self, message, titre="Message", boxtype='message', boutons=1):
        types = {'message': MESSAGEBOX, 'info': INFOBOX, 'error': ERRORBOX,
                 'warning': WARNINGBOX, 'query': QUERYBOX}
        tk = self.createUnoService("com.sun.star.awt.Toolkit")
        win = self.createUnoService("com.sun.star.frame.Desktop").getCurrentFrame().ContainerWindow
        box = tk.createMessageBox(win, types[boxtype], boutons, titre, message)
        return box.execute()
    def execute(self, args):
        desktop = self.createUnoService("com.sun.star.frame.Desktop")
        doc = desktop.CurrentComponent
        url = unohelper.fileUrlToSystemPath(doc.URL)
        if doc:
            self.msgbox("Vous accédez au document\n< {} >".format(url))

g_ImplementationHelper = unohelper.ImplementationHelper()
g_ImplementationHelper.addImplementation (TestOnLoad,
                    implementation_name,
                    (implementation_name,))
et le job.xcu à ceci :

Code : Tout sélectionner

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE oor:component-data SYSTEM "../../../../component-update.dtd">
<oor:component-data oor:name="Jobs" oor:package="org.openoffice.Office" xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
  <node oor:name="Jobs">
    <node oor:name="org.chbok.TestOnLoad.Job" oor:op="fuse">
      <prop oor:name="Service">
        <value>org.chbok.TestOnLoad</value>
      </prop>
    </node>
  </node>
  <node oor:name="Events">
    <node oor:name="OnLoad" oor:op="fuse">
      <node oor:name="JobList">
        <node oor:name="org.chbok.TestOnLoad.Job" oor:op="fuse"/>
      </node>
    </node>
  </node>
</oor:component-data>
Je joins un oxt test pour illustrer la chose.
Cordialement.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
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)
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 26195
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Writer] Extension : analyse ouverture de fichiers

Message par Dude »

Hubert Lambert a écrit :Dans ton cas, le fichier d'implémentation (en python) pourrait ressembler à ceci
A priori, la question est posée pour du Basic.
Ce langage ne supporte pas l'implémentation de service.
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 07:26

Re: [Writer] Extension : analyse ouverture de fichiers

Message par Hubert Lambert »

L'auteur du fil sera peut-être heureux de savoir qu'une solution existe, même en dehors du basic...
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)
chbok
Membre lOOyal
Membre lOOyal
Messages : 45
Inscription : 03 déc. 2013 15:26

Re: [Writer] Extension : analyse ouverture de fichiers

Message par chbok »

Hubert Lambert a écrit :L'auteur du fil sera peut-être heureux de savoir qu'une solution existe, même en dehors du basic...
Bonjour,

Oui, tout a fait heureux. Je ne savais si c'était possible ou non, maintenant je vais pouvoir creuser le sujet, et bien sur l'adapter en Basic (Edit : arg, je viens de lire cette phrase moins optimiste pour moi : Ce langage ne supporte pas l'implémentation de service.).
Merci de m'avoir aiguiller.
(Je vais clore le sujet même si je n'ai pas une solution en Basic)
Version Libo (imposée) 7.3.7.2.M8 (x64) - Win 10