セールスフォースお助け隊ブログ | Salesforce
セールスフォース開発者のブログRSS
Apexクラスで作成したバッチ処理を1時間未満の単位で実行させる方法

Apexクラスで作成したバッチ処理を1時間未満の単位で実行させる方法

2011年8月28日 14:17

みなさんこんにちは。
Salesforceお助け隊の西槇です。

Apexクラスで開発したバッチ処理をセールスフォース上で定期的に実行するには、
Apexスケジューラーを使用することになるかと思います。

先日行った案件では、もっと短い間隔でバッチ処理を実行する必要がありました。
セールスフォースでは、常に常駐し続けるようなデーモンプログラムの開発はできないため、
定期的に実行する処理を行う必要があります。

今回私が用いた方法は、セールスフォースのサイトの機能と、
外部でレンタルしているサーバ内のスケジューラ機能(Cron)を組み合わせて実現しました。

【手順】
1)Visualforceページを作成する。
  作成するVisualforceページは以下のような仕組みにします。
   ■apex:pageタグ
    ・controllerに、Apexクラス名を指定する。
    ・Actionに、Apexクラスのメソッド名を指定する。
   
   ※Apexクラスのコンストラクタでバッチ実行しようとしてしまうと、データ更新を行う処理があると
    エラーになりますので、Actionにメソッド名を指定してください。
    詳しくは【Apex】コントローラクラス(Apexクラス)のコンストラクタでは、DMLの実行はできない。をご覧ください。
   
   ページで表示する内容は、処理が正常に終了したかどうかをレスポンスコードを
   表示するような仕組みにすると良いでしょう。
  
  
2)サイトの設定を行う。
  どこからでもバッチが実行できてしまうと、攻撃されてしまう恐れがありますので、
  サイトに接続できる、接続元IPアドレスを絞ります。
  サイト->公開アクセス設定->ログイン IP アドレスの制限 を開き、レンタルサーバのゲートウェイIPアドレスを指定します。
  
 
3)レンタルサーバ側でシェルスクリプトを作成する。
  Salesforceのサイトにアクセスさえしてくれればよいので、とても簡単なスクリプトで済みます。
  最低限でよければ、以下のようなコードだけあれば良いでしょう。
  
  「wget --delete-after {サイトURL}」
  
  シェルスクリプトが正しく実行されるか、レスポンスコードが正しく帰ってくるかを
  手動で実行して確かめてください。
  
  
4)Cronの設定を行う。
  レンタルサーバ側でシェルスクリプトを定期的に実行するために、
  Cronの設定を行います。
  
  レンタルサーバによっては、Cronに設定できるのは、perlもしくはphpに限られていることもあります。
  そのような場合には、3)で作成するスクリプトを、対応するプログラム言語で
  作成する必要があります。
  
  
【応用編】
 1)で作成するVisualforceページで、レスポンスコードをXML形式で表示するようにし、
 3)のスクリプトで、XMLを外部サイトから読み取るような仕組みにすれば、
 処理に失敗した場合に、アラートメールを送信するようなこともできます。
 

「セールスフォースお助け隊ブログ」へのコメントやご意見等ありましたら
ファンページまでお願いします。  Facebookのファンページ

Yahoo!ブックマークに登録 Google ブックマーク はてなブックマーク Livedoorクリップ

← 前のエントリー     次のエントリー →

顧客管理システム Salesforce CRM