レコードへファイルを添付した際に「添付あり」カスタムチェックボックス項目をオンにしたい、というご相談を受けることがあります。残念ながらプロセスビルダーより触れるオブジェクトが多いFlowBuilderをもってしても、レコードトリガフローで、ファイルがアップロードされた時=コンテンツドキュメントレコードが作成された時、をトリガにすることができません。(Spring'23時点)


※Lightning環境の「ファイル」からのアップロードを前提としています
※ファイル周りのオブジェクト構造については過去記事「
レコードのファイルを自動で削除するフロー(の後半)」や、公式ドキュメント「
Salesforce および Lightning プラットフォームのオブジェクトリファレンス>データモデル>コンテンツドキュメント」を参照してください。
Apexコード開発で対応することはできるようなのですが、フローでの打開策を考えました。
策その1.添付先レコードの更新時にファイル有無をチェックする
難易度:低
タイムラグ:添付先レコードの更新頻度とフローの起動条件次第
そもそもなぜ添付ファイルの有無チェックが必要なのかをヒアリングすると「ファイルの添付忘れを防ぎたい」ことが多いです。例えば、商談が成立間近のフェーズで注文書の添付を必須としたいような業務プロセスです。そのような場合はファイルを添付して即時でチェックが入らなくても、次に添付先レコードが更新された際にチェックが入れば事足りるので、添付先レコードのレコードトリガフローでチェックを入れます。
今回は採用部門を想定した「応募者」カスタムオブジェクト上で、選考状況を「応募」から「書類受付」へ進めるにあたって履歴書などのファイルが添付されていることを確認します。
作成したフローはこちら

1.「レコードトリガーフロー」で開始条件を設定

・オブジェクト:応募者(カスタムオブジェクト)
・フローをトリガする条件:レコードが更新された
・エントリ条件を設定:
[条件の要件] すべての条件に一致(AND)
項目 | 演算子 | 値 |
Stage__c(選考状況) | 次の文字列と一致する | 書類受付 |
| | =ファイル有無をチェックしたい選考状況 |
・更新されたレコードでフローを実行するタイミング:
条件の要件に一致するようにレコードを更新した時のみ
・フローを最適化:高速項目更新
※エントリ条件を指定しなければより高い頻度で(応募者レコードが更新されるたび)フローを起動してファイル添付からチェックオンまでの時間を短くすることは可能ですが、「エントリ条件を設定」欄にも『不要なフロー実行を最小限に抑えれば、組織のリソースを節約できます。』と説明があるように、実行条件は絞った方がお勧めです。

2.「レコードを取得」要素でコンテンツドキュメントリンクレコードを取得
オブジェクト:コンテンツドキュメントリンク(ContentsDocumentLink)
条件の要件:すべての条件に一致(AND)
項目 | 演算子 | 値 |
LinkedEntityId | 次の文字列と一致する | {!$Record.Id} (今回はカスタムオブジェクトなので 「 $Record>カスタムオブジェクトID」表示) |
(以下3つの設定はデフォルトのまま)
並び替え順:並び替えなし
保存するレコード数:最初のレコードのみ
レコードデータの保存方法:すべての項目を自動的に保存

3.「決定」要素でコンテンツドキュメントリンクレコードの有無を分岐
表示ラベル:あり
結果を実行する条件の要件:すべての条件に一致(AND)
リソース | 演算子 | 値 |
get_ContentDocumentLink コンテンツドキュメントリンク (手順2.のレコード取得要素) | null | False |

リソースは、レコード取得要素から自動で生成されているレコード(単一)変数をクリック→枠外をクリックして選択します

デフォルトの結果の表示ラベルも、わかりやすく「なし」にします。

4.「あり」の分岐の先に、「割り当て」要素で「添付あり」カスタムチェックボックス項目をTrue
変数 | 演算子 | 値 |
$Record>添付あり (カスタムチェックボックス項目) | 次の文字列と一致する | True |

フローの設定はここまでです。
⚠注意点
「添付あり」チェックをオンにした後、ファイルを削除してもチェックオフにはなりません。
もし、添付ファイルを削除し得る業務フローで、「添付あり」チェックをオンにするだけではなくオフにする必要もある場合は、開始条件を緩めに設定し、「なし」の分岐の先に「割り当て」要素で「添付あり」カスタムチェックボックス項目をFalseにすることでフォローはできますが、必ず元レコードの更新は必要です。

+α 入力規則の設定
今回はトリガレコード自身の更新なので「高速項目更新」フローで設定しています。
「高速項目更新」は「入力規則」よりも先に動くため入力規則のエラーメッセージと組み合わせて使用することができます。
応募者オブジェクトへ下記入力規則を設定しました。
ISPICKVAL( Stage__c , "書類受付") && NOT( IsAttached__c )
挙動確認
「ファイル」に登録がないまま、「選考状況」を「応募」→「書類受付」に変更してみます。

入力規則で設定したエラーメッセージが表示されました。

ファイルをアップロードしたあとに、「選考状況」を「応募」→「書類受付」へ進めてみます。

エラーなく選考状況を更新でき、「添付あり」のチェックがオンになりました。
挙動確認のために添付ありチェック項目をページレイアウトに置いていますが、ユーザが手動でオンにしたり、「ファイル添付したのにすぐにオンにならない!?」と混乱してしまう原因になるのでページレイアウトには配置しない方が好ましいです。

しかし、
・ファイルのアップロードが一番最後のプロセスだ
・ファイルをアップロード後にすっかり忘れて放置しているレコードをあぶり出したい
ような場合は、添付先レコードが更新されないためこのフローは合いません。
・むしろ、ファイルを添付したら自動で選考状況(フェーズ)を進めたいんだよ
というご要望も、理解できます。
さらに別の手段も考えてみました。
次回へ続きます~