Tulong sa LibreOffice 24.8
Ang pakikinig sa mga kaganapan sa dokumento ay makakatulong sa mga sumusunod na sitwasyon:
Tukuyin ang isang bagong dokumento sa oras ng pagbubukas, kumpara sa mga umiiral na, at magsagawa ng nakalaang setup.
Kontrolin ang pagproseso ng pag-save ng dokumento, pagkopya ng dokumento, pag-print o mga kahilingan sa mailmerge.
Muling kalkulahin ang talaan ng mga nilalaman, index o mga entry sa talahanayan ng isang dokumento ng Manunulat kapag isasara ang dokumento
Mag-import ng mga pakete ng math Python bago magbukas ng dokumentong Calc. Ilabas ang mga paketeng ito kapag nagsara ang dokumento.
Sa tabi pagtatalaga ng mga macro sa mga kaganapan , masusubaybayan ng isa ang mga kaganapang itinaas ng mga dokumento ng LibreOffice. Ang Application Programming Interface (API) broadcasters ay may pananagutan sa pagtawag sa mga script ng kaganapan. Hindi tulad ng mga tagapakinig na nangangailangang tukuyin ang lahat ng sinusuportahang pamamaraan, kahit na hindi ginagamit, ang mga monitor ng dokumento ay nangangailangan lamang ng dalawang pamamaraan sa tabi ng mga naka-hook na script ng kaganapan.
Ang pagsubaybay ay inilalarawan dito para sa Basic at Python na mga wika gamit ang object-oriented programming. Pagtatalaga OnLoad script, sa kaganapan, sapat na upang simulan at wakasan ang pagsubaybay sa kaganapan ng dokumento. menu tab ay ginagamit upang magtalaga ng alinman sa mga script.
Ang pagharang sa mga kaganapan ay nakakatulong sa pagtatakda ng mga script bago at pagkatapos ng mga kundisyon gaya ng pag-load at pag-unload ng mga library o pagsubaybay sa pagpoproseso ng script sa background. Access2Base.Trace Ang paggamit ng module ay naglalarawan sa pangalawang konteksto.
Ang pagsubaybay sa mga kaganapan ay nagsisimula sa object instantiation at sa huli ay hihinto kapag inilabas ng Python ang object. Iniuulat ang mga nakataas na kaganapan gamit ang Access2Base console.
OnLoad at OnUnload Maaaring gamitin ang mga kaganapan upang itakda at i-unset ang landas ng mga programa ng Python. Inilalarawan sila bilang at .
# -*- 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):
""" Subaybayan ang mga kaganapan sa dokumento """
'''
inangkop mula sa 'Python script upang subaybayan ang kaganapang OnSave' sa
https://forum.openoffice.org/en/forum/viewtopic.php?t=68887
'''
def __init__(self):
""" Subaybayan ang mga kaganapan sa dokumento """
''' ulat gamit ang Access2Base.Trace console O
ulat sa 1st sheet, 1st column para sa Calc docs '''
ctx = uno.getComponentContext()
smgr = ctx.getServiceManager()
desktop = smgr.createInstanceWithContext(
'com.sun.star.frame.Desktop' , ctx)
self.doc = desktop.CurrentComponent
#self.row = 0 # uncomment para sa mga dokumento ng Calc lamang
Console.setLevel("DEBUG")
self.listen() # Simulan ang pagsubaybay doc. mga pangyayari
@property
def Filename(self) -> str:
sys_filename = uno.fileUrlToSystemPath(self.doc.URL)
return os.path.basename(sys_filename)
def setCell(self, calcDoc, txt: str):
""" I-output ang mga kaganapan sa doc. sa 1st column ng isang Calc spreadsheet """
sheet = calcDoc.getSheets().getByIndex(0)
sheet.getCellByPosition(0,self.row).setString(txt)
self.row = self.row + 1
def listen(self, *args): # OnLoad/OnNew at the earliest
""" Simulan doc. pagsubaybay sa mga kaganapan """
self.doc.addDocumentEventListener(self)
Console.log("INFO", "Ini-log ang mga kaganapan sa dokumento", True)
def sleep(self, *args): # OnUnload sa pinakabago (opsyonal)
""" Ihinto doc. pagsubaybay sa mga kaganapan """
self.doc.removeDocumentEventListener(self)
Console.log("INFO", "Naka-log na ang mga kaganapan sa dokumento", True)
def documentEventOccured(self, event: DocumentEvent):
""" Hinahadlangan ang lahat ng doc. na kaganapan """
#self.setCell(event.Source, event.EventName) # para lang sa Calc docs
Console.log("DEBUG",
event.EventName+" in "+self.Filename,
False)
def disposing(self, event: EventObject):
""" Ilabas ang lahat ng aktibidad """
self.sleep()
Console.show()
def OnLoad(*args): # kaganapang 'Buksan ang Dokumento'
listener = UiDocument() # Nagsisimula ng pakikinig
def OnUnload(*args): # 'Nasarado na ang dokumento' na kaganapan
pass # (opsyonal) na ginawa kapag itinapon
g_exportedScripts = (OnLoad,)
from com.sun.star.script.provider import XScript
class Console():
"""
(Back/Fore)ground console para mag-ulat/mag-log sa pagpapatupad ng program.
"""
@staticmethod
def trace(*args,**kwargs):
""" I-print ang libreng listahan ng item para i-console """
scr = Console._a2bScript(script='DebugPrint', module='Compatible')
scr.invoke((args),(),())
@staticmethod
def log(level: str, text: str, msgBox=False):
""" Idagdag ang mensahe ng log sa console, opsyonal na prompt ng user """
scr = Console._a2bScript(script='TraceLog')
scr.invoke((level,text,msgBox),(),())
@staticmethod
def setLevel(logLevel: str):
""" Itakda ang mas mababang limitasyon ng mga mensahe sa log """
scr = Console._a2bScript(script='TraceLevel')
scr.invoke((logLevel,),(),())
@staticmethod
def show():
""" Display console content/dialog """
scr = Console._a2bScript(script='TraceConsole')
scr.invoke((),(),())
@staticmethod
def _a2bScript(script: str, library='Access2Base',
module='Trace') -> XScript:
''' Grab application-based Basic script '''
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
Isipin ang maling spelling documentEventOccured paraan na nagmana ng typo mula sa LibreOffice Application Programming Interface (API).
Pag-import ng mga Module ng Python para sa karagdagang impormasyon.
at Maaaring gamitin ang mga kaganapan ayon sa pagkakabanggit upang itakda at i-unset ang path ng Python para sa mga script ng user o mga script ng LibreOffice. Sa katulad na paraan, ang mga library o module ng Python batay sa dokumento ay maaaring i-load at ilabas gamit at mga pangyayari. Sumangguni saGamit ConsoleLogger pagsisimula. _documentEventOccured routine - itinakda ng ConsoleLogger - nagsisilbing isang natatanging entry point upang bitag ang lahat ng mga kaganapan sa dokumento.
menu tab, ang kaganapang sunog a
Option Explicit
Global _obj Bilang Object ' controller.ConsoleLogger instance
Sub OnLoad(evt As com.sun.star.document.DocumentEvent) ' >> Buksan ang Dokumento <<
_obj = New ConsoleLogger : _obj.StartAdapter(evt)
End Sub ' controller.OnLoad
Sub _documentEventOccured(evt As com.sun.star.document.DocumentEvent)
''' natatanging entry point ng ConsoleLogger '''
_obj.DocumentEventOccurs(evt)
End Sub ' controller._documentEventOccured
Ang pagsubaybay sa mga kaganapan ay nagsisimula sa sandaling a ConsoleLogger object ay instantiated at sa huli ay hihinto sa pagsara ng dokumento. StartAdapter nakagawiang naglo-load ng mga kinakailangang Pangunahing aklatan, habang ang mga nahuli na kaganapan ay iniuulat na ginagamit Access2Base.Trace modyul.
Option Explicit
Option Compatible
Option ClassModule
' ADAPTER design pattern object na gagawin sa kaganapang "Open Document."
Private Const UI_PROMPT = True
Private Const UI_NOPROMPT = False ' Itakda ito sa True upang mailarawan ang mga kaganapan sa mga dokumento
'MEMBERS
Private _evtAdapter As Object ' com.sun.star.document.XDocumentEventBroadcaster
Pribadong _txtMsg Bilang String ' text message para mag-log in sa console
' MGA ARI-ARIAN
Private Property Get FileName As String
''' System-dependent filename '''
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
' MGA PARAAN
Public Sub DocumentEventOccurs(evt As com.sun.star.document.DocumentEvent)
''' Subaybayan ang mga kaganapan sa dokumento '''
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)
''' Magsimula sa pag-log ng mga kaganapan sa dokumento '''
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 at "Nila-log ang mga kaganapan sa dokumento", 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)
''' Wakasan ang pag-log ng mga kaganapan sa dokumento '''
ThisComponent.removeDocumentEventListener( _evtAdapter )
If IsMissing(evt) Then _txtMsg = "" Else _txtMsg = evt.EventName & "-"
Access2Base.Trace.TraceLog("INFO", _txtMsg at "Naka-log na ang mga kaganapan sa dokumento", UI_PROMPT)
Access2Base.Trace.TraceConsole() ' Nakuhang dialog ng mga kaganapan
End Sub ' controller.ConsoleLogger._StopAdapter
' MGA PANGYAYARI
' Dito napupunta ang iyong code para sa mga pinangangasiwaang kaganapan
Isipin ang maling spelling _documentEventOccured paraan na nagmana ng typo mula sa LibreOffice Application Programming Interface (API).
Ang object ng broadcaster API ay nagbibigay ng listahan ng mga kaganapan na responsable para sa:
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import uno, apso_utils as ui
def displayAvailableEvents():
""" Ipakita ang mga kaganapan sa dokumento """
'''
inangkop mula sa DisplayAvailableEvents() ni 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,)
Ang Alternatibong Python Script Organizer (APSO) extension ay ginagamit upang mag-render ng impormasyon ng mga kaganapan sa screen.
Sub DisplayAvailableEvents
''' Ipakita ang mga kaganapan sa dokumento '''
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