Salesforceへの突発的な大量ファイル添付(1日300件)をデータローダーで乗り越えた件~テラテク講師のサポートを受けて~
- 12 時間前
- 読了時間: 8分

この記事で分かること
✓ 手作業では不可能な大量のファイル添付(1日300件)をデータローダーで一括処理する方法
✓ Salesforce特有の複雑なファイル構造のからくり
✓ Successファイルを活用したCSV加工の具体的手順
読了時間:約10分
対象者:Salesforce管理者・エンジニア、大量のデータ移行やファイル管理に頭を抱えている方
目次
はじめに
「Salesforceに大量のPDFまたはJPGなどのデータをファイルに取り込み、各レコードに紐づけたいけど、手作業で行うしかないのかな。」と悩んでいる方はいませんか。
Salesforceを日々活用している皆さん、こんにちは。
今回は、Salesforceの「ファイル」(Salesforce Files)に関する活用術をご紹介します。通常、ファイル一つ一つを手動でアップロードすることが多いと思いますが、ある日「大量のファイルを指定のレコードにまとめて紐付けたい!」というニーズに直面しました。これは手動ではとても間に合わない...!そこで、データローダーを使った一括処理に挑戦した記録です。
突如として現れた課題:ファイルの一括アップロード&紐付け
お客様先では、受付用紙・契約書等の書類や社内承認申請書など、多岐にわたるファイルをSalesforceの各レコードに関連付けて管理しています。
今回は、特例の対応に伴い、急ぎで1日300件のファイルを新規作成されたカスタムオブジェクトレコードに1対1の状態で、一括で紐付ける必要が出ました。
既にローカルに存在するファイルを効率的にSalesforceに取り込み、適切なレコードに紐付ける、このミッションに挑みます。
\Salesforceの設定でお困りですか?専門エンジニアがサポートします/
試行錯誤の始まり:従来のオブジェクト理解の感覚は通用しない?
まずはSalesforceの知識を元にアプローチ。従来のオブジェクト理解で行くと「ファイル添付」であれば、ParentIdに親レコードのIDを指定すれば良かったので、同様に「ファイルオブジェクト」にもレコードIDを指定する項目があるだろう、と調査を始めました。
しかし、これが誤算でした。Salesforce Filesは従来のオブジェクト理解とは全く異なり、単にレコードIDを指定するだけでは紐付けられないことが判明したのです。
判明した「ファイル」オブジェクトの複雑なからくり
まずSalesforceのヘルプを読み漁ってみたものの、なかなか仕組みが理解ができず…。
Agentforceに質問しても、答えとして既に調べた記事の内容と似たような表現でしか返ってきませんでした。
そこで、テラテクにいる講師に相談してみました。講師による易しい説明、ハンズオンを通して理解を進めてみたところ、ファイルは複数のオブジェクトによって構成されていることを知りました。
簡単に言うと、以下の3つの主要なオブジェクトが連携してファイルの管理と紐付けを行っています。
コンテンツバージョン(ContentVersion) :ファイルの「実体」を保持するオブジェクト。ファイル名、ファイルデータ(VersionData)などを格納。ファイルをアップロードする際、まずここにインサートされます。
コンテンツドキュメント(ContentDocument) :コンテンツバージョンの「親」となるオブジェクト。ファイルの「論理的なまとまり」やバージョン履歴を管理します。新しいコンテンツバージョンがインサートされると、それをまとめるコンテンツドキュメントが自動生成されるか、既存のコンテンツドキュメントに紐付られて保存されます。
コンテンツドキュメントリンク(ContentDocumentLink) :ファイルと添付先オブジェクトのレコードを紐付けるためのオブジェクト。ContentDocumentId (どのファイルか) と LinkedEntityId (どのレコードに紐付けるか) の組み合わせで、特定のリソースにファイルを関連付けます。
つまり、「ファイルをレコードに紐付ける」ためには、
まずコンテンツバージョンにファイル本体をアップロードし、そのコンテンツバージョンが属するコンテンツドキュメントのIDを取得する。
次に、そのコンテンツドキュメントのIDを使ってコンテンツドキュメントリンクオブジェクトを対象レコードのIDと紐付けてインサートする。
この2段階のステップが必要だということが調べていく中で分かりました!

いざ実作業スタート、このからくりが分かったので、一つ一つ手作業でやるのは非効率だと判断。データローダで一括処理ができないかと考えました。
今回行った作業手順!
大まかな流れとしては、データローダーを使用して、以下の3ステップでファイルを紐付けていきました。
■データローダ
①【 コンテンツバージョン 】Insert
②【 コンテンツバージョン 】Export
③添付先オブジェクト(レコードID) Export
④【 コンテンツドキュメントリンク 】Insert
ファイルじゃないの!?ってなった方もいらっしゃると思います。
組織上では【 ファイル 】として表示されていますが、前述の通り、ファイルは複数のオブジェクトが絡み合って構成いるため、このような手順になるんです…!
またこの手順はすぐに理解し行ったわけではなく、ここに至るまでに資料の読み込みと講師の方との打ち合わせ、ハンズオンを経て、投入データの作成、手順整理ができました...!その内容を以下共有していきます!
構造の把握と調査
データローダを使ったファイルインポート。しかし、調べた情報だけでは、CSVファイルの正しい形式や値が全く分からず、なかなか投入データが作成できず行き詰っていて、まずはインサートに必要なフィールドと値を正確に把握する必要がありました。
そこでテラテク講師に相談したところ一番手っ取り早いと提案された作業が、
「Salesforce画面でファイルを1件手動で添付してみる。そしてそのレコードをエクスポートして各項目の値に何が入っているか確認する」
ことでした。
この調査を行った結果、データローダーでインサートするCSVファイルに必要なカラムは以下の通りであることがわかりました。
■コンテンツバージョン インサート用CSVに必要なカラム
⇒ファイルのアップロードに当たる作業に必要
PathOnClient:ローカルPC上でのファイルの絶対パス
Title:Salesforce上で表示されるファイル名
Description:ファイルの説明(任意)
VersionData:データローダーがPathOnClientから自動的に読み取るため、CSVには含めません。
■コンテンツドキュメントリンク インサート用CSVに必要なカラム
⇒該当オブジェクトの関連リストにファイルを紐づけるに当たる作業に必要
ContentDocumentId:ContentVersionインサート後に取得できるID
LinkedEntityId:ファイルを紐付けたいレコードのID
ShareType:共有タイプ (例: V=Viewer)
Visibility:表示範囲 (例: AllUsers)
さて、必要なカラムが分かったところで、いよいよCSVファイルを作成します。
この時、「PathOnClientってなんだ…? 完全パスって、一体何をどう書けばいいんだ!?」と正直戸惑いました。ローカルのファイル名だけで良いのか、はたまたWebのURLのような特別な書式が必要なのか、手探りで正しい形式を探しました。
そこで手動作成したデータと比較・参照することで、適切な値や入力形式、各オブジェクトの関連付け方や必須フィールドがようやく明確になった、というわけです。
投入データの具体例
実際、作業に使用したデータのフォーマットはこのようなものになります。
ローカルからデータを取得する場合の完全パスは、フォルダの上で右クリック>パスのコピーの値とイコールなので、そこで照らし合わせて確認するのがおすすめです。

ここで作成したデータを使って、前述した投入手順に沿って作業をしていきます。
■データローダ
①【 コンテンツバージョン 】Insert ⇒ファイルをアップロード
②【 コンテンツバージョン 】Export
⇒ファイルのID(コンテンツドキュメントID)を取得する
③添付先オブジェクトのレコードデータ(レコードID) Export
⇒紐づけ先オブジェクトのレコードIDを取得する
④【 コンテンツドキュメントリンク 】Insert
⇒ファイルと関連先オブジェクトを紐づける※データローダーのマッピング画面において、CSVの「PathOnClient」項目を、「VersionData」と「PathOnClient」へマッピングすることで、ファイルデータが取り込まれます。
添付先オブジェクトの関連からファイルが確認でき、ファイルアプリケーションの共有先に添付先レコードが表示されていることを確認し完了!!
\Salesforceの設定でお困りですか?専門エンジニアがサポートします/
まとめー皆さんもこういうところに気を付けて!
今回の経験から、Salesforce Filesの一括アップロード&紐付けを行う際のポイントを共有します。
・Salesforce Filesの構造を理解する: コンテンツバージョン、コンテンツドキュメント、コンテンツドキュメントリンクの役割と関係性を把握することが最も重要です。
・2段階のインサートが必要: まずファイル本体をアップロードし、その後にレコードへの紐付けを行う流れです。
・事前のデータ準備が肝: ローカルファイルのパス、そしてContentDocumentIdとLinkedEntityIdを効率的にマッチングさせる設計が重要です。特に、ファイル名の命名規則を工夫することで、Excelなどでの加工が格段に楽になります。
・データローダーのSuccessファイルを活用: コンテンツバージョンインサート後のSuccessファイルには、次のステップで必要となるContentDocumentIdが含まれます。
・ShareTypeとVisibilityの設定: コンテンツドキュメントリンクのインサート時には、ファイルの共有範囲と表示設定を適切に指定しましょう。
・本番環境で行う前に、Sandboxなどのテスト環境で十分に検証しましょう。
この記事が、同じような悩みを抱えている方の参考になりますように!
この記事を書いた人
K.F.(Salesforceエンジニア)
🏅保持資格
・Salesforce 認定 Platform アドミニストレーター
・Salesforce 認定 Platform アプリケーションビルダー
・Salesforce 認定 Agentforce スペシャリスト
IT業界のプロジェクトに1年従事。ユーザーの問い合わせ対応や問い合わせ件数削減を実現し、お客様の業務効率化や安定稼働を支援している。\サービス紹介資料 ダウンロード/



