🐴
Salesforce:レコードに添付されたファイルの拡張子を判別したい
背景
レコードに添付されたファイルの拡張子を判別して、フローとかで条件分岐したい時期が僕にもありました。
結論(ネタバレ)
2回SOQLを実行すれば取れる。
1回目:[select Id from ContentDocumentLink where LinkedEntityId =(recordId)] => Var Hoge
2回目:select FileExtension From ContentVersion Where ContentDocumentId = Hoge
解説
Q. レコードに添付したファイルはどこに保存される?
A. 操作によって、ファイルが保存されるオブジェクトは以下のどちらかになる。
LightningとClassicで保存先が異なる。
(参考)人類には早すぎたSalesforceのヘルプ記事
(神)わかりやすい解説
Salesforceのファイルのオブジェクト構成とApexの書き方 - Qiita
つまり...?
Salesforceのレコードに添付されたファイルの情報はだいたい、
- ContentDocumentLink
- ContentVersion
- ContentDocument
の3つのオブジェクトで管理されとるのです。
実際に取得してみる
この商談に添付されたファイルの拡張子を取得する。
-
ブラウザのアドレスバーからレコードのIDを取得
-
歯車アイコン→開発者コンソール→QueryEditorを開く
-
クエリ欄に以下入力して[Execute]をクリック
select ContentDocumentId from ContentDocumentLink where LinkedEntityId = '1.で取得したID'
※こうなるはず
-
ContentDocumentIDをコピー
-
クエリ欄に以下入力して[Execute]をクリック
select FileExtension From ContentVersion Where ContentDocumentId = '4.で取得したID'
-
拡張子が確認できればOK。
結論
冒頭に書いた通りだけど、以下の通りSOQLを2回やれば取得できる。
1回目:[select Id from ContentDocumentLink where LinkedEntityId =(recordId)] => Var Hoge
2回目:select FileExtension From ContentVersion Where ContentDocumentId = Hoge
Discussion