Dokumentowe podawki dohladować

Dohladowanje dokumentowych podawkow móže w slědowacych situacijach pomhać:

Nimo připokazowanja makrow k podawkam móžeće podawki dohladować, kotrež so přez dokumenty LibreOffice pušćeja. Sćelaki Nałoženskeje programowanskej tykački (API) su za wuwołanje podawkowych skriptow zamołwite. Na rozdźěl wot posłuchakow, kotrež dyrbja wšě podpěrane metody definować, samo hdyž so njewužiwaja, dokumentowe dohladowanja jenož dwě metodźe nimo podawkowych skriptow trjebaja.

Dokumentowe podawki dohladować

Dohladowanje so deleka za rěči Basic a Python z pomocu na objekt orientowaneho programowanja zwobraznjuje. Připokazowanje skripta OnLoad podawkej Open Document dosaha, zo by dohladowanje dokumentoweho podawka iniciěrowało a skónčiło. Wubjerće meni Nastroje – Přiměrić rajtark: Podawki, zo byšće wobaj skriptaj připokazał.

Wotpopadnjenje podawkow pomha, wuměnjenja skriptow nastajić, na přikład zo bychu so biblioteki zapřijimali a wuswobodźili abo so předźěłowanje skriptow w pozadku slěduje. Wužiwanje modula Access2Base.Trace druhi kontekst zwobraznjuje.

Z Python

Dohladowanje podawkow so wot objektowego instanciěrowanja započina a kónči so, hdyž Python objekt pušća. Wuwabjene podawki so z pomocu konsole Access2Base zdźěleja.

note

Podawkaj OnLoad a OnUnload datej so wužiwać, zo byštej šćežku programow Python nastajiłoj resp. zběhnyłoj. Wopisujetej so jako Dokument wočinić a Dokument začinjeny.



         # -*- 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):
             """ Dokumentowe podawki dohladować """
             '''
             po 'skripće Python za dohladowanje podawka OnSave' při
             https://forum.openoffice.org/en/forum/viewtopic.php?t=68887
             '''
             def __init__(self):
                 """ Monitor dokumentowych podawkow """
                 ''' rozprawa z konsolu Access2Base.Trace ABO
                 rozprawa w 1. špalće 1. tabele dokumentow Calc '''
                 ctx = uno.getComponentContext()
                 smgr = ctx.getServiceManager()
                 desktop = smgr.createInstanceWithContext(
                 'com.sun.star.frame.Desktop' , ctx)
                 self.doc = desktop.CurrentComponent
                 #self.row = 0 # wotstronja komentary jenož za dokumenty Calc
                 Console.setLevel("DEBUG")
                 self.listen() # Dohladowanje dokumentowych podawkow startować
             
             @property
             def Filename(self) -> str:
                 sys_filename = uno.fileUrlToSystemPath(self.doc.URL)
                 return os.path.basename(sys_filename)
             
             def setCell(self, calcDoc, txt: str):
                 """ Wudaćowe dokumentowe podawki w prěnjej špalće tabele Calc """
                 sheet = calcDoc.getSheets().getByIndex(0)
                 sheet.getCellByPosition(0,self.row).setString(txt)
                 self.row = self.row + 1
             
             def listen(self, *args): # OnLoad/OnNew najzašo
                 """ Dohladowanje dokumentowych podawkow startować """
                 self.doc.addDocumentEventListener(self)
                 Console.log("INFO", "Dokumentowe podawki so protokoluja", True)
             
             def sleep(self, *args): # OnUnload najpozdźe (opcionalne)
                 """ Dohladowanje dokumentowych podawkow zastajić """
                 self.doc.removeDocumentEventListener(self)
                 Console.log("INFO", "Dokumentowe podawki su so protokolowali", True)
             
             def documentEventOccured(self, event: DocumentEvent):
                 """ Wotpopadnje wšě dokumentowe podawki """
                 #self.setCell(event.Source, event.EventName) # jenož za dokumenty Calc
                 Console.log("DEBUG",
                     event.EventName+" in "+self.Filename,
                     False)
             
             def disposing(self, event: EventObject):
                 """ Wšě aktiwity dopušćić """
                 self.sleep()
                 Console.show()
             
         def OnLoad(*args): # Podawk 'Dokument wočinić'
             listener = UiDocument() # Iniciěruje dohladowanje
             
         def OnUnload(*args): # Podawk 'Dokument je so začinił'
             pass # (opcionalny) přewjedźeny, hdyž postajeny
             
         g_exportedScripts = (OnLoad,)
             
         from com.sun.star.script.provider import XScript
         class Console():
             """
             (Prědkowa/Pozadkowa) konsola za zdźělenje/protokolowanje programoweho wuwjedźenja.
             """
             @staticmethod
             def trace(*args,**kwargs):
                 """ Swobodnu lisćinu zapiskow do konsole wudać """
                 scr = Console._a2bScript(script='DebugPrint', module='Compatible')
                 scr.invoke((args),(),())
             @staticmethod
             def log(level: str, text: str, msgBox=False):
                 """ Ke konsoli protokolowu zdźělenku připowěsnyć, opcionalna wužiwarska namołwa"""
                 scr = Console._a2bScript(script='TraceLog')
                 scr.invoke((level,text,msgBox),(),())
             @staticmethod
             def setLevel(logLevel: str):
                 """ Delnju mjezu za protokolowu zdźělenku postajić """
                 scr = Console._a2bScript(script='TraceLevel')
                 scr.invoke((logLevel,),(),())
             @staticmethod
             def show():
                 """ Konsolowy wobsah/dialog pokazać """
                 scr = Console._a2bScript(script='TraceConsole')
                 scr.invoke((),(),())
             @staticmethod
             def _a2bScript(script: str, library='Access2Base',
                 module='Trace') -> XScript:
                 ''' Na nałoženju bazowany skript Basic wotwołać '''
                 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

Dźiwajće na wopak napisanu metodu documentEventOccured, kotraž pisanski zmylk wot nałoženskeje programowanskeje tykački (API) namrěwa.


Symbol Pokiw

Podawkaj Nałoženje startować a Nałoženje začinić móžetej šćežku Python za wužiwarske skripty abo skripty LibreOffice nastajić a zběhnyć. Na podobne wašnje dadźa so biblioteki abo module Python z podawkomaj Dokument wočinić a Dokument začinjeny zapřijeć a pušćić. Čitajće Module Python importować za dalše informacije.


Z LibreOffice Basic

Z pomocu menija Nastroje – Přiměrić rajtark: Podawki podawk Dokument wočinić inicializaciju Console Logger startuje. Rutina _documentEventOccured – postajena přez Console Logger – jako jónkróčny zastupny dypk słuži, zo by wšě dokumentowe podawki wotpopadnyła.

Modul controller.Events


        Option Explicit
        
        Global _obj As Object ' Instanca controller.ConsoleLogger
        
        Sub OnLoad(evt As com.sun.star.document.DocumentEvent) ' >> Dokument wočinić <<
            _obj = New ConsoleLogger : _obj.StartAdapter(evt)
        End Sub ' controller.OnLoad
        Sub _documentEventOccured(evt As com.sun.star.document.DocumentEvent)
            ''' Jónkróćny zastupny dypk za ConsoleLogger '''
             _obj.DocumentEventOccurs(evt)
        End Sub ' controller._documentEventOccured
      

Klasowy modul controller.ConsoleLogger

Dohladowanje podawkow so wot wokomika započina, w kotrymž so objekt ConsoleLogger instancuje a naposledk so ze začinjenjom dokumenta kónči. Rutina StartAdapter trěbne biblioteki Basic zapřijima, mjeztym zo so wotpopadnjene podawki z pomocu modula Access2Base.Trace zdźěleja.


          Option Explicit
          Option Compatible
          Option ClassModule
              
          ' Naćiskowy mustrowy objekt ADAPTER, kotryž so ma w podawku „Dokument wočinić“ instancować
          Private Const UI_PROMPT = True
          Private Const UI_NOPROMPT = False ' Na True nastajić, zo bychu so dokumentowe podawki wizualizowali
              
          ' ČŁONOJO
          Private _evtAdapter As Object ' com.sun.star.document.XDocumentEventBroadcaster
          Private _txtMsg As String ' tekstowa zdźělenka za protokolowanje w konsoli
              
          ' KAJKOSĆE
          Private Property Get FileName As String
              ''' Wot systema wotwisne datajowe mjeno '''
              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
              
          ' METODY
          Public Sub DocumentEventOccurs(evt As com.sun.star.document.DocumentEvent)
              ''' Dokumentowe podawki dohladować '''
              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)
              ''' Protokolowanje dokumentowych podawkow inicializować '''
              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 & "Dokumentowe podawki so protokoluja", 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)
              ''' Protokolowanje dokumentowych podawkow skónčić '''
              ThisComponent.removeDocumentEventListener( _evtAdapter )
              If IsMissing(evt) Then _txtMsg = "" Else _txtMsg = evt.EventName & "-"
              Access2Base.Trace.TraceLog("INFO", _txtMsg & "Dokumentowe podawki su so protokolowali", UI_PROMPT)
              Access2Base.Trace.TraceConsole() ' Dialog wotpopadnjenych podawkow
          End Sub ' controller.ConsoleLogger._StopAdapter
              
          ' PODAWKI
          ' Waš kod za předźěłane podawki je tu
      
warning

Dźiwajće na wopak napisanu metodu _documentEventOccured, kotraž pisanski zmylk wot nałoženskeje programowanskeje tykački (API) namrěwa.


Dokumentowe podawki namakać

Objekt Broadcaster API lisćinu podawkow k dispoziciji staja, za kotruž je zamołwity:

Z Python


         # -*- coding: utf-8 -*-
         from __future__ import unicode_literals
             
         import uno, apso_utils as ui
             
         def displayAvailableEvents():
             """ Dokumentowe podawki pokazać """
             '''
             adaptowany wot DisplayAvailableEvents() wot A. Pitonyaka
             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

Rozšěrjenje Alternative Python Script Organizer (APSO) so wužiwa, zo by podawkowe informacije na wobrazowce renderowało.


Z LibreOffice Basic


         Sub DisplayAvailableEvents
             """ Dokumentowe podawki pokazać """
             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
      

Prošu podpěrajće nas!