Lytte til dokumenthendelser

Å lytte til dokumenthendelser kan hjelpe i følgende situasjoner:

Ved siden av tilordne makroer til hendelser , kan man overvåke Collabora Office-dokumenthendelser. Applikasjonsprogrammeringsgrensesnitt (API) kringkastere er ansvarlige for å kalle opp hendelsesskript. I motsetning til lyttere som må ha definert alle støttede metoder, selv om de ikke brukes, krever dokumentovervåkere bare to metoder ved siden av lenkede hendelseskript.

Overvåking av dokumenthendelser

Overvåking vises her for Basic- og Python-språkene ved bruk av objektorientert programmering. Å tilordne OnLoad-skript til Open Document-hendelsen, er tilstrekkelig for å starte og avslutte dokumenthendelsesovervåking. Verktøy - Tilpass-menyen Hendelser brukes til å tilordne begge skriptene.

Avlytting av hendelser hjelper til med å sette skript pre og post betingelser, for eksempel lasting og lossing av biblioteker eller spor av skriptbehandling i bakgrunnen. Access2Base.Trace modulbruk viser den andre konteksten.

Med Python

Overvåkning av hendelser starter fra objektinstansering og stopper til slutt når Python slipper objektet. Hevede hendelser rapporteres ved å bruke Access2Base konsollen.

note

OnLoad og OnUnload hendelser kan brukes til å henholdsvis sette og deaktivere Python-programbanen. De beskrives som Åpne dokument og Dokument lukket.


# -*- coding: utf-8 -*-
from __future__ import unicode_literals

import os.path, uno, unohelper
from com.sun.star.document import DocumentEvent, \
    XDocumentEventListener as AdapterPattern
from com.sun.star.lang import EventObject

class UiDocument(unohelper.Base, AdapterPattern):
    ""Overvåk dokumenthendelser""
    '''
    tilpasset fra 'Python script for å overvåke OnSave event' ved
    https://forum.openoffice.org/en/forum/viewtopic.php?t=68887
    '''
    def __init__(self):
        "" "Overvåkning av dokumenthendelser" ""
        '' 'rapport ved bruk av Access2Base.Sporings-konsoll ELLER
        rapport i 1. ark, første kolonne for Calc-dokumenter '''
        ctx = uno.getComponentContext()
        smgr = ctx.getServiceManager()
        desktop = smgr.createInstanceWithContext(
        'com.sun.star.frame.Desktop' , ctx)
        self.doc = desktop.CurrentComponent
        #self.row = 0   # avkommenter for Calc-dokumenter
        Console.setLevel("DEBUG")
        self.listen ()    # Begynn å overvåke dok. hendelser

    @property
    def Filename(self) -> str:
        sys_filename = uno.fileUrlToSystemPath(self.doc.URL)
        return os.path.basename(sys_filename)

    def setCell(self, calcDoc, txt: str):
        """Output doc. Hendelser i første kolonne i et Calc regneark" ""
        sheet = calcDoc.getSheets().getByIndex(0)
        sheet.getCellByPosition(0,self.row).setString(txt)
        self.row = self.row + 1

    def listen (self, * args):    # OnLoad / OnNew tidligst
        """Start dokument. Overvåkning av hendelser"""
        self.doc.addDocumentEventListener(self)
        Console.log ("INFO", "Dokumenthendelser logges", Aktiv)

    def sov(selv, * args): # OnUnload senest (valgfritt)
        """ Stopp dok.-hendelsesovervåking """
        self.doc.removeDocumentEventListener(self)
        Konsoll.log ("INFO", "Dokumenthendelser er logget", Sant)

    def documentEventOccured(self, event: DocumentEvent):
        """ Oppfanger alle dok- hendelser """
        #self.setCell(event.Source, event.EventName) # kun for Calc-dokument
        Console.log("DEBUG",
            event.EventName+" in "+self.Filename,
            False)

    def disposing(self, event: EventObject):
        """ Frislipp alle aktiviteter """
        self.sleep()
        Console.show()

def OnLoad(*args):  # 'Open Document'-hendelse
    lytter = UiDocument() # Starter lytting

def OnUnload(*args):  # «Dokument har blitt lukket»-hendelse
    send # (valgfritt) utført når det avsluttes

g_exportedScripts = (OnLoad,)

from com.sun.star.script.provider import XScript
class Console():
    """
    (Bak/For) grunnkonsoll for å rapportere / logge programkjøring.
    """
    @staticmethod
    def trace(*args,**kwargs):
        """Skriv ut frie gjenstandsliste til konsollen"""
        scr = Console._a2bScript(script='DebugPrint', module='Compatible')
        scr.invoke((args),(),())
    @staticmethod
    def log(level: str, text: str, msgBox=False):
        """Legg loggmelding til konsollen, valgfri brukerspørring """
        scr = Console._a2bScript(script='TraceLog')
        scr.invoke((level,text,msgBox),(),())
    @staticmethod
    def setLevel(logLevel: str):
        """Sett nedre grense for loggmeldinger """
        scr = Console._a2bScript(script='TraceLevel')
        scr.invoke((logLevel,),(),())
    @staticmethod
    def show():
        """ Vis konsollinnhold/dialog """
        scr = Console._a2bScript(script='TraceConsole')
        scr.invoke((),(),())
    @staticmethod
    def _a2bScript(script: str, library='Access2Base',
        module='Trace') -> XScript:
        ''' Ta tak i applikasjonsbasert Basic skript '''
        sm = uno.getComponentContext().ServiceManager
        mspf = sm.createInstanceWithContext(
            "com.sun.star.script.provider.MasterScriptProviderFactory",
            uno.getComponentContext())
        scriptPro = mspf.createScriptProvider("")
        scriptName = "vnd.sun.star.script:"+library+"."+module+"."+script+"?language=Basic&location=application"
        xScript = scriptPro.getScript(scriptName)
        return xScript
warning

Husk den feilstavede metoden documentEventOccured som arver en skrivefeil fra Collabora Office Application Programming Interface (API).


Tipsikon

Hendelser som Start applikasjon og Lukk applikasjon kan brukes til å aktivere og deaktivere Python-bane for brukerskript eller Collabora Office-skript. På lignende måte kan dokumentbaserte Python-biblioteker eller -moduler lastes og frigis ved å bruke Åpne dokument og Dokument lukket-hendelser. Se Importere Python-moduler for mer informasjon.


Med Collabora Office Basic

Ved å bruke Verktøy - Tilpass -menyen Events -fanen, utløser Åpne dokument hendelsen en Konsoll-Logger initialisering. _documentEventOccured rutine - angitt av ConsoleLogger - fungerer som et unikt inngangspunkt for å fange alle dokumenthendelser.

controller.Hendelsesmodul

Option Explicit

Global _obj As Object ' controller.ConsoleLogger instans

Sub OnLoad(evt As com.sun.star.document.DocumentEvent) ' >> pne Dokument <<
    _obj = New ConsoleLogger : _obj.StartAdapter(evt)
End Sub ' controller.OnLoad
Sub _documentEventOccured(evt As com.sun.star.document.DocumentEvent)
    '' 'ConsoleLogger unikt inngangspunkt' ''
     _obj.DocumentEventOccurs(evt)
End Sub ' controller._documentEventOccured

controller. ConsoleLogger -klassemodul

Hendelsesovervåking starter fra det øyeblikket et ConsoleLogger -objekt blir instantiert og stopper til slutt, når dokumentet lukkes. StartAdapter rutine laster nødvendige grunnleggende biblioteker, mens oppfangede hendelser rapporteres ved hjelp av Access2Base.Trace -modulen.

Option Explicit
Option Compatible
Option ClassModule

' ADAPTER design mønster objekt som skal instantieres i "Open Document" hendelse
Private Const UI_PROMPT = True
Privat Const UI_NOPROMPT = False 'Sett den til True for å visualisere dokumenthendelser

' MEDLEMMER
Private _evtAdapter As Object ' com.sun.star.document.XDocumentEventBroadcaster
Privat tekstmelding for _txtMsg As String for å logge i konsollen

' EGENSKAPER
Private Property Get FileName As String
    ''' Systemavhengig filnavn '''
    Const _LIBRARY = "Tools" : With GlobalScope.BasicLibraries
        If Not .IsLibraryLoaded(_LIBRARY) Then .LoadLibrary(_LIBRARY)
    End With
    Filename = Tools.Strings.FilenameOutofPath(ThisComponent.URL)
End Property ' controller.ConsoleLogger.Filename

' METODER
Public Sub DocumentEventOccurs(evt As com.sun.star.document.DocumentEvent)
    ''' Overvåking av dokumenthendelser '''
    Access2Base.Trace.TraceLog("DEBUG", _
        evt.EventName &" in "& Filename(evt.Source.URL), _
        UI_NOPROMPT)
    Select Case evt.EventName
        Case "OnUnload" : _StopAdapter(evt)
    End Select
End Sub ' controller.ConsoleLogger.DocumentEventOccurs

Public Sub StartAdapter(Optional evt As com.sun.star.document.DocumentEvent)
    ''' Igangsetting av dokumenthendelseslogging '''
    Const _LIBRARY = "Access2Base" : With GlobalScope.BasicLibraries
        If Not .IsLibraryLoaded(_LIBRARY) Then .LoadLibrary(_LIBRARY)
    End With : Access2Base.Trace.TraceLevel("DEBUG")
    If IsMissing(evt) Then _txtMsg = "" Else _txtMsg = evt.EventName & "-"
    Access2Base.Trace.TraceLog ("INFO", _txtMsg og "Dokumenthendelser logges", UI_PROMPT)
    _evtAdapter = CreateUnoListener( "_", "com.sun.star.document.XDocumentEventListener" )
    ThisComponent.addDocumentEventListener( _evtAdapter )
End Sub ' controller.ConsoleLogger.StartAdapter

Private Sub _StopAdapter(Optional evt As com.sun.star.document.DocumentEvent)
    ''' Avslutt loggføring av dokumenthendelser '''
    ThisComponent.removeDocumentEventListener( _evtAdapter )
    If IsMissing(evt) Then _txtMsg = "" Else _txtMsg = evt.EventName & "-"
    Access2Base.Trace.TraceLog ("INFO", _txtMsg og "Dokumenthendelser er logget", UI_PROMPT)
    Access2Base.Trace.TraceConsole () 'Dialogbok for oppfangede hendelser
End Sub ' controller.ConsoleLogger._StopAdapter

' HENDELSER
' Koden din for håndterte hendelser lagres her
warning

Vær oppmerksom på den feilstavede metoden _documentEventOccured som arver en skrivefeil fra Collabora Office Application Programming Interface (API).


Oppdaging av dokumenthendelser

Kringkaster-API-objektet inneholder listen over hendelser den er ansvarlig for:

Med Python

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

import uno, apso_utils as ui

def displayAvailableEvents():
    "" "Vis dokumenthendelser" ""
    '''
    tilpasset fra DisplayAvailableEvents () av A. Pitonyak
    https://forum.openoffice.org/en/forum/viewtopic.php?&t=43689
    '''
    ctx = XSCRIPTCONTEXT.getComponentContext()
    smgr = ctx.ServiceManager
    geb = smgr.createInstanceWithContext(
        "com.sun.star.frame.GlobalEventBroadcaster", ctx)
    events = geb.Events.getElementNames()
    ui.msgbox('; '.join(events))

g_exportedScripts = (displayAvailableEvents,)
note

Alternativ Python Script Organizer (APSO) utvidelse brukes til å gjengi hendelsesinformasjon på skjermen.


Med Collabora Office Basic

Sub DisplayAvailableEvents
    '''Vis dokumenthendelser'''
    Dim geb As Object ' com.sun.star.frame.GlobalEventBroadcaster
    Dim events() As String
    geb = CreateUnoService("com.sun.star.frame.GlobalEventBroadcaster")
    events = geb.Events.ElementNames()
    MsgBox Join(events, "; ")
End Sub

Supporter oss!