Salesforceアダプタシリーズの違いについて教えてください

Q.

Salesforceアダプタシリーズ(Salesforceアダプタ、Salesforce Bulkアダプタ、Salesforce Metadataアダプタ)の違いについて教えてください。

A.

Salesforceアダプタシリーズは、3つのアダプタに大別され、またその中に多くのアイコンを含んでいます。
ここでは、どのアイコンを選択すべきかについて、説明いたします。

3つのアダプタ

まず他と大きく異なるのは、Salesforce Metadataアダプタです。他の2つはオブジェクトに格納されているレコードに対する操作をするのに対して、Metadataアダプタではオブジェクトの定義情報を変更するアダプタになります。オブジェクトの定義情報としては、テーブル名、項目名、選択リスト項目/複数選択リスト項目の選択肢などが含まれますが、Metadataアダプタで操作できるのは、選択リスト項目/複数選択リスト項目の定義です。

次にSalesforceアダプタとSalesforce Bulkアダプタの違いを説明いたします。
Salesforce Bulkアダプタは主に大量データの操作に適したアダプタになります。ただしレコードの取得はできません。よって、データがそれほど大量ではない場合、レコードの取得を行いたい場合は、Salesforceアダプタを使用することになります。またSalesfoceアダプタには、ユーザーのパスワードリセットやメール送信など、ユーティリティ系の機能も備えています。

以上をまとめると、次のようになります。

アダプタ名操作対象説明
Salesforceレコード(RDBでのDMLに相当)

以下の操作が可能
・レコードの取得
・レコードの追加・更新・削除(INSERT、UPDATE、UPSERT、DELETE)
・パスワードのセット、リセット
・ゴミ箱の操作(ゴミ箱を空にする、ゴミ箱から復元する)
・メールの送信
・SOQLのWHERE句に使用する文字列の形成
・複数オブジェクトの同時更新(INSERT、UPDATE、DELETE)

Salesforce Bulkレコード(RDBでのDMLに相当)

大量レコードの操作(INSERT、UPDATE、UPSERT、DELETE)が高速


※本アダプタはセールスフォース社が提供するBulk APIを利用しておりますが、Bulk APIでは数値型および通貨型の値が64ビット倍精度型として扱われるため、桁数が多い場合に丸め誤差が生じる点に注意が必要です。(たとえば整数値の場合15桁を超えると丸め誤差が生じます。)

Salesforce Metadataオブジェクトの定義(RDBでのDDLに相当)選択リスト項目/複数選択リスト項目の選択肢の追加、更新、削除、並び替えが可能

Salesforceアダプタにあるレコードの取得処理

Salesforceアダプタには複数のレコード取得処理があります。どれを使うかは次の表をみて、上から検討するのが一般的です。
また「ファイル出力」欄に○ヶ付いているものは、ドキュメントや添付ファイルをダウンロードする機能があります。

アイコン名説明ファイル出力
データ読み取り(IDによる検索)IDをキーにしてレコードを取得する場合に使用します。
データ読み取り(レプリケーション)一定期間に挿入・更新されたレコード もしくは 一定期間に削除されたレコード を取得する場合に使用します。 
データ読み取り(クエリー)1つのオブジェクトに対して、条件を指定してレコードを抽出する場合に使用します。
データ読み取り(親→子リレーション)2つのオブジェクト(1つのオブジェクトおよびその子オブジェクト)からレコードを抽出します。
データ読み取り(子→親リレーション)1つのオブジェクトからレコードを抽出すると同時に、リレーションシップ項目の場合にリレーション先の値をとることができます。
データ読み取り(SOQL実行)

最も汎用的な操作です。SalesforceのSOAP APIで定義されているSOQLの構文をそのまま記述することができます。

INSERT、UPDATE、UPSERTの使い分け

INSERTはレコードの挿入、UPDATEはレコードの更新を行う操作です。UPSERTは「外部キーに指定したある項目をキーにして、同じキー値があればUPDATE、なければINSERTを行う」という操作になります。
以上により、UPDATEおよびUPSERTの場合は、キーとして使う項目を1つ指定する必要があります。

またUPDATEの場合、複数の項目をキーとして利用することが可能になっています。ただしその場合は、セールスフォースに対してクエリを発行してキーと合致するレコードがあるかを確認するため、処理速度は遅くなります。またこの設定において、「キーと合致するレコードがなければINSERTを行い、合致するレコードはUPDATEを行う」というUPSERTのような挙動となる設定も可能です。

以上をまとめると、次のようになります。

実行したいことキー項目利用するアイコン
レコードの挿入不要INSERT
レコードの更新1項目以上UPDATE
同じキーのレコードがあれば更新、なければ挿入1項目UPSERT
2項目以上UPDATE