LoginSignup
2
3

More than 1 year has passed since last update.

Dataloaderの豆知識

Last updated at Posted at 2023-02-13

前書き

Salesforceの業務の中に、データ導入(本番初期データ投入、本番データ移行)の場面は多く存在します。今更に聞けない言葉やテクニックを本記事にてご紹介いたします。

前提知識は特に必要ないですが、本記事の中に、Salesforceの主従関係、入力規則、重複ルール、トリガー、ワークフロールール、プロセスビルダー、フローなどの言葉を使っています。これらの機能を簡単に把握しておくことをおすすめします。

Salesforce DataLoaderとは

image.png
image.png
image.png
image.png

https://help.salesforce.com/s/articleView?id=sf.when_to_use_the_data_loader.htm&type=5
抜粋:
image.png

1押すのテクニック:外部Idの活用

https://www.circlace.com/blog/salesforce/using-external-id
抜粋:
image.png

リレーション設定におけるMapping作成方法

image.png

外部Idを使用しなければ...

下記、赤字部分は増やされた手順になります。結構不便だと感じされないでしょうか?さらに、DataLoaderを使用する場面は、本番の場合は多く、本番作業時に、慌ててvlookupをあまりお勧めしないですね。本番作業する際に、出来れば、事前に使用するCSVを準備しておく、レビューを済ませておきたい。
⇒ですので、外部IDの活用を強くお勧めします。

(1) 取引先をSalesforceへインポート。
(2) 取引先のIdを入手するため、(1)インポートした取引先をSalesforceよりエクスポート。
(3) 取引先責任者のCSVに(2)のSalesforceIdを追記。(Excelのvlookupなどを使用して加工)
(4) (3)の取引先責任者CSVよりSalesforceへインポート。

テストデータ作成への横展開

image.png

image.png

/**
 * Author	:	Jitendra Zaa
 * Desc		:	Sample Test class to demonstrate usage of Test.loadData to import related records 
 * */

@isTest
public class StaticResourceTest {

      static testmethod void staticResourceLoad(){
        
        //Load CSV file saved in static resource  
        List<SObject> lstAcc = Test.loadData(Account.sObjectType,'AccountLoad_Test');
        List<SObject> lstCon = Test.loadData(Contact.sObjectType,'ContactLoad_Test');
        
        //Confirm that total number of accounts created are 5
        System.assertEquals(lstAcc.size(), 5);
        
        for(Account a : [SELECT Id, Name, (SELECT FirstName,LastName FROM Contacts) FROM Account where Id IN :lstAcc]){
            //confirm that every Account has associated child contact
            System.assertNotEquals(null, a.contacts);
            
            //confirm that every Account has exactly 2 contacts
            System.assertEquals(a.contacts.size(), 2);
        }
    }
}

知らないとハマりやすい:日付の扱い

https://sf.forum.circlace.com/articles/585167684782526464
抜粋:
image.png

Use Bulk Apiとは

https://help.salesforce.com/s/articleView?id=sf.configuring_the_data_loader.htm&type=5
抜粋:
image.png

serial modeについて

serial modeとは、レコードを分割し、処理を並列化にすることで処理スピードの高めを図ります。
image.png

下図のように、「Use Bulk API」をチェックしないと、活性化にならない。
serial modeは名前通り、(デフォルトでは)チェックしないと並行ジョブになる。チェックを入れると、ジョブは順番で実行されます。

image.png

image.png

serial modeの考慮事項

image.png

別スレッドになってしまった場合は、ロック可能性は高くなります。
image.png
回避策:子どもレコードを親でソートする
image.png

Api消費の計算

データローダによって消費された API 呼び出しを計算する
https://help.salesforce.com/s/articleView?id=000386578&type=1
抜粋:

たとえば、API 要求の制限が 15,000、バッチサイズが 200 の場合、24 時間ごとに (15,000×200) または 3,000,000 レコードの操作を実行することができます。
データローダで [Use Bulk API] オプションを使用し、バッチサイズが 2,000 の場合、24 時間に (15,000 X 2,000) または 30,000,000 レコードで操作を実行することができます。

Hard Deleteについて

image.png
image.png

プロファイルや権限セットにて(システム)権限の「Use Bulk Api」を付与する必要。
標準プロファイルの場合は、チェックを付けられないため、プロファイルをコピーしてカスタムプロファイルにしたら、付けられます。実際の業務にカスタムプロファイルをするのにハードル高い場合、権限セットをおすすめです。
image.png

エラーと後続レコード

CSV の中にエラーとなるレコードが含まれている場合の後続投入レコードへの影響
https://help.salesforce.com/s/articleView?id=000386170&type=1
抜粋:

例えば以下の状況があったとします。
レコードの全処理件数 [600]
データローダのバッチサイズ [200]
エラーとなるレコード [201件目, 250件目]
APEX トリガが設定されていない場合は 201 件目及び 250 件目レコードのみエラーとなり、後続のレコードに影響はありません。
しかし、データローダの処理時に APEX トリガが実行される場合、バッチサイズの単位で処理が実行されるため、
全処理レコードが [600件] でバッチサイズが [200] の場合、以下のように分割されます。
[1~200件] [201~400件] [401~600件]
上記のような状況で [201件目,250件] にエラーとなるレコードがあり、
トリガの処理が実行される場合には、201 ~ 400件目のデータがすべてロールバックされますので、後続のレコード(同じバッチに含まれるレコード)に影響を与える場合があります。

バッチサイズを1にする場合

価格表エントリみたいに、後続レコードは前のレコードを依存している場合、バッチサイズを意図的に小さいな数字:1を採用する場合もあります。

Insert null valuesについて

[Use Bulk API]のチェックを入れている場合は、このオプションは活性化にならない。
image.png

大量データについて

ユーザインターフェース

「レコードの作成時に監査項目を設定」および「無効な所有者のレコードを更新」ユーザ権限を有効化

データローダしか出来ない機能

例:履歴オブジェクト

Salesforce Shield

Nameは暗号化した場合は、外部Idみたいに自動リレーション出来ない。
外部Idは暗号化出来ないため、外部Idは自動リレーション使用可能。推奨

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3