スクリプトの実行

最終更新日: 2022年6月20日

利用方法

開発者が用意した「スクリプト」を定期的に実行することができます。

ジョブの設定

設定方法

  1. 管理者権限をもったアカウントでログオンします。
  2. メニューから「ジョブ管理... > ジョブスケジュール検索」画面を開きます。
  3. 「登録画面へ」ボタンを押下し、ジョブスケジュールの新規登録処理を行います。
  4. ジョブ名から「ScriptCodeRunner」を選択します。その下の説明欄に「スクリプト実行」と表示されます。
    「ScriptCodeRunner」を選択
  5. ジョブパラメータの「追加」ボタンを押し、キーと値を指定します。
    下図ではキーを「filename」とし、パラメータに「myjob.js」というファイルを指定しています。拡張子は .js とします。 キーと値の記述方法については、指定できるジョブパラメータをお読みください。
    myjob.js
  6. ジョブの実行スケジュールを指定します。
  7. 「有効」にチェックを入れます。これにより、このジョブが有効になります。
    ジョブを有効にする
  8. 「ジョブ実行するアカウント」を指定します。ここでは"jobadmin"とします。
    「パスワード」欄には上で指定したアカウントのパスワードを入力します。
    実行アカウントとパスワードを入力
    アカウント"jobadmin"を利用するには事前に「準備:ジョブ実行アカウントを利用可能にする」を行う必要があります。
  9. 「保存」ボタンを押してジョブスケジュールを登録します。指定した時間になると、コマンドが実行されます。
    ジョブスケジュールの登録が完了した

ワンポイント

ここでいうスクリプトは、アプリケーションサーバで稼動するものです。

スクリプトファイルの作成

スクリプトとは

Java が標準で提供する「サーバサイド JavaScript」をいいます。Wagby では、この仕組みを利用して JavaScript 文法を使った業務処理プログラムの開発を行うことができます。詳細は「リポジトリ > 業務ロジック」をお読みください。

スクリプトファイルのテンプレート

スクリプトファイルのテンプレートは「リポジトリ > 業務ロジック > 生成されるスクリプトファイルの詳細 > 基本テンプレート」を参照してください。次のようになります。

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;
  ...ここに開発者独自のコードが埋め込まれる...
}

スクリプトには 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 フォルダは存在しませんので、手動で作成してください。)

function process() {
  print("Hello,JobScript");
}

上記スクリプトを保存後、ScriptCodeRunner ジョブを設定します。画面から「今すぐ実行」ボタンを押下して呼び出します。wagbyapp を実行中の Tomcat コンソールに Hello,JobScript と表示されます。

ログ出力

Tomcat コンソールではなくログファイル (system.log) にメッセージを残すこともできます。暗黙変数 scriptLogger を利用できます。

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:targetdate2025-12-01
param:owneradmin
パラメータを指定する

スクリプトファイル中では、パラメータ名を直接、内部の変数として利用できます。型は文字列となります。

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();
  • スクリプトを実行したアカウントは、p.user.username で取得することができます。
    例: print(p.user.username);

ジョブの実行を停止する

ジョブを一時的に無効にすることができます。

  1. 管理者権限をもったアカウントでログオンします。
  2. 管理処理メニューから「ジョブ管理... > ジョブスケジュール検索」画面を開きます。
  3. 該当する「ジョブスケジュール」を検索し、更新画面を開きます。
  4. 「有効」フラグについているチェックをはずし、保存します。
    ジョブを無効にする

実行結果をメールで送信する

ジョブの実行結果をメールで送信することができます。 スクリプト内で return で返す文字列がメールの本文になります。

多重実行の抑制

ジョブの多重実行を行うことはできません。

あるジョブを 1 分毎に起動させるようにした場合、1 分後にこのジョブの実行が終了していなければ、新しいジョブは実行されません。

すぐに実行する

時間指定ではなく、このジョブを今すぐ実行することもできます。「ジョブの即時実行」をお読みください。

実行対象 8.3.1

オートスケール環境でない場合、常に "1インスタンス" としてください。

オートスケール環境でジョブを運用する場合、"1インスタンス" と "全インスタンス" を選択することができます。[詳細...]

ログの確認

正常メッセージをinfoログに出力している場合

スクリプト中にscriptLogger.info("(メッセージ)")などとinfoレベルのログを出力している場合、システムログ閲覧でINFOログレベルで絞り込み、かつキーワードにジョブファイル名(例えばmyjobなど)を指定することで、対象スクリプトのログに絞り込んで出力させることができます。

ログレベルINFO、スクリプトファイル名の指定

例外発生を確認する

スクリプト中にthrow new Packages.jp.jasminesoft.jfc.core.exception.BusinessLogicException("エラーメッセージ");などと例外を発生させた場合、システムログ閲覧でERRORログレベルで絞り込み、かつキーワードにJFC-00911を指定することで、エラーメッセージの有無を確認することができます。

ログレベルERROR、エラーコード00911の指定