??? 接上次講到界面擴(kuò)展的配置文件,這次說直接調(diào)用和腳本調(diào)用的配置文件。
之前我說過腳本調(diào)用的包的結(jié)構(gòu)為:
腳本調(diào)用的包:
??? ?? ?? zip--|
??? ?? ?? ????? |-jarName文件夾--|--jarName.jar
??? ?? ?? ?? ?? |?? ?? ?? ?? ?? ?? |
??? ?? ?? ?? ?? |?? ?? ?? ?? ?? ?? |--parcel-descriptor.xml
??? ?? ?? ????? |
??? ?? ?? ????? |-addons.xcu
??? ?? ?? ????? |
??? ?? ?? ????? |-META-INF--|--manifest.xml

META-INF文件夾中manifest.xml文件的內(nèi)容可能為:

<?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>
??? 上面兩項(xiàng)分別是配置顯示擴(kuò)展所用的Addon.xcu配置文件,和你所要添加的業(yè)務(wù)組件的zip包內(nèi)所在的文件夾名,后面的類型說明標(biāo)明了其類型。
??? 說到腳本調(diào)用,我們就應(yīng)該了解OOo的腳本調(diào)用框架,ScriptingFramework 的目標(biāo)在于使OOo支持地語言編寫的宏可以:
??? ??? *執(zhí)行
??? ??? *顯示
?? ?? ? *被管理
??? ??? *被指定到 OOo 事件、組合鍵、菜單和工具欄項(xiàng)目
??? 通過部署滿足 com.sun.star.script.provider.LanguageScriptProvider 指定服務(wù)定義要求的UNO 組件,來添加新語言支持,即可實(shí)現(xiàn)上述目標(biāo)。ScriptingFramework 通過找出滿足服務(wù)規(guī)范并遵守命名約定? “com.sun.star.script.provider.ScriptProviderFor[Language]” 的可用組件來檢測支持的語言。默認(rèn)情況下,OOo 安裝了許多參考 LanguageScriptProvider。下面是OOo現(xiàn)在支持的語言列表:
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(? )
??? 返回為其調(diào)用宏的文檔的 XModel 接口
??? ??? * com.sun.star.frame.XDesktop getDesktop(? )
??? 返回應(yīng)用程序的 XDesktop 接口,用于訪問打開的文檔和加載文檔
??? ??? * com.sun.star.uno.XComponentContext getComponentContext(? )
??? 返回 XComponentContext 接口,用于創(chuàng)建服務(wù)實(shí)例
??? 根據(jù)語言的不同,宏以不同的方式訪問 XScriptContext 類型:
??? ??? *Java:傳遞到宏方法的第一個(gè)參數(shù)總是屬于類型 XScriptContext
??? Xmodel xDocModel = xScriptContext.getDocument();
??? 因?yàn)?Java 是一種編譯語言,所以不能直接在 OOo 中將 Java 源代碼作為宏來執(zhí)行。該代碼必須
先編譯,然后部署在 OOo 安裝和文檔內(nèi)。
??? 以下步驟介紹如何使用 HelloWorld 示例代碼創(chuàng)建Java 宏:
  1. 為宏創(chuàng)建一個(gè) LemmaDialog 目錄
  2. 使用 LemmaDialog源代碼創(chuàng)建一個(gè) LemmaDialog.java 文件
  3. 編譯 LemmaDialog.java 文件。下列來自于 OOo安裝的 program/classes 目錄的 jar 文件必須位于類路徑中:ridl.jar、unoil.jar、sandbox.jar、jurt.jar
  4. 創(chuàng)建一個(gè)包含 LemmaDialog.class 文件的 LemmaDialog.jar 文件
  5. 為宏創(chuàng)建一個(gè) 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行,說明了宏調(diào)用的具體業(yè)務(wù)代碼是LemmaDialog.jar包中的類,而且是從第10行 cn.ac.cintcm.oo.plugin.lemma.LemmaDialog.lemmaDialog這個(gè)全路徑所表示的類中的方法開始中注入XScriptContext這個(gè)參數(shù)開始的。接下來就可以調(diào)用XScriptContext的對象進(jìn)行一系列的操作了。
??? com.sun.star.awt中有很多與awt、swing相類似的組件可以調(diào)用,com.sun.star.beans.XPropertySet是對這些組件進(jìn)行參數(shù)設(shè)置的接口。
??? 下次介紹有關(guān)于使用Java調(diào)用OOo具體類的業(yè)務(wù)代碼,在OOo中調(diào)用其sdk的service與我們一般編寫java代碼有一定的區(qū)別,下回大家就可明白這其中的區(qū)別了。



本文依據(jù)《創(chuàng)作共用約定》之“署名-禁止派生-非商業(yè)用途”方式發(fā)布,即你可以免費(fèi)拷貝、分發(fā)、呈現(xiàn)和表演當(dāng)前作品,但是必須基于以下條款:

  • 署名:你必須明確標(biāo)明作者的名字。

  • 非商業(yè)用途:你不可將當(dāng)前作品用于商業(yè)目的。

  • 禁止派生:你不可更改、轉(zhuǎn)變或者基于此作品重新構(gòu)造為新作品。

對于任何二次使用或分發(fā),你必須讓其他人明確當(dāng)前作品的授權(quán)條款。

在得到作者的明確允許下,這里的某些條款可以放棄。