こんにちは~ゆずねこです。
最近同僚が子猫を飼い始めたのでおうちに遊びに行かせてもらいました🐈
うちの子🐈の幼い頃を思い出して、とっても癒されました(*^_^*)💛
さて、本日は
Salesforceでのサブスク管理について書き起こしていこうと思います!
以前、アドミとして保守を担当させていただいたお客様が「サブスクリプションサービス」の商談から契約、売上の管理をされていました。
どうにかAppExchangeなどを使わずに標準で出来るカスタマイズができないかのご相談を受けた際に、実装した内容です。
※過去の事例を開発環境に再現して掲載しています
~前提~
概要・クラウド製品を月額で販売している企業様
・複数のプランがあり、プランによって月額が異なる
・基本的には1年間で一括のライセンス販売
AsIs・商談はサブスクリプションサービスの提案~成立までを管理
・商談成立後に契約レコードを作り、1顧客1年につき1契約レコードで管理
・商談商品は使っていない
課題・契約レコードに金額を入力しているが、表示できるのは月額×12か月の年間金額のみ
・場合によっては6か月などの短期契約も存在するため管理方法が分からない・月次の金額がSalesforce上で表現できずExcelで管理している
・顧客によりディスカウントが入るが、どのように入力したらよいか分からない
ToBe・
月次の金額(1顧客につき月額どれくらい売上が出ているか)を可視化・短期契約顧客やディスカウントにも対応できる金額を記録~オブジェクト構成図~
今回は契約の一部分の改修と、新たにカスタムオブジェクト(月次売上)を作成します!
①カスタムオブジェクトの作成【月次売上】
元々「契約」オブジェクトで年間の金額(ARR)を管理されていました。
単純に÷12をすれば1か月あたりの金額(MRR)の算出は出来るのですが、契約期間が1年未満であったりディスカウントが入る場合は難しいですよね。
そのため、1か月につき1レコードを作成するのがマストです。
その箱をまずは用意していきます!
<オブジェクト詳細>
・オブジェクト名「月次売上」(任意)
・レコード名:自動採番(任意)

※タブ表示、追加機能、オブジェクトの分類、検索状況などは任意で設定してください
<項目>

最低限このあたりの項目を用意しましょう。
もちろん、ビジネスプロセスにあわせて追加・変更してくださいね!
月別の売上を可視化することが目的ですので、以下の項目は必要です。
・金額(月額)
・計上日
・契約(主従関係)
また、プランやステータスも取り扱うサービス・商材によって変えてください。
例として
・売上状況(ステータス)
・「見込み」 (売りが上がるであろう予測)
・「確定」 (確実に売上が出た状況)
・「キャンセル」 (…売上が予測されていたがキャンセルとなった状況)
・プラン
・スタンダード
・プレミアム
等です。
また、割引が発生する場合は「家族割」「シーズン割」などの割引用を設けてもいいですね!
ここまで出来ましたら、ページレイアウトやLightningページを調整しましょう。
さて、契約に紐づく「月次売上」オブジェクトが出来ました!
しかし、12か月分の売上状況を1つずつポチポチ作成していくのは面倒ですね。
月次売上を一括で作成するというフローも作っちゃいます。
②月次売上一括作成フローの作成
<フローで実施したいこと>①作成したい月次売上の情報を入力すると、契約レコードに紐づいた月次売上レコードが複数一括作成
②作成済の月次売上レコードを期間指定削除
③作成済の月次売上レコードを一括削除
※今回は①一括作成のみ解説していきます<全体図イメージ>

<詳細>
・フロー種別は「画面フロー」を使用
・契約レコードにアクションとして配置
<要素説明>
①取得
まずは紐づく契約情報を取得します。契約レコードIDを変数「recordId」に保存しておきます。
*recordIdの説明はこちらの公式ヘルプをご参照ください!
https://help.salesforce.com/s/articleView?id=sf.omnichannel_create_recordid.htm&type=5②画面
月次売上を作成する画面コンポーネントです。
中身はこのようになっています。


ユーザ向けUIはこのように遷移していきます。
※画面コンポーネントは1つですが、コンポーネント表示条件で分岐させています
1.操作の選択

2.一括作成させるレコードの情報を入力
(計上日、作成月数、プラン、月額)

ここまでを1つの画面コンポーネントで表現しています。
※計上日・作成月数は契約レコードからデフォルト値をセットしています
③決定
画面で選んだ操作別にフローを分岐させていきます。
今回は「一括作成」「期間指定削除」「一括削除」で分類しました。

画面コンポーネントで選んだリストがどの値(操作)だったかの識別です。
~一括作成の場合~
※今回は一括作成のみの解説です
一括作成の場合は、「いくつレコードを作るのか」が肝になってきます!
今回は「作成月数」を作成レコード数とみなします。
④画面
ユーザが入力した情報を表示する確認画面を挟みます。

中身はシンプル。テキスト&画面でユーザが入力したinputリソースで構成しています。

⑤割り当て
ここで「いくつレコードを作成するか」を割り当てます!

・var_includingDate : ①画面 にて入力した計上日
・var_count :
①画面 にて入力した作成月数1か月1レコード作成する想定なので、計上日が5月1日だった場合
5月1日のレコード、6月1日のレコード、7月1日のレコード…が「var_count」分作成されるイメージです。
⑥決定
作成するレコード数に応じて分岐します。
最終的に一括で作成処理をかけたいので、
コレクション変数に入れる準備です。
先ほどの割り当てが0件(=つまり作成するレコードが0件)か、0件ではないのかを判別させます。
🌈 POINT🌈 この時点で
レコード単一変数を作っておきましょう!!
対象オブジェクト:月次売上

⑦
割り当て 「0件でない場合(1件以上あり)」
∟割り当て要素を使って、1件ずつ作成するレコードの情報をつくっていきます。
基本的には①画面要素でユーザが入力した情報(値)を、先ほど作成したレコード単一変数に入れていきます。
デフォルト値でセットさせるところは自由にセットしてくださいね!
※今回は売上状況を全て見込みで作成します

ここまできたらもうすぐです!
🌈 POINT🌈 この時点で
レコードコレクション変数を作っておきましょう!!
(作り方は単一変数とほとんど同じです)
対象オブジェクト:月次売上

⑧割り当て
⑦でレコード単一変数に入れた変数をコレクション変数に追加していきます。
コレクション変数がよくわからないよ!という方は、レコード単一変数の集まりのような大きな箱をイメージしていただけると◎

さて、コレクション変数への割り当てはこのように設定していきます。
var_MonthlySalesList … コレクション変数
vara_MonthlySales … レコード単一変数

⑨割り当て
ここで1レコード分のレコード単一変数がコレクション変数に入ったので、「作成月数」を1減らし、次のレコード情報作成に移ります。

var_count … 「作成月数」 1減らす
formula_SalesDate … 「計上日」を翌月にする数式
(6/1の次は7/1,8/1…とするため)

そして、要素⑦の割り当てに接続し、⑦~⑨までの処理を0になるまで繰り返します。
0になったら、
要素⑦ の「カウンタが0件」に進みます!

⑩作成
ここではもうレコードを一括作成するだけです!
先ほどまでどんどんレコード単一変数さんを入れてきたコレクション変数さんに、一括でレコードを作ってもらいましょう。

一括作成後の契約レコードの見え方はコチラ。

分かりやすく見えるよう、ページ右側に契約に紐づく月次売上の関連リストを表示しています!
Lightningページの設定はこちらです。

開発環境のため非常にシンプルなUIにしておりますが、
契約レコードを使って契約状況を管理する際はパスなどをカスタマイズしてくださいね。
ディスカウントが入る際は月次売上レコードの「金額」を手動変更すればOK。
もしくは、ステータスを「キャンセル」にし金額を変更してもいいですし
あらかじめ「割引」という選択リストを用意しておくのも良いですね。
Ex)2023/6/1計上分の売上が10,000円から9,000円に割引になった場合
(割引分をキャンセルとして計上)

こちらは運用や業務フローに応じて自由に設定してみてください(^_^)/
また、課題としてあがっていた「短期契約がある」という事象も
作成時の「作成月数」を必要な月数のみにすることで解決できます!
レポートとして表現すると、このように月別・売上状況別に可視化することができます📊
(グルーピングを変更することで顧客別データも抽出可能!)


また、契約レコードを使わずに
カスタムオブジェクトを契約に見立てて作成してみるのも1つの手。
Salesforceはいろいろなカスタマイズが出来るので本当に楽しいですね
🙋♀️!今回のフローはあくまでも一例であり、作り方は無限大なので
組織にあわせて作成してみてくださいね~!