2021.10.18

Salesforceの「ファイル」を使ってみよう

はじめに

こんにちは。阿部です。
突然ですが皆様、「ファイル」(Salesforce Files)活用していますか?

Classic環境では、各種オブジェクトのレコードに対してファイルを添付しようとする場合、「メモ&添付ファイル」を用いていたかと思います。
ところが、Lightning Experience環境になると、ファイルの登録を行う先は「ファイル」になり、そこに登録されたのちにレコードに関連付けられるようになりました。
「メモ&添付ファイル」の関連リストに登録しても、実際に登録されるのは「ファイル」になります。

Classic環境だけだったころからSalesforceを利用していた身には「メモ&添付ファイル」に愛着もありますが、色々な面でパワーアップしている「ファイル」の利点や、それを可能としているデータ構造、そしてDataLoaderでの登録方法について、この記事でご紹介できればと思います。

ファイルの利点

ファイルの詳細画面

ファイルに関する詳細な情報が表示されるのは、上記の詳細画面です。
詳細情報に加えて、いくつかの関連リストが存在していることもご確認いただけるかと思います。
この画面で表示されている内容も含めて、ファイルの利点を4つ、ご紹介させていただきます。

(1)添付できるサイズが大きい

まずはシンプルに、添付できるファイルのサイズが大きいという点が挙げられます。
以下に比較の表を記載しますのでご確認ください。
ファイル
(Salesforce Files)
2GB
添付ファイル
(メモ&添付ファイル)
25MB
2GBと25MB・・・圧倒的ですね。
ディスク容量に気を付ける必要はありますが、少々大きいサイズの添付ファイルも登録できるというのは安心感があります。

(2)バージョン管理ができる

バージョン管理ができることも、「ファイル」の特徴として挙げられるかと思います。

バージョン管理

このように、登録されたバージョンについてはその更新日と登録者が自動で登録されます。
また、変更箇所に関する情報の入力を行うことも可能です。

ファイルをダウンロードする際には、最新バージョンだけでなく、以前のバージョンのファイルもダウンロードすることが可能です。
修正前の情報の確認がしたくなった時などには、このバージョン管理の機能はありがたいですね。

(3)柔軟な共有設定が可能

添付したレコードに対してのみ関連付けができた「添付ファイル」に対して、「ファイル」では多様かつ柔軟な共有・関連付けを行うことが可能です。
ファイルの共有・関連付けを行う先としては、大きくは次の2つがあるかと思います。

①人・グループへの共有
②レコードへの関連付け

それぞれ少し見てみましょう。

①人・グループへの共有

①人・グループへの共有 は、ファイルの詳細画面あるいはプレビュー画面で、『共有』をクリックすることで設定できます。
上記のようなダイアログが表示されますので、共有先と役割を選択してください。

共有先には、ユーザもしくは公開グループを選択することが可能です。
役割には、閲覧者かコラボレータを選択できます。
それぞれの権限は、大まかに以下のようなものになります。

閲覧者:
・ファイルの参照やダウンロードが可能です。
・同じ閲覧者権限で他のユーザに共有することもできます。

コラボレータ:
・閲覧者と同等の権限があります。
・新しいバージョンのファイルをアップロードできます。
・ファイルの詳細を編集できます。
・共有先のユーザに対して、コラボレータ権限を付与することが可能です。

次に、②レコードへの関連付け についても確認しましょう。

②レコードへの関連付け

取引先や商談といった標準オブジェクト、あるいは、カスタムオブジェクトのレコードに対しても、ファイルを関連付けして共有することは可能です。
関連リストとして「ファイル」を表示し、そこから関連付けを行います。

ローカルのファイルを新規に登録する場合、Lightning Experience環境であれば、この「ファイル」関連リストに対してドラッグ&ドロップを行うことで、ファイルを直接登録することが可能です。

既にSalesforce上に登録されているファイルを関連付ける場合には、関連リスト右の「▼」から「ファイルを追加」を選ぶと、以下のようなダイアログが表示されますので、そこからファイルを選択して関連付けをすることができます。
なお、ファイルのアップロードについても、このダイアログから実施可能です。

ファイルを選択

このようにして実施された共有・関連付けに関する情報は、ファイルの詳細画面から確認することができます。
以下の図で示すように、①人・グループへの共有 ②レコードへの関連付け は、同じ関連リスト内で情報が表示されます。

ファイルの共有・関連付けに関する情報

この関連リストから、既に設定されているユーザの役割の変更を行うことができます。

ユーザ・グループへの共有と、レコードに対する関連付けが、同じ関連リスト内で管理されていることについて、私は最初違和感を抱いたのですが…。
後ほど説明させていただく「ファイル」に関するオブジェクト構造を考えますと、非常に納得できるものでした。
よくできているなと思います。

(4)カスタム項目を作成できる

「ファイル」の情報を管理するオブジェクトの一つであるコンテンツバージョン(API参照名:ContentVersion)には、カスタム項目を追加することができます。
項目を追加することで、ファイルに関連する情報を詳細画面で参照したり、別システムからファイルのデータ移行を行う場合にキーとなる情報を設定したりすることも可能となります。

以下に簡単な例を示してみます。

カスタム項目の追加

赤枠で囲った部分が追加したカスタム項目になります。
例えば、お見積りのファイルであれば、合計金額の情報を記載してみたりすることもできるかと思います。
外部キーという項目は、別システムからファイルのデータ移行を行った際に、ファイル自身のIDを特定するのに使えるのではないでしょうか。

カスタム項目は、標準で追加できるカスタム項目とほぼ同じデータ型を用いることができますので、必要に応じて様々な使い方ができるかと思います。

ファイルのオブジェクト構造

ファイルの利点に続いて、オブジェクト構造について紹介させていただきます。
先ほど紹介した利点のうち、(2)バージョン管理ができる と (3)柔軟な共有設定が可能 については、オブジェクト構造と合わせて確認していただいた方が理解しやすいかと思います。
なお、この記事ではバージョン管理と共有設定に絞って説明をさせていただきます。

ファイルのオブジェクト構造については、Salesforceの SOAP API 開発者ガイド にも記述があります。
ただ、こちらのオブジェクト構造には、ユーザへの共有設定や別オブジェクトレコードとの間に関連付けを行うために用いるContentDocumentLinkの記述がありません。
また、この記事では上記の通り、ファイルのバージョン管理と共有にターゲットを絞って説明させていただきたいこともあり、ライブラリを使用する場合に用いることになるContentWorkSpace/ContentWorkSpaceDocというオブジェクトについては、一旦説明から割愛さいたします。

ファイルのバージョン管理と共有に絞ると、重要なのは以下の3オブジェクトになります。

ファイルのオブジェクト構成(シンプル版)

それぞれのオブジェクトの役割は以下の通りです。
オブジェクト名 オブジェクトの役割 オブジェクトの説明
ContentDocument ファイルの情報 ファイルに関する情報が設定されるオブジェクトです。
最新バージョンに関する情報などを管理しています。
ファイルのタイトルや説明を、このオブジェクトから参照することも可能です。
1ファイルにつき、このオブジェクトのレコードは1つになります。
このオブジェクトにレコードを直接登録することはできません。
ContentVersion ファイルの実体 ファイルの実体(ファイルそのもの)が登録されるオブジェクトです。
このオブジェクトにレコードを登録することで、ContentDocumentのレコードも同時に作成されます。
ファイルのタイトルや説明などの情報を、レコード登録時に入力できます。
カスタム項目を追加する場合、このオブジェクトに追加することになります。
1ファイルに対して、バージョンの数だけレコードが存在することになります。
ContentDocumentLink ファイルの関連付け ファイルとユーザ・公開グループとの共有設定、レコードとの関連付けを行います。
共有先・関連付け先のユーザや公開グループ、各オブジェクトのレコードのIDや、その際のアクセス権限を管理します。
1ファイルに対して、共有・関連付けする先の数だけレコードが作成されます。
説明の中にも記載しましたが、ContentDocumentのレコードを直接作成することはできません。
ファイルの実体であるContentVersionにレコードを登録することで、同時にContentDocumentのレコードが作成されます。
以後、新しいバージョンを登録していく際には、そのファイルのContentDocumentレコードを参照するContentVersionレコードが作成されることとなります。

ユーザや公開グループへの共有設定、特定のレコードの関連付けを行うのは、どちらもContentDocumentLinkオブジェクトへのレコード登録によって実現されます。
前述のファイルの利点 (3)柔軟な共有設定が可能 の最後に、「ユーザや公開グループへの共有とレコードへの関連付けの状況が同一関連リストで表示されていること」に違和感を覚えていたと記述しましたが、このような仕組みでできていると分かると、納得できました。
むしろ、非常にシンプルで分かりやすい仕組みだなど今では思っております。

このオブジェクト構造を前提に、具体的なレコードのイメージを想像していただけるかなと、ちょっとした図を用意してみました。
皆様のご理解の一助になれば幸いです。

ファイルのオブジェクト構造と具体的なレコードイメージ

DataLoaderを用いたファイルの登録と共有設定

最後に、ファイルへの登録と、登録したファイルへの共有設定・レコードへの関連付けを、DataLoaderを用いて行う方法を紹介したいと思います。

前述のオブジェクト構造でも記載しました通り、ファイルの実体の登録はContentVersionに対して行い、共有設定はContentDocumentLinkに登録します。
ただ、ContentDocumentLinkには、ContentDocumentのID(ContentVersionに設定されるContentDocumentIdと同値)が必要になります。
そこで、ここでは以下の3ステップでの登録をご説明いたします。
(1)ContentVersionへの登録
(2)ContentDocumentIdの取得
(3)ContentDocumentLinkの登録

以下、順番に見ていきましょう。

(1)ContentVersionへの登録

まずは、ContentVersionに対して実際のファイル登録を行います。
CSVファイルには最低限、以下の値を設定してください。
項目 設定内容
Title タイトル。ファイルの名前です。
PathOnClient 登録するファイルをフルパスで入力します。
VersionData 登録するファイルをフルパスで入力します。
PathOnClientとVersionDataには同じ値が設定されます。
厳密には、PathOnClientに入る値は「ドキュメントの完全パス」、VersionDataには「ドキュメントの実体」となりますが、DataLoaderから登録する際には同値となります。

上記に加え、今回はDescriptionにファイルを一意に特定する値を設定することにします。

このファイルのサンプルは、以下の画像のようになります。

ContentVersion登録用CSVファイル

それでは、DataLoaderを用いて登録してみましょう。
DataLoaderを起動し、Insertを選択します。
オブジェクト選択の画面では「Show all Salesforce objects」にチェックを入れて、「コンテンツバージョン(ContentVersion)」を選択します。

コンテンツバージョン(ContentVersion)を選択

設定した項目をマッピングしてあげたら、登録を実施します。
ファイルパスなどに問題がなければ登録は成功し、Salesforce上にファイルがアップロードされます。

アップロードされたファイル

ファイルの所有者は、ロードするCSVファイルでは明記していなかったため、DataLoaderによる登録作業の実施者になっております。
所有者の指定を行いたい場合はOwnerIdを設定するなど、登録用CSVファイルに項目を追加してロード処理を実施してください。

(2)ContentDocumentIdの取得

ファイルの登録が行えましたので、次のステップとして、共有設定を行うために必要なContentDocumentのIdを取得します。
ContentDocumentに対して検索を行うことでも取得できますが、今回は先ほど登録したContentVersionから情報を取得することとします。

DataLoaderでExportを選択し、登録時と同じように「コンテンツバージョン(ContentVersion)」を選択します。
今回は以下のようなクエリでデータを取得します。

Select Id, ContentDocumentId, Title, Description FROM ContentVersion

クエリの実行の結果、以下のような内容を取得できました。
赤囲みの部分がContentDocumentのIdになります。

ContentVersionの取得結果

ContentDocumentLinkに設定するのに必要な情報はContentDocumentIdだけですが、実際にファイルの関連付けを行おうとする場合には、どのファイルとどのレコードとの間に関連付けを行うことになるのかを判断することが必要になるかと思います。
今回の手順では、Descriptionの中にファイルを一意に特定する情報を設定している想定でしたので、この項目も一緒に取得しました。

実際にファイル移行を行う場合には、Descriptionには設定すべき内容が決まっていたり、既に登録済みのファイルが存在したりするケースなどもあるかと思います。
そのような場合、ファイルの利点でも紹介させていただきましたカスタム項目の追加によって、ファイルを一意に特定する情報、移行作業で登録したデータであることを特定する情報を付与してあげれば、登録したファイルの特定に役立ちます。
追加したカスタム項目は、ContentDocumentではなくContentVersionに含まれますので、本手順ではContentVersionからのデータ取得を紹介させていただきました。

(3)ContentDocumentLinkの登録

最後のステップとして、ContentDocumentLinkの登録を行い、先ほど登録したファイルに対する共有設定、レコードとの関連付けを行います。
CSVファイルには、以下の4項目を設定します。
項目 設定内容
ContentDocumentId 登録したファイルのIDを設定します
(2)の手順で取得したContentDocumentIdを設定します
LinkedEntityId 共有先のレコードのIDを設定します
ユーザ、公開グループ、標準またはカスタムオブジェクトのレコードのIDを設定します
ShareType ユーザや公開グループに共有する際に付与する権限を設定します
閲覧者(V)/コラボレータ(C)権限などを設定します
標準またはカスタムオブジェクトへの関連付けの場合は、関連するレコード毎に決まる推定権限(I)という権限もあります
Visibility このファイルを使用できるユーザの権限を設定します
すべてのユーザ、内部ユーザ、共有ユーザ のいずれかを設定できます
これらの内容を設定したCSVファイルのサンプルは以下になります。

ContentDocumentLink登録用CSVファイル

赤枠で囲った箇所が、先ほど取得したContentDocumentIdになります。
今回は、登録者とは別のユーザへのコラボレータ権限の付与と、商談レコードへの関連付けを行ってみようと思います。

DataLoaderでInsertを選択し、オブジェクト選択の画面で「コンテンツドキュメントリンク(ContentDocumentLink)」を選択します。
今回も、「Show all Salesforce objects」にチェックは入れておいてください。

コンテンツドキュメントリンク(ContentDocumentLink)を選択

こちらも、設定した項目をそのままマッピングして、登録を実施します。
登録が完了すると、先ほど登録したファイルの共有先に、今回追加したユーザ及びレコードが増えています。
さっそく確認してみましょう。

コンテンツドキュメントリンク(ContentDocumentLink)の登録結果

ユーザ及びレコードが、想定通りに共有先として設定できました。
これで、設定完了です。


DataLoaderでファイルを登録するような場合としては、別システムからデータ移行するようなケースが想定されるかと思います。
その際に、今回ご紹介した手順がお役に立てれば幸いです。

最後に

今回の記事では、「ファイル」(Salesforce Files)についてご紹介させていただきました。
こうしてまとめてみますと、「メモ&添付ファイル」ではあくまでレコードに対してファイルを添付する機能であったのに対し、「ファイル」はファイル管理としての機能を充実させたうえで、ユーザやレコードへの共有・関連付けの機能も提供しています。
ファイルが各レコードに添えられる脇役ではなく、ファイル自体が一つの主役として扱われるようになったと言えるかもしれませんね。

また、リンクを使用したファイルの共有など、紹介しきれていない機能・設定もたくさんあります。
それらについては、また別の機会にご紹介できればと思います。

Salesforceをうまく利用する中で、ぜひ「ファイル」をご活用ください。
65 件
     
  • banner
  • banner

関連する記事