Salesforce:レコードに添付されたファイルの拡張子を判別したい

2 min read読了の目安(約2200字

背景

レコードに添付されたファイルの拡張子を判別して、フローとかで条件分岐したい時期が僕にもありました。

結論(ネタバレ)

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

Help | Training | Salesforce

リリースノート

(神)わかりやすい解説

Salesforceのファイルのオブジェクト構成とApexの書き方 - Qiita

つまり...?

Salesforceのレコードに添付されたファイルの情報はだいたい、

  1. ContentDocumentLink
  2. ContentVersion
  3. ContentDocument

の3つのオブジェクトで管理されとるのです。

実際に取得してみる

この商談に添付されたファイルの拡張子を取得する。

  1. ブラウザのアドレスバーからレコードのIDを取得

  2. 歯車アイコン→開発者コンソール→QueryEditorを開く

  3. クエリ欄に以下入力して[Execute]をクリック
    select ContentDocumentId from ContentDocumentLink where LinkedEntityId = '1.で取得したID'

    ※こうなるはず

  4. ContentDocumentIDをコピー

  5. クエリ欄に以下入力して[Execute]をクリック
    select FileExtension From ContentVersion Where ContentDocumentId = '4.で取得したID'

  6. 拡張子が確認できればOK。

結論

冒頭に書いた通りだけど、以下の通りSOQLを2回やれば取得できる。


1回目:[select Id from ContentDocumentLink where LinkedEntityId =(recordId)] => Var Hoge

2回目:select FileExtension From ContentVersion Where ContentDocumentId = Hoge