こんにちは、アンダーソンです。
ここ最近データローダに悩まされ続け、データローダとは
友達と言えるくらいまで仲良くなったつもりなので、
データローダの使い方に関する記事を書いていこうと思います。
基本的な使い方
データローダはSalesforceの組織に対して下記のことが行えます。
- データの挿入
- データの更新
- データのUpsert
- データの削除
- データのHardDelete(権限付与&BulkApi使用時)
- エクスポート
- エクスポートオール
この内わかりやすいのは挿入と、更新、削除、エクスポートかと思います。
更新削除はIdを指定して指定の項目を、エクスポートはSOQLの知識が必要なので
かけない人には難しいのかもしれません。
UpsertはIdや一意の外部キーに対して、レコードの更新やレコードがない場合には挿入処理を行えます。また参照関係にあるレコードの一意のキー(これも外部キーはOK)を設定してあげることでそのレコードに対する参照も設定することができます。
HardDeleteはゴミ箱にいかない完全な物理削除です。
使用者に対しての権限の付与とBulkAPIモードにしておく必要があります。
ゴミ箱に残しておく必要のないデータはこの方法で削除してしまって大丈夫かと思います。
ExportALLでは逆にゴミ箱に入っているデータを含めたエクスポートが可能です。
HardDeleteもこれもどういう時に使うかわからないですが、
頭の片隅においておくと何かあった時に対応できますね。
今回は基本的な使い方のご説明をしていきます。
まずは設定

データローダの設定画面です。
設定ではいろいろ決められるんですが、見落としがちなのが、
Insert null valuesでこれにチェックが入っていないと、
Null値での上書きはできないので気をつけましょう。
またSOAPAPIよりも高速に処理を行いたい場合はUse Bulk APIを使って
処理を行います。また前述のHardDeleteを行う際はBulkAPIでないとダメです。
ただし、BulkAPIを使うとInsert null valuesはチェックできず、null値での上書きはできなくなるので注意です。
BulkAPIの使いどころ
何十万件以上のレコードを処理するときは設定しておいた方がいいようです。
APIのコール数が少なくなるなどメリットはあるのですが、非同期かつ並列処理のため、
レコードの競合が起こるために処理が失敗することがある為、使い所に注意です。
主従関係の子レコードとかを更新とかする時には
Enable Serial mode for Bulk API(一括 API に対して順次モードを有効にする)
を有効にするとOKみたいですが、読み込みに時間がかかるみたいですね。
ちなみにBulkAPIの設定をするとバッチサイズは1万までOKになりますが、
僕の苦い思い出では30件をリストビューで一括更新するとトリガでSOQL101回がでたので、そういった実装をしている組織ではできないですね。
このバッチサイズもデータローダを使う際に結構ポイントになるので要注意です。
入力規則やプロセスビルダー も加味する
データローダでInsertやUpdateする際はもちろん入力規則、プロセスビルダー、ApexTriggerも加味した上で処理を行わないといけません。
例えば、あるデータが組織で作成、その後そのデータが引っかかる入力規則が作成された後にデータローダでそのデータを更新する。。。
こんな時には入力規則にかかる項目をしっかり更新してあげないと
もちろんエラーで更新できませんので要注意です。
上記のことはプロセスビルダーやApexTriggerにも言えることなので
あらかじめの確認をしておくのが無難です。
項目定義のMappingはSaveしておこう
データローダは項目のMappingを残しておくことができるので是非活用しましょう。

Mappingの下のこのボタンでsdlファイルが作成されますので、
よく使うオブジェクトなどは残しておくと次からMappingを何度もしなくていいので
便利ですね。
まとめ
使い方というか注意点みたいになりましたが、
基本的な部分でのまとめになります。
ちなみに組織に入力規則やプロセスビルダー が多いとかなり時間がかかりますので、
実行する際は時間に余裕を持っておくのとパソコンがスリープになって
セッションが切れないように注意をしておきましょう!
ここで勉強した事を是非、試験問題にチャレンジして試してみましょう!

その他の試験はどんなものがあるかみてみましょう。
