intra-mart Accel Platform スクリプト開発モデル プログラミングガイド 第15版 2018-08-01

ジョブスケジューラ

ジョブスケジューラとは

ジョブスケジューラとは、ジョブと呼ばれる処理単位に事前にいつ実行するかというスケジュールを定義しておくことで
自動的に実行する機能です。1つの業務を定期的に複数回実行する場合や、大量データを扱うため時間かかる業務処理を
夜間に実行する場合などに利用します。
intra-mart Accel Platform のジョブスケジューラは、このような要求を実現するためサーバ上の Java や
サーバサイドJavaScript で構成された任意の業務処理をスケジュールで定義されたタイミングで
自動的に実行する機能や、実行状況の監視や実行結果の管理を行うための機能を提供します。

仕様

ジョブスケジューラの仕様については、ジョブスケジューラ仕様書を参照してください。

サンプルプログラム

サンプル内容

固定文字列”Hello.”に、”message”というキーに設定されたパラメータ値を連結して出力します。

プログラムソース

/**
 * @parameter message world!
 */
function execute() {
  let accountContext = Contexts.getAccountContext();
  let jobSchedulerContext = Contexts.getJobSchedulerContext();
  let message = jobSchedulerContext.getParameter('message');
  if (null == message) {
     return {
        status : 'error' ,
        message : 'パラメータにメッセージが存在しません。'
     };
  } else if ('' == message) {
     return {
        status : 'warning' ,
        message : 'メッセージが空です。'
     };
  }
  Debug.console('Hello. ' + message);
  return {
     status : 'success' ,
     message : 'ジョブが正常に実行されました。'
  };
}
サーバサイドJavaScript のジョブプログラムは、任意のJSファイルにexecute関数を記述します。
ジョブ開発者は、このexecute関数にジョブ処理で実行したいプログラムを記述します。

コラム

ジョブ処理では、アカウントコンテキストとジョブスケジューラコンテキストが取得可能です。
この2つのコンテキストを利用して任意の業務処理を記述します。

アカウントコンテキスト

アカウントコンテキストには、ジョブスケジューラから実行されたことを表すアカウント情報が格納されています。

ジョブスケジューラコンテキスト

ジョブスケジューラコンテキストには、ジョブ、ジョブネット、トリガの定義情報と実行日時などの
実行情報が格納されています。

ジョブの実行方法

コラム

ジョブ管理画面からジョブを実行する方法に関しては、「テナント管理者操作ガイド」 - 「ジョブを設定する」 を参照してください。

ジョブ・ジョブネットを登録する

ここでは、ジョブを登録する例を示します。
//ジョブスケジューラマネージャの作成
var manager = new JobSchedulerManager();

var jobNames = {};

jobNames['ja'] = {
   name : 'サンプルジョブ',
   description : 'ジョブのサンプルです。'
};

var job = {
   categoryId : null, // ジョブカテゴリID。
   id : 'sample-job', // ジョブID。
   jobPath : '/app/job/sample_job', // 実行プログラムのパス。
   jobType : 'SCRIPT', // ジョブ実行言語。
   localizes : jobNames, // 国際化情報オブジェクト。
   parameters : {} // ジョブパラメータ。
}
//ジョブの登録
var result = manager.insertJob(job);
if (result.error) {
   // エラー処理
}
ここでは、ジョブネットを登録する例を示します。
//ジョブスケジューラマネージャの作成
var manager = new JobSchedulerManager();

var jobnetNames = {};

jobnetNames['ja'] = {
   name : 'サンプルジョブネット',
   description : 'ジョブネットのサンプルです。'
};

var useJobIds = [ 'sample-job' ];

var jobnet = {
   categoryId : null, // ジョブネットカテゴリID。
   disallowConcurrent : false, // 並列実行不可。
   id : 'sample-jobnet', // ジョブネットID。
   jobIds : useJobIds, // 実行ジョブ配列。(ジョブの実行順にジョブIDを設定した配列です。)
   localizes : jobnetNames, // 国際化情報オブジェクト。
   parameters : { message : 'world!' }, // ジョブネットパラメータ。
   useJobIds : useJobIds // このジョブネットで利用するジョブの配列。
}
//ジョブネットの登録
var result = manager.insertJobnet(jobnet);
if (result.error) {
   // エラー処理
}

ジョブを実行する

ここでは、指定したジョブネットを即時実行する例を示します。
//ジョブスケジューラマネージャの作成
var manager = new JobSchedulerManager();

var triggerId = 'sample-trigger';

var result = manager.findTrigger(triggerId);
if (result.error) {
   var repeatTrigger = {
      id : triggerId, // トリガID。
      type : 'RepeatTrigger', // トリガ種別。
      enable : true, // 有効。
      jobnetId : 'sample-jobnet', // ジョブネットID。
      count : 1, // 実行回数。
      interval : null // 実行間隔(秒)。
   }
   // トリガーが存在しない場合は新規登録
   result = manager.insertTrigger(repeatTrigger);
} else {
   // 登録済みのトリガーを再登録して実行
   result = manager.updateTrigger(result.data);
}
if(result.error){
   //エラー処理
}

intra-mart Accel Platform 2014 Winter以降のジョブの即時実行方法

以下の方法でジョブの即時実行をスケジュールすることができます。
// ジョブスケジューラマネージャの作成
var manager = new JobSchedulerManager();

// 指定したジョブネットの即時実行
var result = manager.execute('sample-jobnet');
if (result.error) {
   // エラー処理
}