スクリプトの実行
最終更新日: 2022年6月20日
開発者が用意した「スクリプト」を定期的に実行することができます。
ここでいうスクリプトは、アプリケーションサーバで稼動するものです。
Java が標準で提供する「サーバサイド JavaScript」をいいます。Wagby では、この仕組みを利用して JavaScript 文法を使った業務処理プログラムの開発を行うことができます。詳細は「リポジトリ > 業務ロジック」をお読みください。
スクリプトファイルのテンプレートは「リポジトリ > 業務ロジック > 生成されるスクリプトファイルの詳細 > 基本テンプレート」を参照してください。次のようになります。
スクリプトには process という名前の関数をご用意ください。この関数が実行されます。
作成したスクリプトファイルは wagbyapp/webapps/wagby/WEB-INF/script/__job というフォルダに保存してください。
実際の開発では、customize/webapp/WEB-INF に script/__job フォルダを用意し、ここに保存するとよいでしょう。customize 以下のフォルダに存在するファイルは、ビルド時に常に反映(上書き)されます。
次のファイルを myjob.js として wagbyapp/webapps/wagby/WEB-INF/script/__job フォルダに保存します。(最初、この __job フォルダは存在しませんので、手動で作成してください。)
上記スクリプトを保存後、ScriptCodeRunner ジョブを設定します。画面から「今すぐ実行」ボタンを押下して呼び出します。wagbyapp を実行中の Tomcat コンソールに Hello,JobScript と表示されます。
Tomcat コンソールではなくログファイル (system.log) にメッセージを残すこともできます。暗黙変数 scriptLogger を利用できます。
ジョブに指定するパラメータを複数、指定することができます。
下図のように二つのパラメータを指定する例を説明します。
スクリプトファイル中では、パラメータ名を直接、内部の変数として利用できます。型は文字列となります。
ジョブを一時的に無効にすることができます。
ジョブの実行結果をメールで送信することができます。 スクリプト内で return で返す文字列がメールの本文になります。
ジョブの多重実行を行うことはできません。
あるジョブを 1 分毎に起動させるようにした場合、1 分後にこのジョブの実行が終了していなければ、新しいジョブは実行されません。
時間指定ではなく、このジョブを今すぐ実行することもできます。「ジョブの即時実行」をお読みください。
オートスケール環境でない場合、常に "1インスタンス" としてください。
オートスケール環境でジョブを運用する場合、"1インスタンス" と "全インスタンス" を選択することができます。[詳細...]
スクリプト中に
スクリプト中に利用方法
例
設定方法
下図ではキーを「filename」とし、パラメータに「myjob.js」というファイルを指定しています。拡張子は .js とします。
キーと値の記述方法については、指定できるジョブパラメータをお読みください。
myjob.js
「パスワード」欄には上で指定したアカウントのパスワードを入力します。
ワンポイント
スクリプトファイルの作成
スクリプトとは
スクリプトファイルのテンプレート
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 process() {
print("Hello,JobScript");
}
ログ出力
function process() {
scriptLogger.info("log output test.");
}
指定できるジョブパラメータ
ここで指定できるパラメータ(キーと値)は次の通りです。
キー(パラメータ名)
必須
説明
値の記述例
filename
○
スクリプトファイルを指定します。
myjob.js
maintenance
このジョブを実行する前にメンテナンスモードに切り替えることができます。ジョブ実行後にメンテナンスモードも終了します。
true
maintenanceOption
メンテナンスモード切り替え時にログオン済みであったアカウントへの対応方法を指定します。
logout : ジョブ実行前にログオンしていたアカウントを強制ログアウトさせる。
fail : ジョブ実行前にログオンしているアカウントがいれば、ジョブを失敗させる。
(省略時) : ログオンしているアカウントはそのままに、モードを切り替える。
lock
実行前にロックするモデルを指定します。ジョブ終了後、ロックは解除されます。
customerなどのモデル名英語。空白区切りで複数のモデルを指定できます。
cache
ジョブ終了後、指定したモデルのキャッシュをクリアします。
customerなどのモデル名英語。空白区切りで複数のモデルを指定できます。
param:パラメータ名 7.10
スクリプトに渡すパラメータを指定します。"param:" の後に続く文字列がパラメータ名になります。
param:targetdate
スクリプトでパラメータを受け取る7.10
キー 値
param:targetdate 2025-12-01
param:owner admin
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");
print("targetdate="+targetdate);
print("owner="+owner);
}
例えば今日の日付が必要、という場合は、スクリプト内で new Date() を使って今日の日付を取得するようにしてください。
例: var d = new Date();
例: print(p.user.username);ジョブの実行を停止する
実行結果をメールで送信する
多重実行の抑制
すぐに実行する
実行対象 8.3.1
ログの確認
正常メッセージをinfoログに出力している場合
scriptLogger.info("(メッセージ)")
などとinfoレベルのログを出力している場合、システムログ閲覧でINFOログレベルで絞り込み、かつキーワードにジョブファイル名(例えばmyjobなど)を指定することで、対象スクリプトのログに絞り込んで出力させることができます。
例外発生を確認する
throw new Packages.jp.jasminesoft.jfc.core.exception.BusinessLogicException("エラーメッセージ");
などと例外を発生させた場合、システムログ閲覧でERRORログレベルで絞り込み、かつキーワードにJFC-00911
を指定することで、エラーメッセージの有無を確認することができます。