I would like to thank everyone for the hints and tips and code
supplied. I have deployed a new version of my Java macro, and its
performance has improved by staggering 3,500%. The class in my last
post is working fine, I am able to activate the autofilters now
easily.

I would like to suggest adding that class to the code snippets
project. How can I do it?

<code>
import com.sun.star.beans.PropertyValue;
import com.sun.star.frame.XDispatchHelper;
import com.sun.star.frame.XDispatchProvider;
import com.sun.star.frame.XFrame;
import com.sun.star.frame.XModel;
import com.sun.star.lang.XMultiComponentFactory;
import com.sun.star.script.provider.XScriptContext;
import com.sun.star.uno.UnoRuntime;
import com.sun.star.uno.XComponentContext;


/** This class might work within OpenOffice.org Java / BeanShell Macros.<br>
* it has  static methods only (so no object creation is required by
the caller)<br>
* OOo makes available a XSriptContext object called XSCRIPTCONTEXT in
the macro.<br>
* This object is the starting point for the method calls.<br>
*Please note that the <a
href="http://api.openoffice.org/docs/common/ref/com/sun/star/frame/XDispatchHelper.html";>
* interface XDispatchHelper</a> has a return value. If that is of any
interest to you, change the return values.
*<br><br>Disclaimer:<br>
*<p> This class is provided as is (no warranties of any kind), and
contains draft code.
*It was not tested and probably is ripe with all kinds of bugs. <br>
*It is meant as an <strong>example</strong> on how to work your way
into the XDispatchHelper

*interface and execute a UNO dispatch in a Java / BeanShell macro context. </p>

*/
public class DispatchUNOCommand {

/** Creates a new instance of DispatchUNOCommand <br>
 * There is no need to do it, since everything is static anyway.
 */
private DispatchUNOCommand() { }

/** Executes a dispatch, taking the same params the interface
 * <a 
href="http://api.openoffice.org/docs/common/ref/com/sun/star/frame/XDispatchHelper.html";>
 * interface XDispatchHelper</a>.
 *
 [EMAIL PROTECTED] xsc a XScriptContext object. In OOo macros, there is
always one available called XSCRIPTCONTEXT.
 [EMAIL PROTECTED] unoUrl describes the feature which should be supported by
internally used dispatch object
 [EMAIL PROTECTED] targetFrame specifies the frame which should be the target
for this request
 [EMAIL PROTECTED] searchFlags optional search parameter for finding the
frame if no special TargetFrameName was used
 [EMAIL PROTECTED] arguments optional arguments for this request. They depend
on the real implementation of the dispatch object.
 */
public static void execute(XScriptContext xsc, String unoUrl,
String targetFrame,
      int searchFlags, PropertyValue[] arguments) throws
com.sun.star.uno.Exception {

   // get the model and frame from the script context. No need to
go to the desktop.
   XModel xm = xsc.getDocument();
   final XFrame xf = xm.getCurrentController().getFrame();

   // we could nest these two below in the "helper" creation below.

   XComponentContext xcc = xsc.getComponentContext();
   XMultiComponentFactory xmcf = xcc.getServiceManager();

   final Object helper = xmcf.createInstanceWithContext
         ("com.sun.star.frame.DispatchHelper", xcc);


   XDispatchHelper xdh = (XDispatchHelper)UnoRuntime.queryInterface
         (XDispatchHelper.class, helper);


   XDispatchProvider xdp = (XDispatchProvider)UnoRuntime.queryInterface

         (XDispatchProvider.class, xf);

   xdh.executeDispatch(xdp, unoUrl, targetFrame, searchFlags , arguments);
}

/** Executes a dispatch taking only the URL param of
 * <a 
href="http://api.openoffice.org/docs/common/ref/com/sun/star/frame/XDispatchHelper.html";>
 * interface XDispatchHelper</a> . <br>
 * The call assumes targetFrame = "", searchFlags = 0 and empty arguments.
 [EMAIL PROTECTED] xsc a XScriptContext object. In OOo macros, there is
always one available called XSCRIPTCONTEXT.
 [EMAIL PROTECTED] unoUrl describes the feature which should be supported by
internally used dispatch object
 */
public static void execute(XScriptContext xsc, String unoUrl)
throws com.sun.star.uno.Exception {
   execute(xsc, unoUrl, "", 0, new PropertyValue[0]);
}
}
</code>

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to