LoginSignup
1
2

More than 1 year has passed since last update.

Salesforceフローで各レコードの添付ファイルの有無を自動チェックする

Last updated at Posted at 2022-05-06

この記事の概要

セールスフォースでレコードに添付ファイルがついているかどうかがリストビューから分かるといいな、と思った事ありますよね?
やり方を探してみると、APEXでの開発が必要という記述が見つかります。

しかし、コードなんて書けない!!
という人(僕のことです)の為に、
フローで何とかできないか、やってみました。

残念ながらファイルの添付をトリガにしたレコードトリガフローは作れないようなので、
毎晩実行されるスケジュールトリガフローで
添付した翌日にはチェックボックスがtrueになるというものを作りました。

なんか簡単なようで結構大作になってしまったので、
もしかしたらもっとシンプルな方法があるかもしれません。

また僕はこれの応用で
SVFcloudで帳票ファイルに添付画像を出力するために必要なコンテンツドキュメントIDを
自動でテキスト項目に記入するフローを使っています。
途中でレコードを取得しているのでこれも殆ど同じように作れます。

添付ファイルのリレーションってどうなってるのか

セールスフォースの添付ファイルは下の図のようなオブジェクトで構成されています。
添付ファイルの構造.jpg
添付されるオブジェクトに直接添付ファイルオブジェクトのリレーションがあるわけではなく、
間にコンテンツドキュメントリンクという連結オブジェクトを持つ、いわゆる多対多のリレーションになっています。

厄介なのはコンテンツドキュメントリンクには作成日の項目が無い事です。
なので、今回のフローでは
前日に作成されたコンテンツドキュメントのレコードを取得して、
そこからコンテンツドキュメントリンクのレコードを辿って、
添付されるオブジェクトのレコードを見つけて「添付ファイルの有無」チェックボックスをtrueにします。

フローの全体像

スクリーンショット 2022-05-06 110934.png
スクリーンショット 2022-05-06 110958.png
スクリーンショット 2022-05-06 111015.png
スクリーンショット 2022-05-06 111029.png
全体像はこんな感じです。
流れは、

  1. 前日に作成されたコンテンツドキュメントのレコードを取得
  2. 取得したコンテンツドキュメントレコードの子レコードであるコンテンツドキュメントリンクをコレクション変数に割り当て
  3. リンク先の添付元レコードを取得
  4. 1レコードに複数ファイルが添付されている場合に重複しないようにしながら、添付元レコードをコレクション変数に割り当て(この時に添付ファイルチェックボックス項目をtrueにする)
  5. コレクション変数に基づいて添付元レコードを更新

と、なります。
割とめんどくさいのが複数ファイル添付のチェックです。
しかしこれをやっておかないとレコード更新時にエラーが出ます。
おかげで多重ループも使う羽目に。

あと、細かい説明を省いていますが適宜必要な変数を作成してください。

中身

前日に作成されたコンテンツドキュメントのレコードを取得

スクリーンショット 2022-05-06 112106.png
とりあえず、毎晩動くようにしておきます。
スクリーンショット 2022-05-06 112151.png
コンテンツドキュメントオブジェクトで前日以降に作られたレコードをすべて取得します。(前日は数式で作っておきます)

取得したコンテンツドキュメントレコードの子レコードであるコンテンツドキュメントリンクをコレクション変数に割り当て

スクリーンショット 2022-05-06 112345.png
取得したレコードでループします。
スクリーンショット 2022-05-06 112456.png
コンテンツドキュメントリンクオブジェクトのレコードを取得します。
条件はこのレコードの親になるコンテンツドキュメントIDがループしているレコードのIDと一致しているものです。
スクリーンショット 2022-05-06 112706.png
取得したレコードをコレクション変数に割り当てます。

このループを回して、コンテンツドキュメントリンクのコレクション変数を前日作成されたもので満たします。

リンク先の添付元レコードを取得

スクリーンショット 2022-05-06 112835.png
作成したコンテンツドキュメントリンクのコレクション変数でループします。
スクリーンショット 2022-05-06 112948.png
添付されるオブジェクトのレコードを取得します。
条件はカスタムオブジェクトIDがループしているレコードの「リンク済みエンティティID」と一致するものです。
image.png
レコードが取得できたかどうかを確認します。
(今思ったけどもしかしたらこれ要らないかも。)

1レコードに複数ファイルが添付されている場合に重複しないようにしながら、添付元レコードをコレクション変数に割り当て(この時に添付ファイルチェックボックス項目をtrueにする)

スクリーンショット 2022-05-06 113457.png
コレクション変数でループします。このコレクション変数は最終的に更新する対象となる添付されるオブジェクトのレコードコレクションです。
スクリーンショット 2022-05-06 113643.png
さっき取得した添付されているレコードがループしているレコードとIDが一致するかどうかを確認します。
スクリーンショット 2022-05-06 113818.png
上記の分岐で重複するとされた場合にBoolean変数をTrueにします。この変数は予め別途作成しておいてください。
このループで、総当たりで重複するレコードがないか確認をしていき、一つでも重複があればBoolean変数で記録するようになっています。
スクリーンショット 2022-05-06 114100.png
で、Boolean変数がTrueかどうかで重複がある(つまり同一レコードに添付されている二つ目以降の添付ファイル)事を確認します。
スクリーンショット 2022-05-06 114242.png
重複が無い場合は単一レコード変数に割り当てます。この時に添付ファイルの有無項目のチェックボックスをtrueにしておきます。
スクリーンショット 2022-05-06 114418.png
で、単一レコード変数をコレクション変数に追加します。
スクリーンショット 2022-05-06 114521.png
また重複確認に使用するのでBoolean変数をFalseに戻しておきます。

コレクション変数に基づいて添付元レコードを更新

スクリーンショット 2022-05-06 114640.png
最終的に更新すべきレコードコレクション変数が空っぽでないかどうか、つまり前日に何も添付されなかったかどうかを確認します。
これをやらないと空でレコード更新するとエラーが出ます。
月曜日に出勤してきたらエラーのメールが来てると凹みますよね。
スクリーンショット 2022-05-06 114848.png
最後にコレクション変数を基にレコード更新して終わりです。

最後に

もっとクールな方法があるような気もしますが、
今の僕にできるのはこんな感じです。
特に、ループの中でレコードを取得しないで済む方法があればいいなと思ってるんですが、
どうしたらいいんでしょうね。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2