見出し画像

SalesforceカスタマイズTips:MRRのレコードをノンコーディングで作成

こんにちは。ROBOT PAYMENTの中野です。
今回はMRRをSalesforceのレポートを活用し表現するための
カスタマイズをご紹介します。

まず、はじめに


MRRとはMonthly Recurring Revenueの略で平たくお伝えいたしますと
契約によって発生する月々の売上を意味する言葉です。

こちらの概念は契約締結時に顧客との契約期間に応じた月々の売上が確定するモデル(=サブスクモデル)で利用され、例えば12か月間のご契約が締結した場合、先々の12か月分の売上の見通しを立てることができます。

Sales Cloudをご利用の方は標準オブジェクトの商談や商談商品を
利用されている方も多いかと思います。
しかし、商談は案件の進捗管理で利用し、付随するオブジェクトの
商談商品に各販売商材の受注金額のみを登録されていて、月々の売上に直してレポートで見ることができていない方も多いのではないでしょうか?

そんな方のために、今回は商談商品を利用し、MRRのレコードを
ノンコーディングで作成する方法をご紹介します!

作成方法

商談と商談商品を利用してもよかったのですが、今回、
カスタムオブジェクトで契約管理と契約商品というオブジェクトを作成し、
ご説明します。

1.カスタムオブジェクトの作成

以下のカスタムオブジェクトを用意します。

<カスタムオブジェクト1>
表示ラベル:契約管理
API参照名 :ContractManegement
<カスタムオブジェクト2>
表示ラベル:契約商品
API参照名 :ContractProduct
<カスタムオブジェクト3>
表示ラベル:売上
API参照名 :Sales

2.カスタム項目の設置

1で作成したカスタムオブジェクトに対して最低以下の項目を用意していただきます。

◆契約管理
※Name項目は自動採番でもテキストでもどちらでも可
表示ラベル:取引先
API参照名 :Account
データ型 :参照関係
◆契約商品
※Name項目はテキストを指定
<項目①>
表示ラベル:単価
API参照名 :UnitPrice
データ型 :通貨(18、0)
<項目②>
表示ラベル:数量
API参照名 :Quantity
データ型 :数値(18、0)
<項目③>
表示ラベル:月数
API参照名 :NumberOfContractMonth
データ型 :数値(18、0)
<項目④>
表示ラベル:利用開始日
API参照名 :StartDate
データ型 :日付
<項目⑤>
表示ラベル:契約管理
API参照名 :ContractManegement
データ型 :参照関係
◆売上
※Name項目はテキストを指定
<項目①>
表示ラベル:計上日
API参照名 :SalesRecordedDate
データ型 :日付
<項目②>
表示ラベル:計上金額
API参照名 :SalesRecordedAmount
データ型 :通貨(18、0)
<項目③>
表示ラベル:契約管理
API参照名 :ContractManegement
データ型 :参照関係
<項目④>
表示ラベル:契約商品
API参照名 :ContractProduct
データ型 :参照関係

3.フローを作成

<作成手順1>
フローの作成画面を表示し、フローの種別を選択します。
前回のブログでは自動起動を記載した為、今回は画面フローを選択します。

画像1

画面フローの場合、アクションを作成し、ボタン化することができ、自動起動の時に発生しがちなオペレーションを行う人が、

・よくわからないけどエラーが起きた
・よくわからないけど起動しなかった

みたいな問い合わせがシステム管理者の方に来るかと思いますが、
ボタン起動の場合、

・取得したレコードの内容に合わせ分岐を設け、エラー画面内容を出力

という構築が可能なため、オペレーションを行う人に自己解決を促せるので、管理の手間がかからないというメリットがあります。
※余談になりますが、中野はよくボタン起動を利用します。

<作成手順2>
次に左端のツールボックスから「レコードを取得」のアイコンをパネルの方に移動します。表示ラベルやAPI参照名については任意の内容で構いませんが、一旦以下の内容を設定します。

★設定1


・表示ラベル:契約商品取得
・API参照名 :GetContractProdcut
・オブジェクト:契約商品

画像3

★設定2
そのうえで、「条件の要件:条件を満たしている」を選択し、以下の条件を設定します。

<条件1>
・項目 :契約管理(API参照名:ContractManegement__c)
・演算子:次の文字列と一致する
・値  :{!recordId}

画像4

この値で選択しているrecordIdという変数は以下の内容で作成していただきます。

<設定内容>
・リソース種別:変数
・API参照名  :recordId
・データ型  :テキスト
※フロー外部での可用性には入力、出力ともにチェックをつけます。

画像2

上記の変数については、画面フローで作成されたフローを利用したアクションを押したレコードのSalesforceIDを取得するための変数になります。
※この変数はよく利用しますので、覚えて頂くと結構役に立ちます!

★設定3
契約商品のレコードを取得する順番については、特定の順番で処理を実施したいというものがなければ、「並び替えなし」を選択していただきます。

★設定4
「保存するレコード数」として「すべてのレコード」を選択します。
今回契約管理のオブジェクトに紐づく契約商品から売上のレコードを一括で作成してしまうので、今回の目的に対しては、「すべてのレコード」を選択していただきます。

画像5

★設定5
レコードデータの保存方法として、「項目を選択して変数を割り当てる(高度)」を選択し、条件に合致したレコード全件を保存するためのレコードコレクション変数を作成します。

★設定6
新規リソースを選択し、以下の条件を設定します。

<設定内容>
・リソース種別:変数
・API参照名  :ContractProductCollection
・データ型  :レコード
・オブジェクト:契約商品
※フロー外部での可用性には入力、出力ともにチェックをつけます。

画像6

ここで重要なのが、すべてのレコードを取得する場合、「複数の値を許可(コレクション)」にチェックをつけることになります。
こちらにチェックをつけていない場合、複数レコードを保存する変数(=コレクション変数)として利用できなくなります。

★設定7
取得したレコードの変数に保存する項目を選択します。

<変数保存する項目1>
・表示ラベル:契約商品名
・API参照名 :Name
<変数保存する項目2>
・表示ラベル:契約管理
・API参照名 :ContractManegement__c
<変数保存する項目3>
・表示ラベル:月数
・API参照名 :NumberOfContractMonth__c
<変数保存する項目4>
・表示ラベル:単価
・API参照名 :UnitPrice__c
<変数保存する項目5>
・表示ラベル:数量
・API参照名 :Quantity__c
<変数保存する項目6>
・表示ラベル:利用開始日
・API参照名 :StartDate__c

画像7


<作成手順3>
★設定1
次に左端のツールボックスから「ループ」のアイコンをパネルの方に移動します。表示ラベルやAPI参照名については任意の内容で構いませんが、一旦以下の内容を設定します。

・表示ラベル   :契約商品のループ処理
・API参照名    :LoopContractProdcut
・コレクション変数:{!ContractProductCollection}

画像8


この作成ステップで使うループ要素は複数のレコードを取得し、変数保存したコレクション変数から1レコードづつレコードを取り出し、変数や別オブジェクトのレコード変数に値を割り当てる処理を実施する為に利用します。

<作成手順4>
★設定1
次に左端のツールボックスから「割り当て」のアイコンをパネルの方に移動します。表示ラベルやAPI参照名については任意の内容で構いませんが、一旦以下の内容を設定します。

・表示ラベル   :月数の割り当て
・API参照名    :AssingNumberOfContractMont

★設定2
ループ処理で流されてきたレコードの月数を保存する変数を作成します。

<設定内容>
・リソース種別:変数
・API参照名  :ContractMonthValue
・データ型  :数値
・少数点の位置:0
※フロー外部での可用性には入力、出力ともにチェックをつけます。


★設定3
上記で作成した変数等を用い以下のように設定します。

・変数 :{!ContractMonthValue}
・演算子:次の文字列と一致する
・値  :{!LoopContractProduct.NumberOfContractMonth__c}
※こちらの値はループ処理によって割り当て処理に流されてきたレコードに
 保存されていた月数が値としてセットされていきます。

<作成手順5>
★設定1
左端のツールボックスから「割り当て」のアイコンをパネルの方に移動します。表示ラベルやAPI参照名については任意の内容で構いませんが、一旦以下の内容を設定します。

・表示ラベル   :売上レコード変数に変数割り当て
・API参照名    :ConvertToSales

★設定2
ループ処理で流された契約商品の値から売上レコードに変換を行います。

<設定内容>
・リソース種別:変数
・API参照名  :SalesRecords
・データ型  :レコード
・オブジェクト:売上
※フロー外部での可用性には入力、出力ともにチェックをつけます。
※複数の値を許可(コレクション)にはチェックをつけないでおきます。

画像9

★設定3
売上レコードへのマッピングを以下のように設定します。

<マッピング①>
・変数 :{!SalesRecords.ContractManegement__c}
・演算子:次の文字列と一致する
・値  :{!LoopContractProduct.ContractManegement__c}
<マッピング②>
・変数 :{!SalesRecords.ContractProduct__c}
・演算子:次の文字列と一致する
・値  :{!LoopContractProduct.Id}
<マッピング③>
・変数 :{!SalesRecords.Name}
・演算子:次の文字列と一致する
・値  :{!LoopContractProduct.Name}
<マッピング④>
・変数 :{!SalesRecords.SalesRecordedAmount__c}
・演算子:次の文字列と一致する
・値  :{!FormulaRecordedAmount}
※{!FormulaRecordedAmount}は数式項目になっており、数式は以下の内容になっています。
<数式内容①>
・リソース種別:数式
・API参照名  :FormulaRecordedAmount
・データ型  :通貨
・少数点の位置:0
・数式の内容 :{!LoopContractProduct.UnitPrice__c}*{!LoopContractProduct.Quantity__c}
<マッピング⑤>
・変数 :{!SalesRecords.SalesRecordedDate__c}
・演算子:次の文字列と一致する
・値  :{!FormulaSalesRecordedDate}
※{!FormulaSalesRecordedDate}は数式項目になっており、数式は以下の内容になっています。
<数式内容②>
・リソース種別:数式
・API参照名  :FormulaSalesRecordedDate
・データ型  :日付
・数式の内容 :ADDMONTHS({!LoopContractProduct.StartDate__c},{!MonthValue})
※ADDMONTHS関数は特定の日付に対して、カンマ以降の値で指定された月数後の日付をセットしてくれる関数になっています。
※ADDMONTHS関数内で指定している{!MonthValue}は変数となり、内容は以下となります。
<変数内容>
・リソース種別:変数
・API参照名  :MonthValue
・データ型  :数値
・少数点の位置:0
・デフォルト値:0
※フロー外部での可用性には入力、出力ともにチェックをつけます。
※必ずデフォルト値に0を指定していただきます。

※数式内容①の画像※

画像10

※数式内容②の画像※

画像11


<作成手順6>
★設定1
左端のツールボックスから「割り当て」のアイコンをパネルの方に移動します。表示ラベルやAPI参照名については任意の内容で構いませんが、一旦以下の内容を設定します。

・表示ラベル   :売上レコードをコレクション変数に保存
・API参照名    :AssingSalesCollection


★設定2
売上に変換されたレコードを保存するコレクション変数を作成します。

<設定内容>
・リソース種別:変数
・API参照名  :SalesCollection
・データ型  :レコード
・オブジェクト:売上
※フロー外部での可用性には入力、出力ともにチェックをつけます。
※必ず「複数の値を許可(コレクション)」にチェックをつけます。

画像12

★設定3
売上レコードをコレクション変数に以下のように割り当てます。

・変数 :{!SalesCollection}
・演算子:追加
・値  :{!SalesRecords}

画像13


<作成手順7>
★設定1
左端のツールボックスから「割り当て」のアイコンをパネルの方に移動します。表示ラベルやAPI参照名については任意の内容で構いませんが、一旦以下の内容を設定します。

・表示ラベル   :変数内容変更
・API参照名    :ChangeVariable

★設定2
変数に保存されていた内容を以下のように変更します。

<変更内容①>
・変数 :{!ContractMonthValue}
・演算子:減算
・値  :1
<変更内容②>
・変数 :{!MonthValue}
・演算子:追加
・値  :1

画像14

この割り当て処理では

・ADDMONTHS関数で月数を増やすカンマ以降の値に1を追加し、次回売上
 レコードの 変換を行う際に翌月の日付が入るようにするための処理

・作成手順8でご案内する分岐の条件で、契約商品の月数分のレコードが
 作成されたかをチェックする処理があり、そのチェックに引き渡す変数を
 レコードを作成するたびに、1づつ減算を行い、1つの契約商品から
 作成する売上レコードの作成回数を調整する処理

となっています。

<作成手順8>
★設定1
左端のツールボックスから「決定」のアイコンをパネルの方に移動します。
表示ラベルやAPI参照名については任意の内容で構いませんが、一旦以下の内容を設定します。

・表示ラベル   :レコード作成回数のチェック
・API参照名    :CheckContractMonthValue

★設定2
次に分岐条件を二つ作成します。

<分岐条件1>
・表示ラベル   :同一の契約商品から変数作成処理継続
・API参照名    :Continue
※「結果を実行するタイミング」は「すべての条件に一致」を選択します。
・リソース    :{!ContractMonthValue}
・演算子     :より大きい
・値       :0

画像15

<分岐条件2>
・表示ラベル   :別契約商品に処理の対象を変更
・API参照名    :NextRecord
※「結果を実行するタイミング」は「すべての条件に一致」を選択します。
・リソース    :{!ContractMonthValue}
・演算子     :次の文字列に一致する
・値       :0

画像16

なお、この二つの分岐を利用し、

・分岐条件1に当てはまる場合:作成手順5で作成した割り当て要素に移動
・分岐条件2に当てはまる場合:この後ご案内する作成手順9に移動

と各要素に誘導します。

<作成手順9>
★設定1
左端のツールボックスから「割り当て」のアイコンをパネルの方に移動します。表示ラベルやAPI参照名については任意の内容で構いませんが、一旦以下の内容を設定します。

・表示ラベル   :ADDMONTHS関数に利用する変数をリセット
・API参照名    :ResetMonthValue

★設定2
変数に保存されていた内容を以下のように変更します。

・変数 :{!MonthValue}
・演算子:次の文字列に一致する
・値  :0

画像17

この設定は、次の契約商品から売上のレコード変数を作成する際に、
前の契約商品で加算されていった月数をリセットし、また1からカウントしていくための処理になります。

<作成手順10>

★設定1
左端のツールボックスから「作成」のアイコンをパネルの方に移動します。
表示ラベルやAPI参照名については任意の内容で構いませんが、一旦以下の内容を設定します。

・表示ラベル   :売上作成
・API参照名    :CreateSales

★設定2
以下の内容を設定します。


・作成するレコード数 :複数
・レコードコレクション:{!SalesCollection}

<作成手順11>
3~10までの作成手順がおわりましたら、以下の画像のように要素をつなげていき、つなげ終わったら、保存し有効化します。

画像18

<作成手順12>
★設定1
オブジェクトマネージャから契約管理のオブジェクトを検索し、
契約管理の詳細ページから「ボタン、リンク、およびアクション」を選択し、「新規アクション」をクリックします。

★設定2
新規アクション作成画面から以下の設定を行います。

・アクション種別:フロー
・フロー    :作成手順11で保存したフローを指定
・表示ラベル  :MRR作成
・API参照名   :CreateMRR
※表示ラベル、API参照名は任意の内容でも問題ありません。

★設定3
同オブジェクトページレイアウトの編集画面内のモバイルおよび、Lightningのアクションを選択し、作成手順12の設定2で作成したアクションをページレイアウトに設置し、保存。

画像19


お疲れ様です!上記で作成は完了です!

<補足>
設定4の前に画面のアイコンを追加し、「MRRの作成処理を開始します」などの表示テキストを挟んであげるとよりオペレーションを行う方にとっては今何をやっているかわかりやすくなるので追加してみるといいかもしれません。

また、こちらは1つのレコードから別オブジェクトのレコードを複数作成するなど、レコードの分割にも応用できますので、MRR以外の活用方法のご参考までにご利用いただければと思います。

この記事が気に入ったらサポートをしてみませんか?