🍙

Salesforceファイルのデータ移行

に公開

はじめに

お久しぶりです。加藤です。花粉が辛いです。。

今回はファイルのデータ移行手順について記載します。
久々にやるといつも手順忘れちゃいがちなやつです。
ここでは、ContentDocumentとAttachmentを、別環境のContentDocumentとして移行する手順を書いていきます!
※ContentNoteもContentVersionとしてダウンロードできるため、同様の手順で移行できます。

手順としては

  1. データエクスポートウィザードで必要ファイルを抜き出す
  2. ContentVersionとAttachmentのフォルダをローカルドライブに作成する
  3. フォルダにあるファイルをすべてrenameする
  4. insert用csvファイルを作成し、データローダーで一括insert
  5. 他のレコードとの紐付けるため、ContentDocumentLinkをinsertする

て感じです。
ではそれぞれ詳しく説明します!

<補足 データの格納場所について>
ContentDocument:ファイル(Lightning)
ContentDocument/ContentNote:メモ(Lightning)
ContentDocument/ContentNote:メモ&添付ファイル(Lightning)
Attachment:メモ&添付ファイル(Classic)

1. データエクスポートウィザードで必要ファイルを抜き出す

ContentVersionのファイルデータ(×ContentVersion.csv)がウィークリーエクスポートでしか抽出できないためウィークリーエクスポートを使用します。
極論ですが、ContentVersionのファイルデータ以外はデータローダーで必要ファイル抜けますので後で使うContentDocumentLinkを抜き忘れたと言って青ざめる😨必要はありません。

[設定]>[データ]>[データのエクスポート]>[今すぐエクスポート]
※スケジュールでエクスポートしていて、以下のチェックが入っていればそのエクスポートデータを使用しても大丈夫です!
※最新の情報が必要な場合は、[今すぐエクスポート]しましょう!


関連のオブジェクトに関してはとりあえず画像の通り「すべてのデータを含める」としときましょう。

ここで絶対に忘れてはいけないのは
・画像、ドキュメント、および添付ファイルを含める
・Salesforce Files および Salesforce CRM Content ドキュメントバージョンを含める
にチェックをいれることです。
絶対に忘れてはいけません。

2. ContentVersionとAttachmentのフォルダをローカルドライブに作成する

さて、結構大量にフォルダがダウンロードされたかと思います。
軽く数十ファイルになることもざらです。
それをすべて開いて、複数フォルダにまたがっているであろうContentVersionファイルとAttachmentフォルダをすべて一つにまとめてください!!
※別にまとめなくてもいいんですが、後続作業内容的にまとめた方が圧倒的に楽です。圧倒的推奨です。


こんな感じですね。

3. フォルダにあるファイルをすべてrenameする

ちょっとmacかwindowsで変わると思うんですが、ターミナルやらコマンドプロンプトやらでフォルダ内のrenameしていきます。

どうrenameするかというと、ContentVersion(Attachment)フォルダ内のファイル名に拡張子をつけていきます。
※ContentVersion.csv(Attachment.csv)を用いると ID:ID.拡張子 の対応表を作成できます!

今回はmacで説明します。
まずはshファイルを作成します。

#!/bin/bash

# Generated from ExecuteRename.bat (Mac)
# Failed renames are printed to stderr.

mv "0685h00000HoLiDAAV" "0685h00000HoLiDAAV.pdf" 2>/dev/null || echo "Failed: 0685h00000HoLiDAAV -> 0685h00000HoLiDAAV.pdf" >&2
mv "0685h00000HoMQyAAN" "0685h00000HoMQyAAN.pdf" 2>/dev/null || echo "Failed: 0685h00000HoMQyAAN -> 0685h00000HoMQyAAN.pdf" >&2

↑mv のところのContentVersionID(AttachmentID)は各ContentVersion(Attachment)のRename前のファイル名と、対応するRename後のファイル名に書き換えてください。
これをContentVersion(Attachment)件数だけ繰り返してください。

これを同階層において実行すると、renameできます。


同階層イメージ

ターミナルで、まずファイルの実行権限を変更して・・

chmod +x ExecuteRename.sh

実行

./ExecuteRename.sh

拡張子がついたら、ファイルが開けるようになってると思います!
🌈色鮮やか🌈になりました

4. insert用csvファイルを作成し、データローダーで一括insert

エクセルでContentVersionのinsert用csvファイルを作成します。
以下3項目は必須です。
・Title
・PathOnClient
・VersionData

PathOnClient と VersionDataはContentVersionファイルまでのパスを入力してください。
macだと、
/User/keikakato/~~~~/Contentversion(Attachment)/0685h00000Ge9FvAAJ.jpg
てな具合です。

※windowsだと、ドライブのところからパスが必要です。(C:\Users\katokei\Desktop\ContentVersion\0685h00000Ge9FvAAJ.jpg)
※ファイルinsert時に他のレコードと紐付けたい場合はFirstPublishLocationIdを使用します。


こんな感じですね

※ユーザの非公開フォルダへ移行したいファイルは、作成者と所有者と関連先を同じユーザにしておくと対応できます。

ファイルができたら、データローダーでinsertしましょう。
(本insert作業で、ContentVersion ContentDocument ContentDocumentLink が自動で作成されます)
これでファイル自体の移行は完了です!

5. 他のレコードと紐付けるため、ContentDocumentLinkをinsertする

ContentDocumentLinkを使用し、まだ紐づいていないレコードとファイルを追加で紐付けます。
ここまで完了したら、ファイルのデータ移行は完了かと思います・・!

さいごに

意外と細かな注意事項が散見するファイルのデータ移行・・
みなさんのトラウマとならない一助となれば幸いです><!

ただ何度やっても、rename作業中のファイルが🌈色鮮やか🌈になっていく様子は
なかなか気に入っています。

それでは・・!

株式会社アクトビ

Discussion