日々様々なお客様のSalesforceに関する相談を頂いております。
その中でよくお話に出てくるのが、商談もしくはフェーズ(進捗状況)管理を行う際に、
・各フェーズ(進捗状況)に移行した日付を取りたい
・その日付の差分から各フェーズ間の日数を算出したい
このような要件をよく耳にします。
項目履歴管理機能で各フェーズの変更日はとれますが、差分を抽出するとなるとレコード上に日付の項目を用意しその差分を集計する数式を作成するなどの対応が必要となります。
こういった機能は本当に多くのお客様で実装されているとは思いますが、これからSalesforceを触って実装する方々にとっては、フローという自動化機能を利用しなければならず、少しハードルが高いかと思います。
そのような方へ向けた簡単なフロー実装方法を2つご紹介したいと思います。
以下の流れで進めていきます。
①事前準備(両バージョン共通) カスタム数式項目の作成
日付の差分を抽出する数式項目の作成②簡易自動化設定③少し難易度の高い自動化設定■事前準備(両バージョン共通)
仮にある商談(他オブジェクトでも同様)に下記のようなフェーズがあったとします。
未提案>アポ>訪問>提案済み>見積中>成立or失注まずはフェーズが変更された場合に、その日付を残す項目を作成します。下記手順で各日付項目を作成していきます。
設定>オブジェクトマネージャ>対象オブジェクト検索>項目とリレーション>新規>日付>
項目の表示ラベル:任意、項目名:任意(半角英数字)、次へ>次へ>保存
今回は下記のように作成してみました。

ただし一番最初のフェーズ(今回で言えば未提案)については、変更して値を入力するものではなくデフォルト値として当日の日付を入れたほうが良いかと思われます。
その為、下記画像のようにデフォルト値に「TODAY()」と入力しておくことをお勧めします。

次に2つの日付間の日数を抽出する数式項目を作成します。
例えば、01未提案通過日 と 02アポ通過日 の差分は
02アポ通過日 - 01未提案通過日 で求められます。数式項目の作成は、項目とリレーション>新規>数式>項目の表示ラベル:01>02の日数 (任意)項目名:X01_X02 (任意)戻り値のデータ型:数値小数点の位置:0次へ>数式: X02__c - X01__c ※項目の挿入から作成した項目名を指定してください
次へ>次へ>保存 上記のように各フェーズ間の差分を抽出する項目を必要な数だけ作成していきます。
すべての項目が作成できたらページレイアウトで見やすい形に整えてください。
■簡易自動化設定
日付項目に手動でフェーズ変更日を入力するのは大変ですので自動化設定を行います。
自動化機能を使ってフェーズが変更されたタイミングで作成した日付項目に当日の日付を残すような設定を行いたいと思います。
最初の未提案フェーズについてはデフォルト値が入っている想定なので、2つ目のフェーズ「アポ」へ変更した場合に、自動的に日付が入るフローです。
すでに日付が入力されていた場合、上書きしないように空白の場合のみ日付を入れる条件にしておきたいと思います。
設定>フロー>新規フロー>レコードトリガフロー>作成

オブジェクト:商談(他任意のオブジェクト)
トリガを設定:レコードが更新された
条件の要件:すべての条件に一致(AND)
項目:フェーズ(StageName)
演算子:次の文字列と一致する
値:アポ
条件の要件に一致するようにレコードを更新したときのみ:✅
フローを最適化:高速項目更新

+ボタンからトリガレコードを更新

表示ラベル:アポ変更時に値入力
(任意でわかりやすい名前)API参照名:phase2 (任意でわかりやすい名前)
更新するレコードを検索してその値を設定する方法:フローをトリガした 商談 レコードを使用
↓
この部分が上書き防止↓レコード を更新する条件の要件:すべての条件に一致(AND)
項目:02アポ通過日 (X02__c)
演算子:null
値:True
↑この部分が上書き防止↑
商談 の項目値を レコード に設定
項目:
02アポ通過日 (X02__c)値:$Flow>CurrentDate (当日の値)

画面右上から 保存
フローの表示ラベル:【商談】アポの場合に日付挿入 (任意)
フローのAPI参照名:phase2
(任意)
保存が終わったら有効化を行いましょう

上記の流れで他のフェーズが変更された場合に日付を入力する自動化設定を行います。
すべての自動化設定が完了し、問題なく動作すれば最初に作成した日付に値が入り、数式項目で自動的に日数の差分が計算されます。下記のようなイメージです。

■少し難易度の高い自動化設定
簡易バージョンの場合、フローが増えてしまうので管理が難しくなります。上記で作成したものを1つのフローでまとめることもできます。
設定>フロー>新規フロー>レコードトリガフロー>作成>オブジェクト:商談(他任意のオブジェクト)
トリガを設定:レコードが更新された
条件の要件:すべての条件に一致(AND)
項目:フェーズ(StageName)
演算子:変更済み
値:True
フローを最適化:高速項目更新
+ボタンからロジック>決定 を選択
表示ラベル:フェーズ確認
API参照名:dec_phase
表示ラベル:アポ
結果の API 参照名:phase1
結果を実行する条件の要件:すべての条件に一致(AND)
リソース:$Record>StageName
演算子:次の文字列と一致する
値:アポ
結果を実行するタイミング:フローの実行をトリガしたレコードが条件の要件を満たすように更新された場合のみ

次の条件は画面左の+ボタンから追加し、各フェーズが変更された場合の訪問以降の条件を上記のようにキャプチャ画像のように作成

すべての条件が設定できましたら、各分岐先に簡易自動化設定で行ったようにレコードの更新を作成していきます。
完成イメージはこちらです。

これで1つのフローですべてのフェーズを変更した際に、日付を残すことができます。
もちろん実際の運用では・・
・フェーズを飛ばした場合は飛ばしたフェーズに日付を入れたい
・フェーズを戻した場合は上書きしたい
・フェーズを戻した場合は、その先のフェーズの日付をすべてnullにしたい
などなど沢山の要件が出てくると思いますが、こちらは条件をうまく設定したり、レコードの更新項目を変更することで対応可能です。
またもちろんですが、この設定は実際の運用環境でいきなり設定してはいけません。
様々なエラーが発生する可能性があるので、必ずSandboxや自身のDeveloper環境などで検証してから実装してください。