Hello! 

 

I'm working on this problem for a long time now, but I can't get a solution.
Maybe someone can help me. 

 

I want to add a new QueryDefinition to the DefenitionContainer. It's an
example from the OOo Developer Guide (12.2.2 DataSources - Adding and
Editing Predefined Queries) 

The Method createQuerydefinition() which I'm using is one-to-one from the
CodeSamples.java (see code below)

 

The Problem is that the last-but-one command returns null (=> the xStore
variable is null).

 

When I look at the XQueryDefinitionsSupplier interface at api.openoffice.org
there is nothing about a support of XStorable. But there should be one as
the example of the DevelopersGuide and CodeSamples.java explains. 

So how else can I retrieve the XStorable interface and then store the query
definition?

 

 

Besides:

 

I have read in the api reference that XSingleServiceFactory is deprecated
and it is recommended to use the XSingleComponentFactory instead. 

So I alter the method (see code below) with this code:

 

XInterface nQuery =null; 

         try { 

         nQuery = (XInterface)
xSingleFac.createInstanceWithContext(xContext); 

         } catch (Exception e) {System.out.println(e);} 

         XPropertySet xProp = (XPropertySet)
UnoRuntime.queryInterface(XPropertySet.class,nQuery);

 

Here the NullPointerException is already thrown at the [nQuery= ..........]
line. 

 

 

 

 

I'm at my wits' end. I have read through the API 100 times but can't find a
solution.

 

Greets Stefan

 

 

 

Code:   

 

public static void main(String[] args) { 

       

      /********* create service factory ******************************/ 

      //get the remote office component context 

      com.sun.star.uno.XComponentContext xContext = null; 

      com.sun.star.lang.XMultiComponentFactory xMCF = null; 

      try { 

         xContext = com.sun.star.comp.helper.Bootstrap.bootstrap(); 

         System.out.println("Connected to a running office ..."); 

         //get the Service Factory 

         xMCF =   xContext.getServiceManager(); 

      } catch (BootstrapException e) { e.printStackTrace(); } 

      /***************************************************************/ 

       

      try { 

         createQuerydefinition(xContext, xMCF); 

      } catch (Exception e) { 

         e.printStackTrace(); 

      } 

       

   } 

      public static void
createQuerydefinition(com.sun.star.uno.XComponentContext xContext,
com.sun.star.lang.XMultiComponentFactory xMCF) throws
com.sun.star.uno.Exception 

      { 

         XNameAccess xNameAccess = (XNameAccess)UnoRuntime.queryInterface( 

               XNameAccess.class, 

 
xMCF.createInstanceWithContext("com.sun.star.sdb.DatabaseContext", 

                                              xContext)); 

         // we use the first datasource 

         XQueryDefinitionsSupplier xQuerySup = (XQueryDefinitionsSupplier) 

 
UnoRuntime.queryInterface(XQueryDefinitionsSupplier.class, 

                                    xNameAccess.getByName( "Bibliography"
)); 

         XNameAccess xQDefs = xQuerySup.getQueryDefinitions(); 

         // create new query definition 

         XSingleServiceFactory xSingleFac =   (XSingleServiceFactory)
UnoRuntime.queryInterface(XSingleServiceFactory.class, xQDefs); 

          

         XPropertySet xProp = (XPropertySet) UnoRuntime.queryInterface( 

                  XPropertySet.class,xSingleFac.createInstance()); 

          

         xProp.setPropertyValue("Command","SELECT * FROM biblio"); 

         xProp.setPropertyValue("EscapeProcessing",new Boolean(true)); 

 

         XNameContainer xCont = (XNameContainer)
UnoRuntime.queryInterface(XNameContainer.class, xQDefs); 

                   try 

                   { 

                       if ( xCont.hasByName("Query1") ) 

                           xCont.removeByName("Query1"); 

                   } 

                   catch(com.sun.star.uno.Exception e) 

                   {} 

         xCont.insertByName("Query1",xProp); 

                   XStorable xStore =
(XStorable)UnoRuntime.queryInterface(XStorable.class,xQuerySup); 

                   System.out.println(xStore); 

                   xStore.store();            

      }

 

 

Reply via email to