import com.sun.star.frame.XModel; import com.sun.star.text.*; import com.sun.star.uno.UnoRuntime; import drafts.com.sun.star.script.framework.XScriptContext; model = context.getDocument(); textdoc = (XTextDocument) UnoRuntime.queryInterface(XTextDocument.class, model); oText = textdoc.getText(); oCursor = oText.createTextCursor(); oText.insertString(oCursor, "Hello World", false)Top
You can modify the code directly in the evaluation window and click eval again to test it. If you are new to the OpenOffice.org API this is a great way to experiment with it.
Note: The Interactive BeanShell window does not report when an error occurs while evaluating your code, so it may fail silently. The best way to trace the execution of your code is to write debug statements into your document from your script, for example:
model = context.getDocument(); textdoc = (XTextDocument)UnoRuntime.queryInterface(XTextDocument.class, model); oText = textdoc.getText(); oCursor = oText.createTextCursor(); oText.insertString(oCursor, "DEBUG: start", false); // do something with the API oText.insertString(oCursor, "DEBUG: did something", false);
When you are happy with your BeanShell script, you can create a Script Parcel which can be deployed to OpenOffice.org installations or documents for use by others. This can be done using NetBeans or from the command line.
import com.sun.star.frame.XModel;
import com.sun.star.text.*;
import com.sun.star.uno.UnoRuntime;
import drafts.com.sun.star.script.framework.XScriptContext;
public class MyClass {
// The script method must be public
// It can either be static or non-static
public void showForm(XScriptContext xSc) {
// getting the text document object
XModel xmodel = xSc.getDocument();
XTextDocument xtextdoc = (XTextDocument)
UnoRuntime.queryInterface(XTextDocument.class, xmodel);
XText xtext = xtextdoc.getText();
XTextCursor xtextcursor = xtext.createTextCursor();
xtext.insertString(xtextcursor, "Hello World", false);
}
}
Office scripts in Java need to be compiled in order to execute them. See the Developing Scripts in NetBeans and Developing Scripts on the command line guides for instructions on how to compile and deploy Office scripts in Java.
The following accessor methods are available on the XScriptContext type:
<XScriptContext Instance>.getDocument()
returns
::com::sun::star::frame::XModel
<XScriptContext Instance>.getDesktop()
returns
::com::sun::star::frame::XDesktop
<XScriptContext Instance>.getComponentContext()
returns
::com::sun::star::uno::XComponentContext
import drafts.com.sun.star.script.framework.XScriptContext;
Performance: Currently scripts are being loaded by the Scripting Framework each time they are run. As such it is important to keep the size of your scripts and any dependent jar files they are using reasonably small. In future releases this script loading will be optimised by changing the point at which the scripts are loaded by OpenOffice.org and using various caching schemes once they are loaded. However, the initial load will always be effected by the script and it's dependent jar/class file sizes.
Threading: Scripts are run synchronously by the Scripting Framework. If you wish to perform any background task or provide some user interaction via a dialog for instance, then it is your responsibility to spawn a thread in the running script which can manage this process or interaction and let the script return promptly. Within this running thread you should follow the normal UNO component threading guidelines to ensure that they do not deadlock OpenOffice.org through inappropriate use of the UNO API.
<?xml version="1.0" encoding="UTF-8"?> <!-- DTD for Parcel Meta data for use in the OpenOffice.org Scripting Framework Project --> <!ELEMENT logicalname EMPTY> <!ELEMENT description (#PCDATA)> <!ELEMENT displayname EMPTY> <!ELEMENT locale (displayname?, description?)> <!ELEMENT functionname EMPTY> <!ELEMENT prop EMPTY> <!ELEMENT languagedepprops (prop+)> <!ELEMENT file (prop*)> <!ELEMENT fileset (file+)> <!ELEMENT script (locale+, functionname, logicalname, languagedepprops*, fileset*)> <!ELEMENT parcel (script+)> <!ATTLIST logicalname value CDATA #REQUIRED > <!ATTLIST displayname value CDATA #REQUIRED > <!ATTLIST locale lang CDATA #REQUIRED > <!ATTLIST functionname value CDATA #REQUIRED > <!ATTLIST logicalname value CDATA #REQUIRED > <!ATTLIST prop name CDATA #REQUIRED value CDATA #REQUIRED > <!ATTLIST file name CDATA #REQUIRED > <!ATTLIST fileset name CDATA #IMPLIED > <!ATTLIST script language CDATA #REQUIRED > <!ATTLIST parcel language CDATA #REQUIRED >The following is an example of a parcel-descriptor.xml file that defines a script, implemented in Java. The languagedepprops element is used to extend the JVM's classpath.
<?xml version="1.0" encoding="UTF-8"?> <!--Sample Meta Data for use with the Scripting Framework Project in OpenOffice.org --> <!DOCTYPE parcel SYSTEM "parcel.dtd"> <parcel language="Java"> <script language="Java"> <locale lang="english"> <displayname value="Memory.usage"/> <description> Displays the memory current memory usage </description> </locale> <functionname value="memoryUtils.memoryUsage"/> <logicalname value="MemoryUtils.MemUsage"/> <languagedepprops> <prop name="classpath" value="/opt/foo.jar:/usr/java/src.jar"/> </languagedepprops> <fileset> <file name="mems.txt"> <prop name="type" value="resource"/> </file> </fileset> </script> </parcel>Top