Java Code Blocks (JA)
2.12 Javaコードブロック
JavaコードブロックはTPRスクリプトからJavaコードを直接呼び出すことを可能にする。これは、スクリプト言語にこだわりたいが、特定のカスタム機能が必要な場合をサポートするために設計されました。
Javaコードブロックを正しく動作させるには、"java -jar robot.jar"コマンドではなく、"java -classpath %26lt;libs> com.tplan.robot.ApplicationSupport" コマンドを使ってJDK上でRobotを実行するようにしてください。後者の構文は、環境によってはJavaコンパイラの'CLASSPATH'への入力に失敗し、Javaソースコードのコンパイルと実行に失敗します。詳細はリリースノートの startup chapter を参照してください。
Javaコード・ブロックの一般的な構文を以下に示します。import句のサポートはv2.2で提供されたことに注意してください。それ以前のバージョンでは、完全修飾名でクラスを参照するか、インポートを preferences.
java {
<import clauses>
<Java code>
} endjava
このような各ブロックは内部的に DefaultJavaTestScript クラスを拡張した Java スクリプトに変換され、ブロック内の Java コードはその test() メソッドに挿入されます。クラス・テンプレートは Java コード・ブロック構成で公開され、Preferences ウィンドウからカスタマイズできます。次の例はその例です:
Java コード・ブロック | 結果の Java スクリプト・クラス |
---|---|
java { | import com.tplan.robot.scripting.*; public class SomeDynamicName extends DefaultJavaTestScript { |
このメカニズムには、いくつかの実用的な影響がある:
Java コードブロックは Java コンパイラへのアクセスを必要とするため、T-Plan Robot は Java Development Kit (JDK) 上で動作するか、有効な JDK インストールパス (v2.3.3 以降) で設定されている必要があります。もしツールがJava Runtime Environment (JRE)だけで動作し、JDKが利用できない場合、コンパイラはエラーを報告します。このドキュメントの第1章を参照してください。Release Notes 章を参照してください。
スクリプト内でJavaコード・ブロックを使いすぎないようにしてください。スクリプトとツール全体のパフォーマンスが低下する可能性があります。プリコンパイルされたJavaコードの再利用可能なパラメトライズされた部分を作成したい場合は Run 機能を探します。
デフォルトでは、テンプレートはcom.tplan.robot.scripting、java.io、java.utilパッケージのすべてのクラスをインポートします。他のパッケージのクラスを使いたい場合は、Javaコードの前にimport句を置きます。他の方法としては、完全修飾名(例えばjava.awt.Pointなど)でクラスを参照するか、Javaコード・ブロックの環境設定でクラス・テンプレートにインポートを追加します。テンプレートの方法を選択した場合は、スクリプトを別のマシンに移行するときに、必ずそれを再適用してください。
各Javaコード・ブロックはスタンドアロンのJavaクラスとして動作するため、あるブロックで作成されたローカル変数やオブジェクトは、別のブロックでは表示されません。複数のJavaブロックでオブジェクトを共有する必要がある場合は、それらをコンテキストに格納します。コンテキストは基本的にマップであり、スクリプトのコンパイルや実行の間ずっと存在し、重要なオートメーション・フレームワーク・オブジェクトへの参照を保持します。オブジェクトをコンテキストに格納するには getContext().put() を使用し、オブジェクトを取得するには getContext().get() を使用します。すでに存在するフレームワークオブジェクトの参照を上書きしないように、必ず一意のキーを使用してください。詳細については、ScriptingContext インタフェース仕様を参照してください。
Javaコードブロックは、コンテキストのgetContext().getVariable()とgetContext().setVariable()メソッドを通して、TPRスクリプトとグローバル変数を共有することができる。コードブロックは DefaultJavaTestScript クラスを継承しているので、スクリプト言語のコマンドに対応するメソッドを呼び出すこともできる。
次の例では、変数の共有について説明します。スクリプトはまず、テンプレート・パスを "C:/templates" に設定します。Javaコードはコンテキストを通してパスを取得し、ディレクトリ内のすべての PNG ファイルをリストアップし、FILE%26lt;n%26gt;と呼ばれる番号付き変数として、ファイル・カウンタFILECNTとともにコンテキスト変数に格納する。TPR スクリプトが再開すると、リストされたファイルを繰り返し、各 PNG ファイルに対して画像比較を実行する。
VarTEMPLATE_DIR="C:\templates"
# この行はJavaコードによって入力される変数のダミー値を宣言します。
# コンパイラがfor()ループやCompareToコマンドでエラーを報告するのを防ぎます。
Var FILECNT=0 FILE1=dummy.png
java {
File files[] = getContext().getTemplateDir().listFiles();
int i = 0;
for (File file : files) {
if (file.isFile() && file.getName().endsWith(".png")) {
i++;
getContext().setVariable("FILE"+i, file.getName());
}
}
getContext().setVariable("FILECNT", Integer.toString(i));
} endjava
for (i=1; {i}<{FILECNT}+1; i={i}+1) {
Compareto "{FILE{i}}" method=search
}