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 Extra – Macro's - Macro uitvoeren....


        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"])
    
note

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