質問
Salesforce旧コネクターの「Bulkデータ書き込み(UPSERT)処理(旧)」で外部IDを複数指定していた処理を、新しいSalesforceコネクターで同様に実現するにはどうすればよいですか?
回答
現行のSalesforceコネクターの「レコード挿入/更新処理」には、旧Salesforceコネクターのリレーションシップ項目定義の機能が実装されていないため、リレーション項目の外部IDを直接入力データに指定することはできず、SFIDを指定する必要があります。
「レコード読み取り(子->親)処理」を活用することで、リレーション項目の親オブジェクト項目まで一括で取得できます。以下の手順で実装することで、外部IDからSFIDを取得してUpsert処理を行うことが可能です。
1. Upsert更新先のデータに対して「レコード読み取り(子->親)処理」で以下を事前取得する
- 更新先データの外部ID
- 更新先データのリレーション項目(SFID)
- 更新先データのリレーション項目の親オブジェクトの外部ID
2. 上記で取得したデータとUpsert用入力データを「更新先データの外部ID」をキーにマージし、リレーション項目のSFIDを取得する
3. Upsert処理の入力データにマージしたデータを指定し、リレーション項目には外部IDではなく手順2で取得したSFIDを指定する
補足
大量データ処理時のメモリ負荷への対策として、以下の方法が考えられます。
■ PSPデータフローや大容量データ処理の有効化
「レコード挿入/更新処理」はPSPデータフローと大容量データ処理をサポートしているため、有効化することでメモリへの負荷を軽減できる可能性があります。
参照:大容量データの対応
■ 「レコード読み取り(子->親)処理」で取得するデータ数の削減
取得対象のレコード数が膨大な場合、任意のWHERE句を指定して取得対象データを絞り込むことを検討してください。
■ 「繰り返し(データ件数)処理」フローを利用したデータ分割処理
CSVファイルから読み込んだUpsert用データを繰り返し基準として「繰り返し(データ件数)処理」フローを配置し、データ1件ずつ処理する方法があります。フロー内で検索対象オブジェクトを読み取る際にWHERE句で外部IDを条件指定することで、取得件数を1件ずつとすることができます。この方法はメモリ使用量の負荷を大幅に軽減できますが、処理時間が長期化する可能性があります。
なお、マージ等のデータ連携用処理で扱えるデータサイズはIntegrateサービスやネットワーク等の稼働環境に依存するため、実際の影響度合いはお客様環境での検証が必要です。
コメント
0件のコメント
記事コメントは受け付けていません。