Salesforceでのファイル(ContentDocument)の削除
自分以外のユーザが所有しているファイル(ContentDocument)の削除にコツが必要だったので、備忘録として残しておきます。
結論
プロファイルで「すべてのファイルをクエリ」をオンにすれば、他ユーザ所有のファイルを含めて開発者コンソールなどから参照できる。
経緯
DevSandBoxやDevProSandBoxで組織のファイルストレージが一杯になり、レコードの作成が出来なくなりました。動作検証で様々なユーザでファイルをアップロードしており、各ユーザで削除するのは手間なのでシステム管理者で一気に削除しようと思いました。
開発者コンソールでシステム管理者(システム管理太郎)でファイルをクエリしてみたところ
手動共有されていない他ユーザ所有のファイルが表示されない???
ただ、ファイルのIdからファイルの詳細ページにアクセスすると表示されるため、アクセス権限はあるみたい。
(標準システム管理者プロファイルなので、すべてのレコード参照の権限がある)
どうやら直接共有されていないファイルは、「すべてのレコードを参照」権限があっても開発者コンソールなどからのSOQLでは、参照することが出来ないという仕様があるそうです。
https://developer.salesforce.com/docs/atlas.ja-jp.object_reference.meta/object_reference/sforce_api_objects_contentversion.htm
解決策
上記の解決策として、「すべてのファイルをクエリ」という権限があります。設定手順は下記の通り。
1.標準のシステム管理者プロファイルをコピーしたカスタムプロファイルを作成する。
2.上記プロファイルで「すべてのファイルをクエリ」をオンにする
(システム管理者権限セクションにあります。)
3.Salesforceユーザのプロファイルを上記のプロファイルに変更する
(他ユーザでないとプロフィルの変更ができない)
4.開発者コンソールなどから削除する
このプロファイルを設定することで、すべてのファイルを参照することが出来ました。
まとめ
コミュニティユーザのアップロードしたファイルで不要になったファイルを削除するときなどは、この方法でないとなかなか手間がかかると思います。ただし、消してはならないファイルを消してしまうことのないように、「すべてのファイルをクエリ」権限は慎重に扱って(普段はオフにしておくなどして)ください。