目次
例えば、すでに成約に至った商談があるとします。その後、同じような商談が同じクライアントからくることはよくあることだと思います。そのような場合は、商談のデフォルト機能である「コピー」ボタンを利用しても良いのですが、商談に紐づいている関連レコードまではコピーしてくれません。そこで今回は、商談の詳細をコピーするだけでなく商談に紐づく関連レコードも一緒にコピーするボタンの作成方法についてご説明いたします。
仕組みの全体像
まずは、この機能が実行される順序について説明します。その後、各要素について説明します。
- 商談をコピーするフローを起動するカスタムボタンを押下(カスタムボタン)
- 商談をコピーするフローが起動して商談がコピーされる(フロー1)
- コピーされた新しい商談に、コピー元の商談の関連リストを追加する(フロー2)
概要としては、上記の3ステップを踏んで商談をコピー(関連リストもコピー)されます。
商談をコピーするフローを作る
まずは既存の商談をコピーするフローを作成します。画面フローを選択してください。なぜなら画面フローでないとカスタムボタンで起動することが出来ないからです。(レコードトリガーフローは後述するカスタムボタンと連携することは出来ません)
【1】「レコードを取得」要素の設定
画面フローを選択し最初のプラスボタンをクリックして「レコードを取得」要素を選択してください。各入力内容は下記の通り入力してください。これによりカスタムボタンが押下した時に表示している商談の詳細を取得します。
表示ラベル | リピートする商談の取得 (任意に分かりやすいものでOK) |
API参照名 | getOppo (任意に分かりやすいものでOK) |
オブジェクト | 商談 |
条件の要件 | すべての条件に一致(AND) |
項目 | Id(商談ID) |
演算子 | 次の文字列と一致する |
値 | recordId (この変数の作り方は下記を参照) |
recordIdの作り方
上記の表の最後のの行にある「recordId」はテキスト変数です。下記の手順で作成してください。
- 「値」をクリックして「+新規リソース」を選択
- リソース種別で「変数」を選択
- 下記の図のように記入(API参照名は必ず「recordId」と記入してください。記入ミスがあると正常に動作しません)
- データ型は「テキスト」を選択
⬇️
⬇️
【2】「割り当て」要素の設定
次に取得した商談の各項目の内容を変更します。次の➕ボタンをクリックして「割り当て」を選択してください。ここでは商談名に(コピー)というテキストを末尾に追加することでコピーされた商談であることを分かりやすくします。また、「コピー元商談ID」をあらかじめ作成しておいたカスタム項目に格納します。(この「コピー元商談ID」はこの後使うので必ず設定してください。)
※商談オブジェクトに「コピー元商談ID」を格納するカスタム項目(テキスト)が必要です。もし作っていない場合はここで作成しておいてください。
※「割り当て」とは、変数に対して値を追加したり上書きしたりする要素です。ここでは上記で取得した商談が「getOppo」という変数に格納されているので、その変数に格納された商談データの「商談名」と「コピー元商談ID」の項目を追加・上書きしています。
⬇️
割り当てには下記のように記入してください。
表示ラベル | 取得した商談項目の変更 (任意に分かりやすいものでOK) |
API参照名 | updateOppo (任意に分かりやすいものでOK) |
変数1 | {!getOppoId.Name}(商談名) |
演算子1 | 追加 |
値1 | (コピー) |
変数2 | {!getOppoId.copyOppoId__c}(商談オブジェクトに作成したカスタム項目名) |
演算子2 | 次の文字列と一致する |
値2 | recordId |
【3】新しい商談を作成する
最後に、上記の変数を元に商談を作成します。次の➕ボタンをクリックして「レコードを作成」を選択してください。「レコードを作成」要素には下記のように記入してください。
表示ラベル | コピーした商談の作成 (任意に分かりやすいものでOK) |
API参照名 | createOppo (任意に分かりやすいものでOK) |
作成するレコード数 | 1 |
レコード項目の設定方法 | レコードからのすべての値を使用 |
レコード | {!getOppoId}(リピートする商談IDの取得 商談) ※この時点で「getOppoId」は割り当て要素によって「商談名」と「コピー元の商談ID」項目に変更が加えられています。 |
これで商談をコピーすることが出来ました。
フローの全体像は下記のようになります。
しかし、これだけでは商談の関連リストはコピーできていません。なので、下記で関連リストもコピーする方法を記載します。
【4】商談の関連リストもコピーするフローを作成する
ここからは商談に関連するレコードをコピーする方法を説明していきます。この記事では商談の取引先責任者の役割をコピーする方法を説明します。作成するフローの全体像は下記のようになります。
(1)まず最初に商談が作成されたことをトリガーとするレコードトリガーフローを作成します。あくまで上述したコピー商談を作成した場合のみ起動させたいので、条件に上述した「コピー元の商談ID」のカスタム項目に値が入っている商談のみに絞り込みます。
オブジェクト | 商談 |
トリガーを設定 | レコードが作成された |
条件の要件 | すべての条件に一致(AND) |
項目 | copyOppoId__c |
演算子 | null |
値 | False(コピー元の商談ID項目に値がないことはない=値がない) |
(2)次に取引先責任者の役割のレコードを取得します。
※「取引先責任者の役割」は「商談」と「取引先責任者」の間にある連結オブジェクトです。
ここで取得する取引先責任者の役割はコピー元の商談に紐づいた取引先責任者の役割です。このあと、コピー元の商談に紐づいた取引先責任者の役割を取得して新しい商談IDに上書きします。
コピー元の商談に紐づいた取引先責任者の役割を取得するには、コピーされて新たに作成された商談の「コピー元商談ID」項目のIDを使って検索・取得します。下記のように「(取引先責任者の役割レコードの)商談ID」が「コピー元商談ID」と一致する取引先責任者の役割レコードを取得します。(商談に複数人の取引先責任者の役割が紐づいている可能性があるので「すべてのレコード」にチェックを入れます。)
表示ラベル | 取引先責任者の役割の取得 |
API参照名 | ContactRole |
オブジェクト | 商談 取引先責任者の役割 |
条件の要件 | すべての条件に一致(AND) |
項目 | OpportunityId |
演算子 | 次の文字列と一致する |
値 | {!$Record.copyOppoId__c}(コピー元の商談ID) |
保存するレコード数 | すべてのレコード |
(3)次に、取得したコピー元の商談IDと紐づいた取引先責任者の役割レコードをループで回していきます。ループで回してコピー元の商談IDを新しい商談IDに上書きし、更新用の変数にレコードを格納する処理を実行します。
まずは下記のように取得した取引先責任者の役割レコードをループにセットします。
表示ラベル | 取引先責任者の役割のループ |
API参照名 | LoopContactRole |
コレクション変数 | {!ContactRole} |
(4)次に、取得した取引先責任者の役割レコードの商談IDを一つ一つ新しい商談IDに上書きしていく処理を割り当て要素で実行します。具体的には下記のようにループ変数に格納されている取引先責任者の役割の商談IDを新しい商談IDで上書きしていきます。
表示ラベル | 取引先責任者の役割に新しい商談IDを設定 |
API参照名 | SetNewContactRoleId |
変数 | {!LoopContactRole.OpportunityId} |
演算子 | 次の文字列と一致する |
値 | {!$Record.Id}(コピーされた商談の商談ID) |
(5)次に、上記で上書きしたループ変数を事前に作っておいたレコード変数に追加していく処理を割り当て要素で実行します。(この後にこの変数を使って新規の取引先責任者の役割レコードを作成する必要があるので変数は「レコード変数」にしてください。)
表示ラベル | 商談ID変更済みの取引先責任者の役割レコードを変数へ格納 |
API参照名 | SetContactRoleRecord |
変数 | VarContactRoleRecord(作り方は上述した変数の作り方を参考にしてください) |
演算子 | 追加 |
値 | {!LoopContactRole}(上記で商談IDが上書きされたループ変数) |
(6)次に、このレコード変数(新しい商談IDに変更された取引先責任者の役割レコード)を新規レコードとして作成します。
表示ラベル | 新しい商談と紐づいた取引先責任者の役割レコードを作成 |
API参照名 | CreateContactRoleRecord |
作成するレコード | 複数 |
レコードコレクション | {!VarContactRoleRecord} |
これで完了です。
カスタムボタンの作成
最後にフローを起動するカスタムボタンを作成します。商談タブをクリックして画面右上の「ギアマーク」→「設定」→「オブジェクトを編集」をクリックしてください。左側のメニューから「ボタン、リンク、およびアクション」をクリックしてください。
次に画面右上の「新規アクション」ボタンをクリックして、下記のように設定してください。
アクション種別 | フロー |
フロー | リピート商談フロー(一番最初に作成したフロー) |
標準の表示ラベル種別 | –なし– |
表示ラベル | コピー商談(画面に表示されるボタン名です。任意の名前にしてください) |
名前 | copyOpportunity(API参照名にあたるものです) |
このボタンはページレイアウトでボタンを追加設定しないと表示されません。設定→オブジェクトの編集→画面右側のメニューからページレイアウトをクリックしてください。
「モバイルおよびLightningのアクション」を選択して上記で作成したボタンをドラッグ&ドロップして追加してください。
処理の振り返り
カスタムボタンをクリックすると起動するのは、商談のコピーの処理です。これにより元商談の情報がコピーされた新しい商談が新規作成されます。そして、その際にはコピー元の商談IDがカスタム項目に格納される処理を実施しています。
次に、新しい商談が作成された際にコピー元商談IDの値がある商談があれば起動するフローを作成しました。このフローでの処理は、コピー元商談IDをもとに取引先責任者の役割レコードを取得し、そのレコードをループで回すことで商談IDをコピー元の商談IDから新しい商談IDに書き換える処理を実施しています。そして、商談IDが上書きされた変数を新しい変数に格納し、新しい商談に紐づく取引先責任者の役割レコードを作成するというものでした。
いかがでしたでしょうか?少し複雑に感じたかもしれません。それもそのはず、変数の使い方や商談と取引先責任者の役割という連結オブジェクトの役割や詳細を理解しておく必要があるので、これら前提知識がないと今回のフローを作成することはできません。ぜひ、他の記事も読んで学習を進めていただければ幸いです。