Verkrijgen van Sessie-informatie
Computing LibreOffice user profile and shared modules system file paths can be performed with Python or with Basic languages. BeanShell, Java, JavaScript and Python scripts locations can be derived from this information.
Voorbeelden:
Met Python shell.
>>> from <the_module> import Session
>>> print(Session.SharedPythonScripts()) # static methode
>>> print(Session().UserName) # objecteigenschap
>>> input(Session().UserProfile) # objecteigenschap
Vanuit het menu
.
from <the_module> import Session
def demo_session():
import screen_io as ui
ui.MsgBox(Session.Share(),title='Deel Installatie') # static methode
ui.Print(Session.SharedPythonScripts()) # static methode
s = Session() # aanmaken van instantie
ui.MsgBox(s.UserName,title='Hallo') # objecteigenschap
ui.Print(s.UserPythonScripts) # objecteigenschap
g_exportedScripts = (demo_session,) # publieke macro's
Met LibreOffice Basic.
Sub Session_example()
Dim s As New Session ' instance of Session class
Print "Gedeelde scripts locatie:", s.SharedScripts
MsgBox s.UserName,,"Hallo"
Print s.UserScripts, Chr(13), s.UserPythonScripts
End Sub ' Session_example
Gebruikt COM/OLE en Visual Basic scripttaal.
' De service manager is altijd het uitgangspunt
' Als er geen office wordt uitgevoerd, zal deze worden gestart
Set sm = WScript.CreateObject("com.sun.star.ServiceManager")
' PathSubstitution service vertoont informatie om af te leiden
' <UserProfile|Share>/Scripts/python locaties van
Set obj = sm.createInstance("com.sun.star.util.PathSubstitution")
MsgBox CreateObject("WScript.Network").UserName,, "Hello"
user = obj.getSubstituteVariableValue("$(user)")
MsgBox user & "/Scripts",, "User scripts location"
libO = Replace(obj.getSubstituteVariableValue("$(inst)"), "program/..", "Share")
MsgBox libO & "/Scripts",, "Shared scripts location"
Python Sessieklasse:
import getpass, os, os.path, uno
class Session():
@staticmethod
def substitute(var_name):
ctx = uno.getComponentContext()
ps = ctx.getServiceManager().createInstanceWithContext(
'com.sun.star.util.PathSubstitution', ctx)
return ps.getSubstituteVariableValue(var_name)
@staticmethod
def Share():
inst = uno.fileUrlToSystemPath(Session.substitute("$(prog)"))
return os.path.normpath(inst.replace('program', "Share"))
@staticmethod
def SharedScripts():
return ''.join([Session.Share(), os.sep, "Scripts"])
@staticmethod
def SharedPythonScripts():
return ''.join([Session.SharedScripts(), os.sep, 'python'])
@property # alternatief voor de '$(gebruikersnaam)' variabele
def UserName(self): return getpass.getuser()
@property
def UserProfile(self):
return uno.fileUrlToSystemPath(Session.substitute("$(user)"))
@property
def UserScripts(self):
return ''.join([self.UserProfile, os.sep, 'Scripts'])
@property
def UserPythonScripts(self):
return ''.join([self.UserScripts, os.sep, "python"])
In tegenstelling tot Basic, wordt normalisatie van het pad in Python uitgevoerd binnen de Sessieklasse.
LibreOffice Basic Sessieklasse:
Option Explicit
Option Compatible
Option ClassModule
Private _ps As Object ' Particulier lid
Private Sub Class_Initialize()
GlobalScope.BasicLibraries.LoadLibrary("Tools")
Set _ps = CreateUnoService("com.sun.star.util.PathSubstitution")
End Sub ' Constructie
Private Sub Class_Terminate()
_ps = Nothing
End Sub ' Destructor
Public Property Get SharedScripts() As String
Dim inst As String, shr As String
inst = ConvertFromURL(_ps.getSubstituteVariableValue("$(prog)"))
shr = Tools.Strings.ReplaceString(inst,"Share","program")
SharedScripts = shr & GetPathSeparator() &"Scripts"
End Property ' Session.sharedScripts
Public Property Get SharedPythonScripts() As String
sharedPythonScripts = sharedScripts() & GetPathSeparator() &"python"
End Property ' Session.sharedPythonScripts
Public Property Get UserName() As String ' Gebruikersaccountnaam
userName = _ps.getSubstituteVariableValue("$(username)")
End Property ' Session.userName
Public Property Get UserProfile() As String ' Systeempad gebruikersprofiel
userProfile = ConvertFromURL(_ps.getSubstituteVariableValue("$(user)"))
End Property ' Session.userProfile
Public Property Get UserScripts() As String ' Systeempad gebruikerscripts
userScripts = userProfile() & GetPathSeparator() &"Scripts"
End Property ' Session.userScripts
Public Property Get UserPythonScripts() As String ' Systeempad gebruiker Pythonscripts
userPythonScripts = userScripts() & GetPathSeparator() &"python"
End Property ' Session.userPythonScripts