接上次講到界面擴展的配置文件,這次說直接調用和腳本調用的配置文件。
之前我說過腳本調用的包的結構為:
腳本調用的包:
zip--|
|-jarName文件夾--|--jarName.jar
| |
| |--parcel-descriptor.xml
|
|-addons.xcu
|
|-META-INF--|--manifest.xml
META-INF文件夾中manifest.xml文件的內容可能為:
<?xml version="1.0" encoding="UTF-8"?>
<manifest:manifest>
<manifest:file-entry manifest:full-path="Addon.xcu" manifest:media-type="application/vnd.sun.star.configuration-data"/>
<manifest:file-entry manifest:full-path="LemmaDialog/" manifest:media-type="application/vnd.sun.star.basic-library"/>
</manifest:manifest>
上面兩項分別是配置顯示擴展所用的Addon.xcu配置文件,和你所要添加的業務組件的zip包內所在的文件夾名,后面的類型說明標明了其類型。
說到腳本調用,我們就應該了解OOo的腳本調用框架,ScriptingFramework 的目標在于使OOo支持地語言編寫的宏可以:
*執行
*顯示
*被管理
*被指定到 OOo 事件、組合鍵、菜單和工具欄項目
通過部署滿足 com.sun.star.script.provider.LanguageScriptProvider 指定服務定義要求的UNO 組件,來添加新語言支持,即可實現上述目標。ScriptingFramework 通過找出滿足服務規范并遵守命名約定 “com.sun.star.script.provider.ScriptProviderFor[Language]” 的可用組件來檢測支持的語言。默認情況下,OOo 安裝了許多參考 LanguageScriptProvider。下面是OOo現在支持的語言列表:
Java com.sun.star.script.provider.ScriptProviderForJava
JavaScript com.sun.star.script.provider.ScriptProviderForJavaScript
BeanShell com.sun.star.script.provider.ScriptProviderForBeanShell
Basic com.sun.star.script.provider.ScriptProviderForBasic
所有 BeanShell、JavaScript 與 Java 宏都附帶一種類型變量
com.sun.star.script.provider.XScriptContext(可用它來訪問 OOo API)。此類型有三
種方法:
* com.sun.star.frame.XModel getDocument( )
返回為其調用宏的文檔的 XModel 接口
* com.sun.star.frame.XDesktop getDesktop( )
返回應用程序的 XDesktop 接口,用于訪問打開的文檔和加載文檔
* com.sun.star.uno.XComponentContext getComponentContext( )
返回 XComponentContext 接口,用于創建服務實例
根據語言的不同,宏以不同的方式訪問 XScriptContext 類型:
*Java:傳遞到宏方法的第一個參數總是屬于類型 XScriptContext
Xmodel xDocModel = xScriptContext.getDocument();
因為 Java 是一種編譯語言,所以不能直接在 OOo 中將 Java 源代碼作為宏來執行。該代碼必須
先編譯,然后部署在 OOo 安裝和文檔內。
以下步驟介紹如何使用 HelloWorld 示例代碼創建Java 宏:
- 為宏創建一個 LemmaDialog 目錄
- 使用 LemmaDialog源代碼創建一個 LemmaDialog.java 文件
- 編譯 LemmaDialog.java 文件。下列來自于 OOo安裝的 program/classes 目錄的 jar 文件必須位于類路徑中:ridl.jar、unoil.jar、sandbox.jar、jurt.jar
- 創建一個包含 LemmaDialog.class 文件的 LemmaDialog.jar 文件
- 為宏創建一個 parcel-descriptor.xml 文件
其parcel-descriptor.xml文件如下:
1 <?xml version="1.0" encoding="UTF-8"?>
2 <parcel language="Java" xmlns:parcel="scripting.dtd">
3 <script language="Java">
4 <locale lang="en">
5 <displayname value="cn.ac.cintcm.oo.plugin.lemma.LemmaDialog.lemmaDialog"/>
6 <description>
7 Prints "Lemma Dialog".
8 </description>
9 </locale>
10 <functionname value="cn.ac.cintcm.oo.plugin.lemma.LemmaDialog.lemmaDialog"/>
11 <logicalname value="cn.ac.cintcm.oo.plugin.lemma.LemmaDialog.lemmaDialog"/>
12 <languagedepprops>
13 <prop name="classpath" value="LemmaDialog.jar"/>
14 </languagedepprops>
15 </script>
16 </parcel>
第13行,說明了宏調用的具體業務代碼是LemmaDialog.jar包中的類,而且是從第10行
cn.ac.cintcm.oo.plugin.lemma.LemmaDialog.lemmaDialog這個全路徑所表示的類中的方法開始中注入XScriptContext這個參數開始的。接下來就可以調用XScriptContext的對象進行一系列的操作了。
com.sun.star.awt中有很多與awt、swing相類似的組件可以調用,com.sun.star.beans.XPropertySet是對這些組件進行參數設置的接口。
下次介紹有關于使用Java調用OOo具體類的業務代碼,在OOo中調用其sdk的service與我們一般編寫java代碼有一定的區別,下回大家就可明白這其中的區別了。