こんにちは、にいるです。
実務でメールアラートバッチを作成したので、メモとして残しておきます。
・【ヘルプ】Apex スケジューラ
・【ヘルプ】Apex の一括処理の使用
1.スケジューラクラス
汎用的に使用できるようシンプルにしています。
このバッチは取引先にメールを送信するクラスになっています。
1 2 3 4 5 6 7 8 |
public class SendMailAlertScheduler implements schedulable{ //System.schedule('SendMailAlertScheduler','0 0 * * * ?', new SendMailAlertScheduler()); //バッチ匿名実行用コード public void execute(SchedulableContext SC){ SendAlertBatch batch = new SendAlertBatch(); Database.executeBatch(batch,200); } } |
2.バッチクラス
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
public class SendAlertBatch implements Database.Batchable<sObject> { // メール送信内容 Static Final String emailSubject = '件名'; String emailBody = '本文'; public Database.QueryLocator start(Database.BatchableContext BC){ // 今日より前にバージョン更新された副作用連絡票を取得 String query = 'SELECT Name,Email FROM Contact WHERE Email != NULL LIMIT 10'; return Database.getQueryLocator(query); } public void execute(Database.BatchableContext BC, List<Contact> conList){ // メール送信メソッドを呼び出す sendMail(conList); } public void finish(Database.BatchableContext BC){ AsyncApexJob job = [SELECT Id, Status FROM AsyncApexJob WHERE Id = :bc.getJobId()]; } //メール送信処理 public void sendMail(List<Contact> conList){ // メール送信リスト List<Messaging.SingleEmailMessage> sendMailList = new List<Messaging.SingleEmailMessage>(); for (Contact c : conList){ Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage(); // 宛先 mail.setToAddresses(new String[]{c.Email}); mail.setCcAddresses(new String[]{});//必要であればCCも指定する // 件名 mail.setSubject(emailSubject); // 本文 mail.setPlainTextBody(emailBody); sendMailList.add(mail); if (sendMailList.size() > 0) { // 送信実行 Messaging.sendEmail(sendMailList); } } } } |
3.テストクラス
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
@isTest public class SendAlertBatchTest { // テストメソッド @isTest static void test1() { // テストデータ準備 final String cronExp = '0 0 0 * * ?'; List<Contact> conList = new List<Contact>(); for(Integer i = 0;i < 1; i++){ conList.add(new Contact( Email = 'test@test.test.com')); } Insert conList; SendAlertBatch cls = new SendAlertBatch(); String jobId = System.schedule('SendAlertBatch',cronExp, cls); // テスト開始 System.Test.startTest(); Database.executeBatch(cls,200); // テスト終了(登録したスケジュールが実施される) System.Test.stopTest(); // テストデータの確認 } } |
3.まとめ
いかがでしたでしょうか。
バッチクラスだとVisualforceページがないのでなかなかイメージしにくいですよね。
リファレンス見ても一括処理〜と書いてあるばかりでなかなか慣れない点も多いと思います、
僕自身もまだまだ把握できていない部分もあるので、もっとバッチを書いて実力に落とし込んでいこうと思います。
皆さんもぜひ色々と試してみてください。
他にも色々と標準機能やSalesforce機能について紹介していますので、ご覧ください。
ではでは!