2021/02/2

SalesforceにおけるBatchとは?Batchの作成、実装方法をご紹介

 
  

SalesforceにおけるBatchとは?

Batchとは、一括処理のことです。 Salesforceでは、Apexという独自のプログラム言語を使います。Batch処理は同期しないで実行するので、実行時にプラットフォーム上のデータベースなどの大きな処理をせずに処理が実行できます。 例えば、その日の売上を簡単にまとめて計算することができます。製品の売上や営業の契約数など大量のデータをコンピュータに負荷をかけずに行うことができるので、在庫管理などもできます。 また、プログラム開発のテストを自動化するのにも活用が可能です。Batch処理を行うことで、たくさんあるパターンをテストすることができます。設計段階からテストをすることができるので、問題をはやく見つけることもできるでしょう。 また、銀行関係でもBatch処理は有効です。日中にBatch処理を行うとコンピュータのデータ容量を多く使用します。そのため、夜間にBatch処理を行うことがあります。給与の振り込みや企業間の取引などが多いと言えます。 また、銀行以外の企業でもコンピュータの容量を使用して、業務に支障をきたすことを恐れ、夜間に売上データや生産管理などを行っている企業は多いでしょう。ですので、現在ではSalesforceのBatch処理は各企業や店舗で使用されています。

SalesforceのBatchの作成

SalesforceのBatch処理は、まずBatchファイルというものを作成し、実行します。BatchファイルとはBatch処理をする際にお願いしたいことを並べたものです。 例えば、売上処理のBatchを作成するのであれば、ジャンル別に集計する、合計を集計する、差額を集計する、データを送信するなどの処理を書き記します。 SalesforceのBatch処理はいくつか段階に分かれているので、段階ごとに説明していきます。

Batch用インターフェース

SalesforceでBatch処理をする際は、まずBarch用インターフェースを用意します。インターフェースには、継承クラス、startメソッド、executeメソッド、finishメソッドが必要です。 SalesforceにApex一括処理Batch処理を行うために、Database.Batchableインターフェースを継承するApexクラスを実装します。

Batchのstartメソッド

インターフェースメソッドのexecuteにデータを渡すには、startメソッドを作成する必要があります。startメソッドは、Database.Querylocatorオブジェクトやジョブにデータを渡し、オブジェクトに含まれるオブジェクトを返すのです。 簡単なクエリを作成して、一括処理ジョブのオブジェクト範囲を作り出す方法もあります。 Database.Querylocatorオブジェクトを使い、クエリに取得される情報の合計数に対するBatch処理は同期しないで実行するので、実行時にプラットフォーム上のデータベースなどの大きな処理をせずに処理が実行されます。 例えば取引先のデータを手に入れたい場合、アカウントオブジェクトに対するApexの一括処理は、5,000万件ほどQueryLocatorを返すことができます。また、一括処理に複雑な条件を付けたい場合は、Iterable オブジェクトを使用すると便利です。 出典:salesforce公式サイト 参照:https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_batch_interface.htm

Batchのexecuteメソッド

Batch処理を単位ごとに処理を行っていくのがexecuteメソッドです。executeメソッドでは、メソッドにデータを渡すBatchごとに呼び出しを行います。 Database.BatchableContextのオブジェクトを照らし合わせる、Listのリストやパロメーター化されたリスト、Database.QueryLocatorを使用しているときは返された値を使います。 Batch一括処理はstartから順番に行われるのです。ただし、要素によっては順番が変わることもあります。

Batchのfinishメソッド

Batchのすべての処理が終わった後に呼び出しを行うのがfinishメソッドです。finishメソッドは、確認メールの送信や後処理のために使用されることが多いと言えます。 一括処理の各実行は、個別のトランザアクションとされます。例えると、1,000件一括処理を行うと、Database.executeBatchから任意のパロメーターを指定しないで実行すると、1,000件の内の200件が5つのトランザアクションとされます。 Batch処理を同期しないで実行するので、実行時にプラットフォーム上のデータベースなどの大きな処理をせずに処理が実行され、各トランザアクションでリセットされるのです。 最初のトランザアクションで成功しても次で失敗した場合、使用したデータベースのロールバックは行いません。 出典:salesforce公式サイト 参照:https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_batch_interface.htm

SalesforceのBatchの実行

Batchのインターフェース部分の継承メソッド、startメソッド、executeメソッド、finishメソッドを完成させ、一括処理のメソッドを作成します。一括処理のメソッドが完成すると、Batchの実行が可能です。 一括処理を行う際、不具合や例外が出る場合もあります。どこに不具合が出ているのか、どの時点でエラーが発生しているのか知るための方法を紹介します。 Database.BatchableContextを作成して関連付けがされているオブジェクトを文字列で返すことにより、Batchの処理の進行状況を確認しましょう。finishメソッドの中に入れるようにしましょう。 また、例外を取得する場合は、try-catchの処理を入れます。具体的にどのような処理をするかというと、対応できないものだと開発者にメールが届くようにします。対応する必要のある例外は、ログとして出力するなど処理をするようにしましょう。 例外処理をしないとトランザアクションにメールがロールバックされてしまうので、Batchの一括処理で指定した条件でメールを投げる処理をしたい場合、メールが来ないという不具合が起きてしまいます。

Batch処理の注意点

Batch処理は大量のデータを処理するのに便利です。しかし、SalesforceだけのBatch処理に限らず、注意点もいくつか存在します。 Batch処理はデータを一括処理をするものですが、リアルタイムで処理をするものではありません。例えば個人の買った商品の集計や処理はBatch処理では行うことができません。 また、データを常に確認できないので、プログラムを担当した人しかBatchの中身を知ることができないという問題があります。情報共有が常にできないというデメリットがあります。 加えて、プログラム担当者がいないときにBatch処理に問題が起きると、対応が遅れる可能性もあるのです。データがあまりにも多いと処理が遅れることもあります。 例えば銀行や企業が夜間Batchを行うのはなぜなのかというと、コンピュータの容量を使用しすぎてしまい、業務に支障をきたす恐れがあるからです。 Batch処理にも注意点が存在するので理解しておきましょう。

SalesforceのBatchを活用しよう

今回はSalesforceのBatch処理についてご紹介しました。SalesforceのBatch処理はデータの一括処理として幅広く活用することが可能です。大量のデータを一括処理できるので、店舗の在庫管理や顧客の管理、売上管理などができます。 また、プログラム開発のテストの自動化や銀行などの振り込みや企業間の取引など処理する夜間Batchなどがあります。 使える場面が多いので、ぜひ活用できるようにしていきましょう。]]>

ITエンジニアへのキャリアチェンジならキャリアチェンジアカデミー

この記事の監修者・著者

株式会社オープンアップITエンジニア
株式会社オープンアップITエンジニア
未経験からITエンジニアへのキャリアチェンジを支援するサイト「キャリアチェンジアカデミー」を運営。これまで4500人以上のITエンジニアを未経験から育成・排出してきました。
・AWS、salesforce、LPICの合計認定資格取得件数:2100以上(2023年6月時点)
・AWS Japan Certification Award 2020 ライジングスター of the Year 受賞

おすすめの動画

  • 【未経験からIT業界へ転職するなら】相談窓口とスキルの獲得はここで解決!IT転職が一気に有利に!【キャリアチェンジアカデミー】

  • 【費用一切不要】未経験からIT業界へ転職するならまずはここへ相談!【キャリアチェンジアカデミー】

  • 【何のエンジニアになれるのか?】未経験からITエンジニアを目指すとこんな道がある【キャリアチェンジアカデミー】