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]
