Sitzungsinformationen abrufen

Die Berechnung des Benutzerprofils von LibreOffice und der Systemdateipfade für gemeinsam genutzte Module kann mit Python oder mit Basissprachen durchgeführt werden. Aus diesen Informationen können die Speicherorte von BeanShell-, Java-, JavaScript- und Python-Skripten abgeleitet werden.

Beispiele:

Mit Python-Shell.

>>> from <the_module> import Session

>>> print(Session.SharedPythonScripts()) # statische Methode

>>> print(Session().UserName) # Objekteigenschaft

>>> input(Session().UserProfile) # Objekteigenschaft

Wählen Sie Extras – Makros – Makro ausführen....


        from <the_module> import Session
            
        def demo_session():
            import screen_io as ui
            ui.MsgBox(Session.Share(),title='Installation Share')  # statische Methode
            ui.Print(Session.SharedPythonScripts())  # statische Methode
            s = Session()  # Instanzerstellung
            ui.MsgBox(s.UserName,title='Hello')  # Objekteigenschaft
            ui.Print(s.UserPythonScripts)  # Objekteigenschaft
            
        g_exportedScripts = (demo_session,)  # öffentliche Makros
    

Mit LibreOffice Basic.


        Sub Session_example()
            Dim s As New Session ' instance of Session class
            Print "Speicherort für freigegebene Skripte:", s.SharedScripts
            MsgBox s.UserName,,"Hallo"
            Print s.UserScripts, Chr(13), s.UserPythonScripts
        End Sub ' Session_example
    

Verwenden von COM/OLE und Visual Basic-Skriptsprache.


        ' Der Service Manager ist immer der Einstiegspunkt
        ' Wenn kein Anwendung läuft, wird ein Anwendung gestartet
        Set sm = WScript.CreateObject("com.sun.star.ServiceManager")
        ' Der Dienst PathSubstitution zeigt Informationen an, auf die geschlossen werden kann
        ' Standort <UserProfile|Share>/Scripts/python von
        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-Sitzungsklasse:


        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  # Alternative zur Variable '$(username)'
            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

Im Gegensatz zu Basic wird die Normalisierung von Pfadnamen mit Python in der Session-Klasse durchgeführt.


LibreOffice Basic-Sitzungsklasse:


        Option Explicit
        Option Compatible
        Option ClassModule
            
        Private _ps As Object ' Privates Mitglied
            
        Private Sub Class_Initialize()
            GlobalScope.BasicLibraries.LoadLibrary("Tools")
            Set _ps = CreateUnoService("com.sun.star.util.PathSubstitution")
        End Sub ' Konstruktion
            
        Private Sub Class_Terminate()
            _ps = Nothing
        End Sub ' Destruktion
            
        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 ' Benutzerkontoname
            userName = _ps.getSubstituteVariableValue("$(username)")
        End Property ' Session.userName
            
        Public Property Get UserProfile() As String ' Systempfad für Benutzerprofil
            userProfile = ConvertFromURL(_ps.getSubstituteVariableValue("$(user)"))
        End Property ' Session.userProfile
            
        Public Property Get UserScripts() As String ' Systempfad für Benutzerskripte
            userScripts = userProfile() & GetPathSeparator() &"Scripts"
        End Property ' Session.userScripts
            
        Public Property Get UserPythonScripts() As String ' Systempfad für Benutzer-Python-Skripte
            userPythonScripts = userScripts() & GetPathSeparator() &"python"
        End Property ' Session.userPythonScripts