サポート > リポジトリ > 業務ロジック > 生成されるスクリプトファイルの詳細

Designerで入力したスクリプトはファイルとして生成されます。

開発者によって記述されたコードは、次に示すテンプレートコードの内部に埋め込まれます。process という名前の関数の中にコードが含まれます。

ExcelFunction, Jfcerror, Jfcwarn, Jfcinfo, stdout などは後述する「利用できる変数」で説明します。
function process() {
var ExcelFunction = Java.type("jp.jasminesoft.util.ExcelFunction");
var Jfcerror = Java.type("jp.jasminesoft.jfc.error.Jfcerror");
var Jfcwarn = Java.type("jp.jasminesoft.jfc.error.Jfcwarn");
var Jfcinfo = Java.type("jp.jasminesoft.jfc.error.Jfcinfo");
var stdout = java.lang.System.out;

...ここに開発者独自のコードが埋め込まれる...

}
Java.type は特別な表記です。Java.type(FQCN形式のクラス名) と記述することで、Javaのクラスを表す変数を用意することができます。この変数を使って、オブジェクトを new 演算子で生成することができるようになります。

生成されるファイル

Designerで入力したスクリプトは、wagbyapp フォルダに存在するスクリプトファイル wagbyapp/webapp/$(APPNAME)/WEB-INF/script/モデルID/スクリプトファイル.js に上書き保存されます。

そのため再ビルドなしで、動作しているアプリケーションの挙動を確認することができます。

本番機のファイルは変更されません。同じ開発機上の wagbyapp フォルダのみ、変更されます。本番機へ反映させる場合は上のファイルを手動でコピーするか、改めてビルドを行ってから wagbyapp フォルダ全体を差し替えてください。

基本テンプレートを使わない

基本テンプレートを使わないようにすることもできます。例えば、独自の関数を用意する場合などです。

この場合、開発するコードは必ず function process() から開始してください。コードの先頭がこの記述で始まる場合、基本テンプレートは使わないと判断します。

例えば、次のように記述します。

function process() {
var ExcelFunction = Java.type("jp.jasminesoft.util.ExcelFunction");
var Jfcerror = Java.type("jp.jasminesoft.jfc.error.Jfcerror");
var Jfcwarn = Java.type("jp.jasminesoft.jfc.error.Jfcwarn");
var Jfcinfo = Java.type("jp.jasminesoft.jfc.error.Jfcinfo");
var stdout = java.lang.System.out;

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

}

function foo() {...独自の関数を記述する...}
function bar() {...独自の関数を記述する...}

定義した関数を(別のファイルに保存されたスクリプトから)呼び出すことはできません。

スクリプトに関する詳細なルールは次のとおりです。

  • [基本テンプレート] 開発者が作成したスクリプトコードの先頭に "function process() {" が付与されます。また末尾に "}" が付与されます。Wagbyは、常にこの process 関数を呼び出します。
  • ただし開発者が直接、process 関数の宣言 "function process() {" を明示的に記述することもできます。この場合、いくつかの変数の宣言も省略されるため、開発者自身で再定義してください。
  • Designerでスクリプトを変更すると、同じ開発機上の wagbyapp フォルダに存在するスクリプトファイル wagbyapp/webapp/$(APPNAME)/WEB-INF/script/モデルID/スクリプトファイル.js が上書きされます。そのため、ビルドすることなく、動作しているアプリケーションの挙動を確認することができます。(注意:本番機のファイルは変更されません。同じ開発機上の wagbyapp フォルダのみ、変更されます。)

customizeフォルダとの関係

Designerに用意された設定欄でスクリプトを編集すると、編集内容が上書きされます。しかしビルド処理を行うと、customize以下のスクリプトに上書きされます。すなわち、customizeフォルダのファイルが優先されます。

スクリプト中に、Javaが提供する標準クラスを利用することができます。これらは Java.type で再宣言する必要はありません。パッケージ名も含めたクラス名を使ってください。

var list = new java.util.ArrayList();
list.add("Apple");
list.add("Orange");
list.add("Banana");
stdout.println(list);

スクリプト内で利用できる変数をまとめます。

名前スクリプト内での表現説明
ストアモデル モデル名 customer データベースに保存されるオブジェクト
プレゼンテーションモデル モデル名_p customer_p Webフォームから入力された値。
すべて文字列型。
コンディションモデル モデル名_c customer_c 検索条件が格納されたオブジェクト。
リストモデル モデル名_l customer_l 一覧表示される値が格納されたオブジェクト
エラーメッセージ errorManager errorManager (エラーメッセージで解説)
SCREENTYPE if (SCREENTYPE == "copy") {...} SCREENTYPE関数と同じ。[例..]
DbActionParameter p p p.appctxで(Springの)ApplicationContextを参照できるなどの使い方がある。
ExcelFunctionクラス (*) var s = ExcelFunction.FIND(...); (Wagby関数の利用で解説)
Jfcerrorクラス (*) var error = new Jfcerror; (エラーメッセージで解説)
Jfcwarnクラス (*) var warn = new Jfcwarn; (エラーメッセージで解説)
Jfcinfoクラス (*) var info = new Jfcinfo; (エラーメッセージで解説)
stdout (*) java.lang.System.out stdout.println(...); Java 8 利用時のみ。
ExcelFunction, Jfcerror, Jfcwarn, Jfcinfo, stdout は、基本テンプレートで宣言したものです。
ストアモデル以外のオブジェクトは、存在しない場合もあります。例えば検索画面の操作でない場合、コンディションモデルは含まれません。
状況によってはストアモデルの取得もできない場合があります。例えば削除処理の場合、ストアモデルは消えています。
トランザクションスクリプトでは、トランザクションの範囲内として指定された複数のストアモデルを扱うことができます。
トランザクションスクリプトでは、トランザクションの対象となる繰り返しコンテナもオブジェクトとして扱うことができます。

開発者は WEB-INF/script/myfunction.js を用意することができます。 このファイルが存在した時、その内容をスクリプトに含めます。

正確には、スクリプトの後にmyfunction.jsのコードがコピーされます。

利用例

スクリプトで、次のように記載します。

stdout.println(foo(1,2));

開発者は myfunction.js を用意し、関数 foo を定義します。

function foo(a1,a2) { 
  return a1+a2; 
}

スクリプトを実行すると、コンソールに 3.0 と表示されます。

作成した myfunction.js は、customize/webapp/WEB-INF/script フォルダに保存してください。(インストール直後の状態では、WEB-INF フォルダ内に script フォルダはありませんので、これも作成してください。)次回のビルドから反映されるようになります。