via pixabay.com
はじめに
こんにちは
みなさんSalesforceの「ファイル」(Salesforce Files)を活用していますか?
ローカルにあるファイルをSalesforce上に登録するだけでなく、レコードに添付したり、チームと簡単に共有したりできる機能が非常に便利ですよね。例えば、取引先や商談に関連する契約書や見積もりを、直接Salesforce内で管理できるため、わざわざファイルを探し回る手間も省けます。
今回は、そのファイル機能をフローで活用する方法に挑戦してみました!どんなシーンでファイルをフローに組み込めるのか、実際に試した内容を紹介したいと思います。
みなさんSalesforceの「ファイル」(Salesforce Files)を活用していますか?
ローカルにあるファイルをSalesforce上に登録するだけでなく、レコードに添付したり、チームと簡単に共有したりできる機能が非常に便利ですよね。例えば、取引先や商談に関連する契約書や見積もりを、直接Salesforce内で管理できるため、わざわざファイルを探し回る手間も省けます。
今回は、そのファイル機能をフローで活用する方法に挑戦してみました!どんなシーンでファイルをフローに組み込めるのか、実際に試した内容を紹介したいと思います。
オブジェクト構成
はじめに、Salesforceでファイルを扱うためには、そのオブジェクト構成を理解するところから始めます。
これらのオブジェクトは少し複雑ですが、ファイルをうまく活用するために必要な要素です。
これらのオブジェクトは少し複雑ですが、ファイルをうまく活用するために必要な要素です。
ContentWorkSpace と ContentWorkSpaceDoc はファイルを管理・共有するための「ライブラリ」に関するオブジェクトです。
次に、ContentDocument と ContentVersion は実際の「ファイル」を扱う中心的なオブジェクトで、ファイル本体とそのバージョンをそれぞれ管理します。
そして ContentDocumentHistory と ContentVersionHistory は、その名の通り「履歴(History)」を記録するオブジェクトで、ファイルやバージョンの変更履歴を保持しています。
ファイルに関連するオブジェクトは、ほかにもたくさんあります。ここでは紹介しきれないため、気になる方はぜひ調べてみてください。
次に、ContentDocument と ContentVersion は実際の「ファイル」を扱う中心的なオブジェクトで、ファイル本体とそのバージョンをそれぞれ管理します。
そして ContentDocumentHistory と ContentVersionHistory は、その名の通り「履歴(History)」を記録するオブジェクトで、ファイルやバージョンの変更履歴を保持しています。
ファイルに関連するオブジェクトは、ほかにもたくさんあります。ここでは紹介しきれないため、気になる方はぜひ調べてみてください。
フローの作成
ここからは実際にファイルを使用してフローを作成していきます。
Salesforceでは、ファイル(ContentVersionやContentDocumentLinkなど)の更新をトリガーにレコードトリガーフローを使うことはできません。これらのオブジェクトはフローのトリガー対象に含まれておらず、標準の方法ではファイルのアップロードや更新を直接検知することができないという制限があります。
そのため、今回はスケジュールトリガーフローを使って「ファイルが作成・更新された場合に、関連する商談のフラグを更新する」処理を実現する方法をご紹介します。
Salesforceでは、ファイル(ContentVersionやContentDocumentLinkなど)の更新をトリガーにレコードトリガーフローを使うことはできません。これらのオブジェクトはフローのトリガー対象に含まれておらず、標準の方法ではファイルのアップロードや更新を直接検知することができないという制限があります。
そのため、今回はスケジュールトリガーフローを使って「ファイルが作成・更新された場合に、関連する商談のフラグを更新する」処理を実現する方法をご紹介します。
シナリオ
フロー種別:スケジュールトリガフロー
シナリオ:前日に商談に紐づくファイルが更新された場合、毎日午前5時に商談の「ファイル更新フラグ」項目をTrueに更新。
シナリオ:前日に商談に紐づくファイルが更新された場合、毎日午前5時に商談の「ファイル更新フラグ」項目をTrueに更新。
それぞれの処理内容について、説明していきます。
まず、毎朝5時に起動するスケジュールトリガフローを設定し、コンテンツ更新日(LastModifiedDate)が前日のレコードをすべて取得します。
まず、毎朝5時に起動するスケジュールトリガフローを設定し、コンテンツ更新日(LastModifiedDate)が前日のレコードをすべて取得します。
項目 | 演算子 | 値 |
ContentModifiedDate | 次の文字列と一致する | Today()-1 |
取得したレコードコレクション変数でループを回します。
ループの中でそれぞれの ContentDocumentId を取り出し、テキスト型のコレクション変数にまとめて格納します。
このIDはファイルそのものを表すため、後の処理で「誰に紐づいているか」を調べるキーになります。
このIDはファイルそのものを表すため、後の処理で「誰に紐づいているか」を調べるキーになります。
次に、先ほど格納したContentDocumentIdを使って、それらのファイルが紐づいているレコード情報(ContentDocumentLink)を取得します。
項目 | 演算子 | 値 |
ContentDocumentId | 次に含まれる | ContentDocumentIdを格納したコレクション変数 |
取得したContentDocumentLinkレコードをループし、それぞれのLinkedEntityId が商談(Opportunity)であるかを判定します。
商談かどうかの判定はIDの先頭3文字が "006" であれば商談なので、LEFT(LinkedEntityId, 3) = "006" の条件でチェックします。
リソース | 演算子 | 値 |
LEFT(ループの現在の項目.LinkedEntityId, 3) | 次の文字列と一致する | 006 |
条件に一致した場合にテキスト型のコレクション変数にLinkedEntityIdを格納します。
最後に、IdがLinkedEntityIdを格納したコレクション変数に含まれる商談のフラグをTrueに更新します。
項目 | 演算子 | 値 |
Id | 次に含まれる | IdがLinkedEntityIdを格納したコレクション変数 |
以上でフローの作成が完了しました。
まとめ
今回はファイルを使用してフローを作成してみましたが、いかがでしたでしょうか。
Salesforceのファイル関連オブジェクト(ContentVersion・ContentDocument・ContentDocumentLink)は、やや特殊な構造をしており、それぞれのリレーションを理解するのが難しいと感じる方も多いかもしれません。
特に「ファイル」=「ContentVersion」だと思って操作を始めると、実際にはそれがバージョン情報であり、レコードへの紐づけには ContentDocumentLink が使われているなど、構造の違いに戸惑う場面もあります。
今回のようにフローを通じて実際にデータの流れをたどってみることで、オブジェクト間の関係が理解しやすくなると思います。
今回使用したオブジェクト以外にもContent~オブジェクトはたくさんあるのでぜひ調べてみてください!
Salesforceのファイル関連オブジェクト(ContentVersion・ContentDocument・ContentDocumentLink)は、やや特殊な構造をしており、それぞれのリレーションを理解するのが難しいと感じる方も多いかもしれません。
特に「ファイル」=「ContentVersion」だと思って操作を始めると、実際にはそれがバージョン情報であり、レコードへの紐づけには ContentDocumentLink が使われているなど、構造の違いに戸惑う場面もあります。
今回のようにフローを通じて実際にデータの流れをたどってみることで、オブジェクト間の関係が理解しやすくなると思います。
今回使用したオブジェクト以外にもContent~オブジェクトはたくさんあるのでぜひ調べてみてください!
35 件