目次
via pixabay.com
はじめに
Apexでファイルを使ってみよう!の第2弾です。
前回はファイルのオブジェクト構成やファイルの挿入、ライブラリとの関連付けを説明しました。
今回はファイルとレコードの関連づけについてです。
第1弾の記事は以下からご覧ください!
前回はファイルのオブジェクト構成やファイルの挿入、ライブラリとの関連付けを説明しました。
今回はファイルとレコードの関連づけについてです。
第1弾の記事は以下からご覧ください!
Apexでファイルを使ってみよう! - TerraSkyBase | テラスカイを支える人とテクノロジーの情報を発信する基地局
ファイルをApexを用いて新規作成やライブラリの関連付けする方法を紹介します。
レコードとの関連付け
ファイル作成・挿入時の紐づけ
レコードとの関連付けですが、特に難しい話ではなく、ファイルを作成・挿入する際の情報(項目)を追加するだけです。
実際にコードを見ながらの方が分かりやすいので、早速実行しながら説明していきたいと思います。
実際にコードを見ながらの方が分かりやすいので、早速実行しながら説明していきたいと思います。
//紐づけたいレコードを取得 Account acc = [SELECT Id FROM Account WHERE Name = '株式会社テラスカイ' LIMIT 1]; //ファイルデータ String Data ='"伊藤ハナコ","1998-07-31","愛知県"'; String title = 'TestFile'; ContentVersion cv = new ContentVersion(); cv.PathOnClient = title + '.csv'; cv.versionData = Blob.valueOf(Data); cv.FirstPublishLocationId = acc.Id; //ここで格納先の取引先IDを設定 insert cv;
Apexサンプルコード(ファイル作成・挿入)
今回あらかじめ「株式会社テラスカイ」という取引先をSalesforceに登録しています。
ファイルを作成する際は最低限必要な情報となるPathOnClient(拡張子を含めたファイル名)、versionData(ファイルの中身)を設定し、今回はレコードと紐づけるためにFirstPublishLocationId(最初にファイルを格納する場所)に取引先のIDを設定します。
※格納場所を設定しなければライブラリに保存されます。
ファイルを作成する際は最低限必要な情報となるPathOnClient(拡張子を含めたファイル名)、versionData(ファイルの中身)を設定し、今回はレコードと紐づけるためにFirstPublishLocationId(最初にファイルを格納する場所)に取引先のIDを設定します。
※格納場所を設定しなければライブラリに保存されます。
上記コードを実行すると、株式会社テラスカイのレコードのメモ&添付ファイルの中に作成したファイルが格納されていることが分かります。
レコードと関連付けると、ファイルとファイルを共有する場所とのリンクを表すContentDocumentLinkというオブジェクトへレコードへの関連情報が保持されます。
このContentDocumentLinkはContentDocumentと紐づきます。
ContentDocumentLinkについては以下の記事でも紹介されていますので、ぜひご覧ください!
レコードと関連付けると、ファイルとファイルを共有する場所とのリンクを表すContentDocumentLinkというオブジェクトへレコードへの関連情報が保持されます。
このContentDocumentLinkはContentDocumentと紐づきます。
ContentDocumentLinkについては以下の記事でも紹介されていますので、ぜひご覧ください!
削除方法
ContentVersonとContentDocument
ファイルをApex上で挿入する際はContentVersionを使用しました。
第1弾のApexでファイルを使ってみよう!でも記載しましたが、挿入時にもう1つのファイルのオブジェクトであるContentDocumentを使用してのInsertはできません。
ContentVersionを作成・挿入した際に自動でContentDocumentも作成されます。
少し難しいですが、ContentVersionはファイルそのもの、ContentDocumentはファイルのレコード、というイメージです。
実際に「ファイルの詳細を表示」を選択するとファイルのレコードが表示されます。
第1弾のApexでファイルを使ってみよう!でも記載しましたが、挿入時にもう1つのファイルのオブジェクトであるContentDocumentを使用してのInsertはできません。
ContentVersionを作成・挿入した際に自動でContentDocumentも作成されます。
少し難しいですが、ContentVersionはファイルそのもの、ContentDocumentはファイルのレコード、というイメージです。
実際に「ファイルの詳細を表示」を選択するとファイルのレコードが表示されます。
実際に削除を実行
では、実際に削除してみましょう。
作成時と同じようにContentVersionを使ってみます。
が、「DML operation Delete not allowed on ContentVersion」というエラーが出てしまいました。
実は、削除時はContentVersionではなくContentDocumentを使ってDeleteを行わなければなりません。
作成時はContentVersion、ファイルそのものを作成して挿入するだけでSalesforce内で自動でContentDocument、ファイルのレコードも挿入してくれます。
実際標準画面を思い浮かべても、ファイルはライブラリでも上記の取引先のようなレコード上でも、「ファイルをアップロード」からローカルに保存されているファイルを選んで格納しています。
反対に削除時は他のオブジェクトと同じようにレコード詳細画面のボタン、もしくはリストビューのボタンから削除します。
レコード(ContentDocument)を消すことで、ファイルそのもの(ContentVersion)も削除される、という流れです。
作成時と同じようにContentVersionを使ってみます。
が、「DML operation Delete not allowed on ContentVersion」というエラーが出てしまいました。
実は、削除時はContentVersionではなくContentDocumentを使ってDeleteを行わなければなりません。
作成時はContentVersion、ファイルそのものを作成して挿入するだけでSalesforce内で自動でContentDocument、ファイルのレコードも挿入してくれます。
実際標準画面を思い浮かべても、ファイルはライブラリでも上記の取引先のようなレコード上でも、「ファイルをアップロード」からローカルに保存されているファイルを選んで格納しています。
反対に削除時は他のオブジェクトと同じようにレコード詳細画面のボタン、もしくはリストビューのボタンから削除します。
レコード(ContentDocument)を消すことで、ファイルそのもの(ContentVersion)も削除される、という流れです。
おわりに
ファイルのオブジェクトはなかなかなじみがありませんが、実際に使うとなるとなかなか複雑ですし、このブログで登場したオブジェクトはほんの一部に過ぎません。
ファイルを開発で処理を行うことになった!という際にはこの記事が少しでも参考になれば幸いです。
ファイルを開発で処理を行うことになった!という際にはこの記事が少しでも参考になれば幸いです。
21 件