サポート > リポジトリ > 業務ロジック > Java 6/7 利用時の注意点

ja | en

Java 6/7 ではスクリプトのルールが異なるところがあります。

Javaは次のサーバサイドJavaScriptエンジンを同梱しています。

Javaバージョン同梱されているJavaScriptエンジン
Java 8Nashorn
Java 6/7Rhino

本ドキュメントに例示しているコードは、すべて Java 8 (Nashorn) での書き方がベースになっています。本ページでは Java 6/7 (Rhino) で動作させる場合の変更点を説明します。

Java 8 (Nashorn)

変数 stdout を使います。

stdout.println("Hello from Nashorn.");

Java 6/7 (Rhino)

Rhinoでは直接、printlnを利用できます。

println("Hello from Rhino.");

Javaの配列は java.lang.reflect.Array.newInstance を使って実現します。

次の例は、スクリプトで文字配列を生成するものです。

var obj = java.lang.reflect.Array.newInstance(java.lang.String, 1);
obj[0] = "テストです。";
p.errors.addJfcerror(errorManager.getJfcerror("error.original", obj, p.locale));

スクリプト内でJavaクラスを利用する場合、Java 8 環境利用時は Java.type を使うことができます。

var Foo = Java.type("jp.jasminesoft.wagby.Foo");
var foo = new Foo;

Java 6/7 利用時は importClass を使います。このとき、関数 process の宣言も同時に行う必要があります。

importClass(Packages.jp.jasminesoft.util.ExcelFunction);
importClass(Packages.jp.jasminesoft.jfc.error.Jfcerror);
importClass(Packages.jp.jasminesoft.jfc.error.Jfcwarn);
importClass(Packages.jp.jasminesoft.jfc.error.Jfcinfo);

importClass(Packages.jp.jasminesoft.wagby.Foo); /* 追加した */

function process() {

...ここに開発者独自のコードを記述する。

}

つまり Java 8 環境では function process() という関数定義は省略できますが、Java 6/7 では importClass 宣言を使う時点で、関数定義も行う必要がある、ということです。

その場合は上に示したように、コード内でよく使うクラス (ExcelFunction や Jfcerror) も同時に宣言に加えるようにするとよいでしょう。

ja | en