The Free and Open Productivity Suite
Apache OpenOffice 4.1.3 released

Writing Scripts in BeanShell, JavaScript and Java


Hello World in BeanShell

Here's a BeanShell script that inserts Hello World at the start of an OpenOffice.org Writer document:

    import com.sun.star.frame.XModel;
    import com.sun.star.text.*;
    import com.sun.star.uno.UnoRuntime;
    import drafts.com.sun.star.script.provider.XScriptContext;

    model = context.getDocument(); 
    textdoc = (XTextDocument)
        UnoRuntime.queryInterface(XTextDocument.class, model);

    oText = textdoc.getText(); 
    oCursor = oText.createTextCursor(); 
    oText.insertString(oCursor, "Hello World", false)

Trying out your BeanShell script

Trying out your Hello World BeanShell script is easy:

If you are new to the OpenOffice.org API this is a great way to experiment with it.

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.


Hello World in JavaScript

Here's a JavaScript script that inserts Hello World at the start of an OpenOffice.org Writer document:


    var oModel = XSCRIPTCONTEXT.getDocument(); 
    var oTextdoc = UnoRuntime.queryInterface(XTextDocument, oModel);
    var oText = oTextdoc.getText(); 
    var oCursor = oText.createTextCursor(); 

    oText.insertString(oCursor, "Hello World", false);

The XSCRIPTCONTEXT variable above is a global instance of the XScriptContext type which is available to all JavaScript scripts executed by the Scripting Framework. See Writing OpenOffice.org Scripts and the XScriptContext type for the methods available for the XScriptContext type.


Trying out a JavaScript script in OpenOffice.org

Once again you can use the Edit/Debug Scripts dialog to open a JavaScript script in an editor. The Rhino JavaScript Editor from the Mozilla Rhino project can be used to debug and test your JavaScript scripts.

The Rhino Debugger also includes debugging functionality, so you can set breakpoints in your JavaScript script and step through the code as it is executed.


Hello World in Java

Here's the Hello World script in Java:

    import com.sun.star.frame.XModel;
    import com.sun.star.text.*;
    import com.sun.star.uno.UnoRuntime;
    import drafts.com.sun.star.script.provider.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);

OpenOffice.org 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 OpenOffice.org scripts in Java.


Writing OpenOffice.org scripts and the XScriptContext type

The XScriptContext type is used to obtain the the document context, desktop and component factory from an OpenOffice.org script. Any public Java method which accepts XScriptContext as it's first parameter can be executed as an OpenOffice.org script. For BeanShell scripts, an instance of XScriptContext is available in a global variable called "context" which can be used by the script.

The following accessor methods are available on the XScriptContext type:

The Java or BeanShell script must import the XScriptContext interface, using the following import directive:
    import drafts.com.sun.star.script.provider.XScriptContext;


Tips on writing OpenOffice.org scripts


Parcel Descriptor DTD and sample XML

Each Script Parcel must contain a parcel-descriptor.xml file which provides all the necessary metadata for the script. The DTD for the parcel-descriptor.xml follows:
<?xml version="1.0" encoding="UTF-8"?>
<!-- DTD for Parcel Meta data for use in the OpenOffice.org Scripting Framework Project -->

<!ELEMENT description (#PCDATA)>
<!ELEMENT displayname EMPTY>
<!ELEMENT functionname EMPTY>
<!ELEMENT languagedepprops (prop+)>
<!ELEMENT script (description, displayname, functionname, languagedepprops*)>
<!ELEMENT parcel (script+)>
<!ATTLIST displayname
<!ATTLIST locale
<!ATTLIST functionname
<!ATTLIST prop
<!ATTLIST script
<!ATTLIST parcel

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">
		<displayname value="Memory.usage"/>
			Displays the memory current memory usage
		<functionname value="memoryUtils.memoryUsage"/>
			<prop name="classpath" value="/opt/foo.jar:/usr/java/src.jar"/>
Last Modified: Nov 28 2003

Apache Feather

Copyright & License | Privacy | Website Feedback | Contact Us | Donate | Thanks

Apache and the Apache feather logo are trademarks of The Apache Software Foundation. OpenOffice, OpenOffice.org and the seagull logo are registered trademarks of The Apache Software Foundation. Other names appearing on the site may be trademarks of their respective owners.