Help us understand the problem. What is going on with this article?

【備忘録】Salesforceで他ユーザ所有のファイル(ContentDocument)の一括削除

Salesforceでのファイル(ContentDocument)の削除

 自分以外のユーザが所有しているファイル(ContentDocument)の削除にコツが必要だったので、備忘録として残しておきます。

結論

 プロファイルで「すべてのファイルをクエリ」をオンにすれば、他ユーザ所有のファイルを含めて開発者コンソールなどから参照できる。

経緯

 DevSandBoxやDevProSandBoxで組織のファイルストレージが一杯になり、レコードの作成が出来なくなりました。動作検証で様々なユーザでファイルをアップロードしており、各ユーザで削除するのは手間なのでシステム管理者で一気に削除しようと思いました。
1.png
2.png
3.png

開発者コンソールでシステム管理者(システム管理太郎)でファイルをクエリしてみたところ
image.png

手動共有されていない他ユーザ所有のファイルが表示されない???:dizzy_face:

ただ、ファイルのIdからファイルの詳細ページにアクセスすると表示されるため、アクセス権限はあるみたい。
(標準システム管理者プロファイルなので、すべてのレコード参照の権限がある)
image.png

どうやら直接共有されていないファイルは、「すべてのレコードを参照」権限があっても開発者コンソールなどからのSOQLでは、参照することが出来ないという仕様があるそうです。
https://developer.salesforce.com/docs/atlas.ja-jp.object_reference.meta/object_reference/sforce_api_objects_contentversion.htm

解決策

 上記の解決策として、「すべてのファイルをクエリ」という権限があります。設定手順は下記の通り。
 1.標準のシステム管理者プロファイルをコピーしたカスタムプロファイルを作成する。
 2.上記プロファイルで「すべてのファイルをクエリ」をオンにする
 (システム管理者権限セクションにあります。)
 3.Salesforceユーザのプロファイルを上記のプロファイルに変更する
 (他ユーザでないとプロフィルの変更ができない)
 4.開発者コンソールなどから削除する
 
 このプロファイルを設定することで、すべてのファイルを参照することが出来ました。
4.png
5.png

6.png

まとめ

 コミュニティユーザのアップロードしたファイルで不要になったファイルを削除するときなどは、この方法でないとなかなか手間がかかると思います。ただし、消してはならないファイルを消してしまうことのないように、「すべてのファイルをクエリ」権限は慎重に扱って(普段はオフにしておくなどして)ください。

bigyoujdb
Salesforce開発者2年目
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away