(2022/6/21:初回投稿、2022/6/22:フロー実行タイミングのテキストを修正しました🙇♀️)
Salesforceの活用が進むと増えてくるのが自動化のご要望。フローではワークフロールールやプロセスビルダーではできなかった「レコードの削除」ができるので、一歩進んだ自動化も設定が可能です。また、扱えるオブジェクトもプロセスビルダーより多く、表に見えないオブジェクトも操作することができます。
今回は『ファイルの削除』をフローで挑戦してみます。
<要件>
「応募者」の状況が「不採用」になったら応募者レコードに添付のファイル(履歴書・職務経歴書)を削除したい(採用部門をイメージ) フローの設定手順
1.「レコードトリガーフロー」で開始条件を設定します
・オブジェクト:応募者(カスタムオブジェクト)
・フローをトリガする条件:レコードが更新された
・エントリ条件を設定:
[条件の要件] すべての条件に一致(AND)
項目 | 演算子 | 値 |
---|
条件となる項目 (今回はStatus2__c) | 次の文字列と一致する | 条件となる値 (今回は「不採用」) |
・更新されたレコードでフローを実行するタイミング:条件の要件に一致するようにレコードを更新した時のみ
・フローを最適化:アクションと関連レコード
2.「レコードを取得」要素を設定します
・このオブジェクトのレコードを取得:コンテンツドキュメントリンク
・絞り込み:
[条件の要件] すべての条件に一致(AND)
項目 | 演算子 | 値 |
---|
LinkedEntityId | 次の文字列と一致する | $Record>カスタムオブジェクト ID |
・保存するレコード数:すべてのレコード
・レコードデータの保存方法:項目を選択してあとはSalesforceに任せる
項目:デフォルトのIDに加えて、【+項目を追加】ボタンから「ContentsDocumentId」を追加します
3.「ループ」要素を設定します
・コレクション変数を選択:手順2のレコード取得要素のAPI名がついたコンテンツドキュメントリンクのコレクションを選択します
反復処理の方向はどちらでも構いません。
4.コンテンツドキュメントレコードを保存するための変数を2つ作成します
画面左のマネージャ内【新規リソース】ボタンより変数を作成します
1つめ:レコード(単一)変数
リソース種別:変数
データ型:レコード
オブジェクト:コンテンツドキュメント
2つめ:レコードコレクション変数
リソース種別:変数
データ型:レコード
オブジェクト:コンテンツドキュメント
複数の値を許可(コレクション)にチェック
5.ループの中で「割り当て」要素を設定します
変数 | 演算子 | 値 |
---|
手順4のレコード(単一)変数>Id(ContentDocument ID) | 次の文字列と一致する | ループ(手順3のAPI名)現在の項目>ContentsDocumentId |
変数
値
6.手順5の要素に続けて「割り当て」要素を設定します
変数 | 演算子 | 値 |
---|
手順3で作成した レコードコレクション変数 | 追加 | 手順3で作成、手順5で割り当てした レコード(単一)変数 |
変数
値
(値を設定する際、レコード(単一)変数 > をクリックした後に、枠外をクリックすることで
目的のレコード(単一)変数そのものを選択できる挙動、ちょっとトリッキーなので正しい手順なのか不安です…;)
7.ループの外で「レコードを削除」要素を設定します
削除するレコードを検索する方法:
レコード変数またはレコードコレクション変数に保存された ID を使用
削除するレコードを選択:
レコードまたはレコードコレクション 手順4で作成、手順6で追加割り当てしたContentsDocumentレコードコレクション変数
完成したフローがこちら。
【保存】し、【デバッグ】で動作を確認できたら、【有効化】します。
有効化後、実際にレコード操作してみると…
「ファイル」のPDFファイルが消えました!
削除したファイルは「ごみ箱」に入っています。
少し複雑なSalesforceのコンテンツ周り
「ファイル」は、アップロードすると複数のオブジェクトで管理されます
ContentDocument:アップロードされたファイルを表す
ContentDocumentLink:ファイルを共有する場所とのリンクを表す
ContentVersion:ファイルの特定のバージョンを表す
★詳細は公式のドキュメントを参照してください
Salesforce および Lightning プラットフォームのオブジェクトリファレンスファイルを削除するにはContentDocumentを削除すれば良いのですが、ContentsDocumentは添付先のレコードとは直接の関連がありません。そのため今回のフローでは間にあるContentsDocumentLinkを取得してから、削除するContentDocumentを決定しました。ちなみに、ファイルが常に1件であればループは不要です。「ループ」はプロセスビルダーには無かった要素なので開発者ではなくアドミンの私は最初はなかなか理解できなかったのですが、少しずつ使えるようになってきました。どんどん設定しやすくUIが改善されているフロー、諦めていた自動化にもう一度チャレンジしてみても良いかもしれません。