Inhalte
Index 🔎︎

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

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

Verwandte Themen

Organisation und Speicherort von Python-Skripten

Importieren von Python-Modulen

Ein-/Ausgabe auf Bildschirm

Python Programmierbeispiele