Contingut
Índex 🔎︎

# Getting Session Information

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.

## Exemples:

Amb l'intèrpret de Python.

>>> from <the_module> import Session

>>> print(Session.SharedPythonScripts()) # static method

>>> print(Session().UserName) # propietat de l'objecte

>>> input(Session().UserProfile) # propietat de l'objecte

### Des del menú Eines ▸ Macros ▸ Executa una macro.

            from <the_module> import Session

            def demo_session():
                import screen_io as ui
                ui.MsgBox(Session.Share(),title='Installation Share')  # static method
                ui.Print(Session.SharedPythonScripts())  # static method
                s = Session()  # creació de la instància
                ui.MsgBox(s.UserName,title='Hola')  # propietat de l'objecte
                ui.Print(s.UserPythonScripts)  # propietat de l'objecte

            g_exportedScripts = (demo_session,)  # macros públiques

### Amb el LibreOffice Basic.

            Sub Session_example()
                Dim s As New Session ' instance of Session class
                Print "Shared scripts location:", s.SharedScripts
                MsgBox s.UserName,,"Hola"
                Print s.UserScripts, Chr(13), s.UserPythonScripts
            End Sub ' Session_example

### Amb el COM/OLE i el llenguatge VBScript

            ' El gestor de serveis sempre és el punt d'entrada
            ' If there is no office running then an office is started up
            Set sm = WScript.CreateObject("com.sun.star.ServiceManager")
            ' PathSubstitution service exhibits information to infer
            ' <UserProfile|Share>/Scripts/python locations from
            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"

## Classe Session del Python:

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

Unlike Basic, pathname normalization is performed with Python inside Session class.

## Classe Session del LibreOffice Basic:

            Option Explicit
            Option Compatible
            Option ClassModule

            Private _ps As Object ' membre privat

            Private Sub Class_Initialize()
                GlobalScope.BasicLibraries.LoadLibrary("Tools")
                Set _ps = CreateUnoService("com.sun.star.util.PathSubstitution")
            End Sub ' constructor

            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 ' nom del compte d'usuari
                userName = _ps.getSubstituteVariableValue("$(username)")
            End Property ' Session.userName

            Public Property Get UserProfile() As String ' camí del perfil d'usuari al sistema
                userProfile = ConvertFromURL(_ps.getSubstituteVariableValue("$(user)"))
            End Property ' Session.userProfile

            Public Property Get UserScripts() As String ' camí dels scripts d'usuari al sistema
                userScripts = userProfile() & GetPathSeparator() &"Scripts"
            End Property ' Session.userScripts

            Public Property Get UserPythonScripts() As String ' camí dels scripts d'usuari en Python al sistema
                userPythonScripts = userScripts() & GetPathSeparator() &"python"
            End Property ' Session.userPythonScripts

Temes relacionats

Organització i ubicació dels scripts en Python

Importing Python Modules

Input/Output to Screen

Exemples de programació en Python