Getting Information about UNO Objects

From Apache OpenOffice Wiki
Jump to: navigation, search




The Basic RTL retrieves information about UNO objects. There are functions to evaluate objects during runtime and object properties used to inspect objects during debugging.

Checking for interfaces during runtime

Although Basic does not support the queryInterface concept like C++ and Java, it can be useful to know if a certain interface is supported by a UNO Basic object or not. The function HasUnoInterfaces() detects this.

The first parameter HasUnoInterfaces() expects the object that should be tested. Parameter(s) of one or more fully qualified interface names can be passed to the function next. The function returns True if all these interfaces are supported by the object, otherwise False.

 Sub Main
   Dim oSimpleFileAccess
   oSimpleFileAccess = CreateUnoService( "com.sun.star.ucb.SimpleFileAccess" )
 
 Dim bSuccess
     Dim IfaceName1$, IfaceName2$, IfaceName3$
     IfaceName1$ = "com.sun.star.uno.XInterface"
     IfaceName2$ = "com.sun.star.ucb.XSimpleFileAccess2"
     IfaceName3$ = "com.sun.star.container.XPropertySet"
     
     bSuccess = HasUnoInterfaces( oSimpleFileAccess, IfaceName1$ )
     MsgBox bSuccess ' Displays True because XInterface is supported
     
     bSuccess = HasUnoInterfaces( oSimpleFileAccess, IfaceName1$, IfaceName2$ )
     MsgBox bSuccess ' Displays True because XInterface
     ' and XSimpleFileAccess2 are supported
 
     bSuccess = HasUnoInterfaces( oSimpleFileAccess, IfaceName3$ )
     MsgBox bSuccess ' Displays False because XPropertySet is NOT supported
   
     bSuccess = HasUnoInterfaces( oSimpleFileAccess, IfaceName1$, IfaceName2$, IfaceName3$ )
     MsgBox bSuccess ' Displays False because XPropertySet is NOT supported
 End Sub

Testing if an object is a struct during runtime

As described in the section Mapping of Structs above, structs are handled differently from objects, because they are treated as values. Use the IsUnoStruct () function to check it the UNO Basic object represents an object or a struct. This function expects one parameter and returns True if this parameter is a UNO struct, otherwise False. Example:

 Sub Main
     Dim bIsStruct
         ' Instantiate a service
     Dim oSimpleFileAccess
     oSimpleFileAccess = CreateUnoService( "com.sun.star.ucb.SimpleFileAccess" )
     bIsStruct = IsUnoStruct( oSimpleFileAccess )
     MsgBox bIsStruct ' Displays False because oSimpleFileAccess is NO struct
                      ' Instantiate a Property struct
     Dim aProperty As New com.sun.star.beans.Property
     bIsStruct = IsUnoStruct( aProperty )
     MsgBox bIsStruct ' Displays True because aProperty is a struct
     bIsStruct = IsUnoStruct( 42 )
     MsgBox bIsStruct ' Displays False because 42 is NO struct
 End Sub

Testing objects for identity during runtime

To find out if two UNO OpenOffice.org Basic objects refer to the same UNO object instance, use the function EqualUnoObjects(). Basic is not able to apply the comparison operator = to arguments of type object, for example, If Obj1 = Obj2 Then which leads to a runtime error.

 Sub Main
     Dim bIdentical
     Dim oSimpleFileAccess, oSimpleFileAccess2, oSimpleFileAccess3
         ' Instantiate a service
     oSimpleFileAccess = CreateUnoService( "com.sun.star.ucb.SimpleFileAccess" )
     oSimpleFileAccess2 = oSimpleFileAccess ' Copy the object reference
     bIdentical = EqualUnoObjects( oSimpleFileAccess, oSimpleFileAccess2 )
     MsgBox bIdentical ' Displays True because the objects are identical
         ' Instantiate the service a second time
     oSimpleFileAccess3 = CreateUnoService( "com.sun.star.ucb.SimpleFileAccess" )
     bIdentical = EqualUnoObjects( oSimpleFileAccess, oSimpleFileAccess3 )
     MsgBox bIdentical ' Displays False, oSimpleFileAccess3 is another instance
 
     bIdentical = EqualUnoObjects( oSimpleFileAccess, 42 )
     MsgBox bIdentical ' Displays False, 42 is not even an object
         ' Instantiate a Property struct
     Dim aProperty As New com.sun.star.beans.Property
     Dim aProperty2
     aProperty2 = aProperty ' Copy the struct
     bIdentical = EqualUnoObjects( aProperty, aProperty2 )
     MsgBox bIdentical ' Displays False because structs are values
         ' and so aProperty2 is a copy of aProperty
 End Sub

Basic hides interfaces behind OpenOffice.org Basic objects that could lead to problems when developers are using API structures. It can be difficult to understand the API reference and find the correct method of accessing an object to reach a certain goal.

To assist during development and debugging, every UNO object in OpenOffice.org Basic has special properties that provide information about the object structure. These properties are all prefixed with Dbg_ to emphasize their use for development and debugging purposes. The type of these properties is String. To display the properties use the MsgBox function.

Inspecting interfaces during debugging

The Dbg_SupportedInterfaces lists all interfaces supported by the object. In the following example, the object returned by the function GetProcessServiceManager() described in the previous section is taken as an example object.

 oServiceManager = GetProcessServiceManager()
 MsgBox oServiceManager.Dbg_SupportedInterfaces

This call displays a message box:

Dbg_SupportedInterfaces Property

The list contains all interfaces supported by the object. For interfaces that are derived from other interfaces, the super interfaces are indented as shown above for com.sun.star.container.XSet, which is derived from com.sun.star.container.XEnumerationAccess based upon com.sun.star.container.XElementAccess.

Template:Documentation/Note

Inspecting properties during debugging

The Dbg_Properties lists all properties supported by the object through com.sun.star.beans.XPropertySet and through get and set methods that could be mapped to Basic object properties:

 oServiceManager = GetProcessServiceManager()
 MsgBox oServiceManager.Dbg_Properties

This code produces a message box like the following example:

Dbg_Properties

Inspecting Methods During Debugging

The Dbg_Methods lists all methods supported by an object. Example:

 oServiceManager = GetProcessServiceManager()
 MsgBox oServiceManager.Dbg_Methods

This code displays:

Dbg_Methods

The notations used in Dbg_Properties and Dbg_Methods refer to internal implementation type names in Basic. The Sbx prefix can be ignored. The remaining names correspond with the normal Basic type notation. The SbxEMPTY is the same type as Variant. Additional information about Basic types is available in the next chapter.

Template:Documentation/Note

Content on this page is licensed under the Public Documentation License (PDL).
Personal tools