<このシリーズの、前の記事 | このシリーズの目次 | このシリーズの、次の記事>
>>1つのAntビルドファイルまたは1つのGradleビルドスクリプト内の1つか2つのパラメーターを変更しなければならないかもしれない。Antのファイル、'commonBuild.properties'、Gradleのファイル、'commonBuild01.gradle'で、2つのパラメーター、'LIBREOFFICE_DIRECTORY_NAME'と'LIBREOFFICE_SDK_DIRECTORY_NAME'が、我々の環境と合っていなければ、変更する必要がある。
ははあ。
'LIBREOFFICE_DIRECTORY_NAME'は、LibreOfficeがインストールされたディレクトリ、'LIBREOFFICE_SDK_DIRECTORY_NAME'は、LibreOffice SDKがインストールされたディレクトリだ。Windows上では、これらは変更しなければならないだろう。これらを変更する時、ディレクトリの区切り文字は、'\'ではなく、'/'を使用する。このシリーズのWindows環境では、LibreOfficeを'D:\LibreOffice'にインストールしたので、'LIBREOFFICE_DIRECTORY_NAME'を'D:/LibreOffice'という値にセットし、LibreOffice SDKを'D:\LibreOffice\sdk'にインストールしたので、'LIBREOFFICE_SDK_DIRECTORY_NAME'は変更しなかった。
分かった。
このシリーズにおけるものと同じバージョンのLibreOfficeおよびLibreOffice SDKでは、他のパラメータは変更しなくてよいはずだが、もっと古いバージョンでは、他のパラメータを変更しなければならない可能性が高い。事実、LibreOffice 4では、ディレクトリ構造がLibreOffice 5のものと異なっていた。'commonBuild.properties'または'commonBuild01.gradle'内のプロパティ群、'LIBREOFFICE_*'に設定されたディレクトリやファイルが存在するか確認すればよい。
ははあ。
これで、'ant'コマンドまたは'gradle'コマンドを実行することができる。以下のようにする。ターミナルを開く−>カレントディレクトリを'unoUtilitiesToDisclose'ディレクトリに変更する−>Antを使うかGradleを使うかに応じて、'ant'または'gradle'を実行する。Antの場合もGradleの場合も、'BUILD SUCCESSFUL'というメッセージが表示されるはずだ。
そのメッセージが表示されなかったらどうする?
環境が、意図通りになっていないはずだ。JDKは8以降でなければならないし、上記の設定は正しく行なわれなければならないし、ディレクトリ名にはスペースが含まれないと想定されている。. . .
オーケー。
次に、以下のようにする。カレントディレクトリを'hiUnoExtensionsUnoExtension'に変更する−>Antを使うかGradleを使うかに応じて、'ant'または'gradle'を実行する。UNO拡張機能が正常にビルドされたら、コマンドは次に、UNO拡張機能をLibreOfficeに登録しようとする。LibreOfficeが既に起動されていれば、コマンドはLibreOfficeを終了しようとする。Linux上でwmctrlがインストールされていない場合、LibreOfficeを手動で終了しなければならない。Linux上でwmctrlがインストールされている場合、またはWindows上では、LibreOfficeは、未保存のファイルが開いていなければ自動で終了するだろう。未保存のファイルが開いていれば、それらのファイルを保存するように問われるだろう。LibreOfficeが何らかの理由で終了しない場合、LibreOfficeを手動で終了させなければならない。その後、LibreOfficeが自動で起動するだろう。処理が正常だったことは、Antの場合もGradleの場合も、'unopkg done.'と'BUILD SUCCESSFUL'のメッセージを見ることで確認できる。
処理が成功しなかったらどうする?
うーん、上に挙げた可能性もあるが、もし、LibreOfficeを終了させるスクリプトがうまく動かないのであれば(AntビルドファイルとGradleビルドスクリプトにbashやOSのコマンドが使われているので、Linuxディストリビューション間で何らかの非互換性があるかもしれない)、それは致命的ではない。UNO拡張機能はLibreOfficeのメニュー、'Tools(ツール)'-'Extension Manager...(拡張機能マネージャー...)'、から登録できる。UNO拡張機能ファイルは、サンプルUNO拡張機能プロジェクトディレクトリの下の'target'ディレクトリ内に存在するはずで、ファイル拡張子'oxt'のファイルがそれだ。ただ、UNO拡張機能を登録した後、LibreOfficeを再起動しなければならないことに注意しよう。
分かった。
登録されたサンプルUNO拡張機能をテストしよう。LibreOfficeマクロで、UNOサービスのインスタンスを作成し、そのUNOサービスインスタンスのメソッドを呼び出す。
復習すると、サンプルUNO拡張機能には、一つのUNOインターフェースインプリメンテーションが含まれていて、これがUNOサービスとして登録されているのだったな?
そうだ。実のところ、UNOインターフェースインプリメンテーションには、一つのstringパラメータを持つ'sayHi'という名前のメソッドがあって、UNOサービスは、'thebiasplanet.uno.hiunoextensionsunoextension.HiUnoExtensions'という名前で、一つのstringパラメータを持つcreate1という名前のUNOサービスコンストラクタを持っている。
ははあ。
以下のようにする。LibreOfficeのメニューで(どんなファイル(Writer文書、Calc文書、その他)が開いていてもよいし、どのファイルも開いていなくてもよい)'Tools(ツール)'をクリックする−>'Macros(マクロ)'−'Organize Macros(マクロの管理)'−'LibreOffice Basic...'をクリックする−>左にある'Macro From(マクロの記録先)'部の'My Macros(マイマクロ)'−'Standard'をクリックする−>'Macro Name(マクロ名)'部に'testsUnoExtension'(シングルクォーテーションは入力しなくてよい)または任意の有効な名前を入力する−>'New(新規作成)'ボタンをクリックする−>以下のコードを先ほど指定した名前のSub(そういうSubが作成されているはず)の中に入力する。
Dim l_hiUnoExtensions As Variant
l_hiUnoExtensions = thebiasplanet.uno.hiunoextensionsunoextension.HiUnoExtensions.create1 ("Hi")
Msgbox (l_hiUnoExtensions.sayHi ("bro"))
うーむ、Objectではなく、Variantを使うのか?
参考文書 のページ下部にそうするように書いてある。このケースでは、Object使っても問題が起きないが、UNOオブジェクトは、厳密には、LibreOffice Basicオブジェクトではないらしい。
ふーむ、とすると、LibreOffice Basicオブジェクトというのは何なのだ?
分からない。UNOオブジェクトに適合する明示的なデータタイプはないらしい。また、妙なことには、上記参考文書ではLibreOffice Basicオブジェクトを使わないように推奨しているが、いくつかの参考文書(例えば、ここ)のサンプルコードでは、LibreOffice Basicオブジェクトが使われている。
ふーむ。 . . .
ところで、我々がUNOオブジェクトという用語を使う時、これは、UNOインターフェースインプリメンテーションインスタンスという用語と完全に互換だ。
分かった。
とにかく、このマクロを実行しよう。以下のようにする。このSubの内側にカーソルを置く−>F5キーを押す−>'Hi, bro!'というメッセージのメッセージボックスがポップアップするはずだ。
このUNOオブジェクトは何をしているのか?
コンストラクタから、ベースとなるメッセージを受け取り、'sayHi'というメソッドから、メッセージの受け手の呼び名を受け取り、組み立てられたメッセージを返しているだけだ。パラメータを変えれば、返されるメッセージが変わるののが分かるはずだ。
ははあ。
. . . 面白くないって?まあ、いわゆるHello World型のサンプルはたいていそんなものだろう。しかし、LibreOfficeからJavaのメソッドが呼び出せることが確かめられたので、こうしたメソッドにコードを組み込めば、LibreOfficeからほとんど何でも呼び出せることになる。ここで呼び出されているメソッドは、実際には、'HiUnoExtensionsImplementation.java'の'sayHi'というメソッドだ。
分かった。
- Apache OpenOffice Wiki. (2014/01/02). Apache OpenOffice Developer's Guide. Retrieved from https://wiki.openoffice.org/wiki/Documentation/DevGuide/OpenOffice.org_Developers_Guide