Salesforce関連の記事を書いています。

  1. Salesforce

商談を関連リストも含めてコピーする方法

例えば、すでに成約に至った商談があるとします。その後、同じような商談が同じクライアントからくることはよくあることだと思います。そのような場合は、商談のデフォルト機能である「コピー」ボタンを利用しても良いのですが、商談に紐づいている関連レコードまではコピーしてくれません。そこで今回は、商談の詳細をコピーするだけでなく商談に紐づく関連レコードも一緒にコピーするボタンの作成方法についてご説明いたします。

まずは、この機能が実行される順序について説明します。その後、各要素について説明します。

  1. 商談をコピーするフローを起動するカスタムボタンを押下(カスタムボタン)
  2. 商談をコピーするフローが起動して商談がコピーされる(フロー1)
  3. コピーされた新しい商談に、コピー元の商談の関連リストを追加する(フロー2)

概要としては、上記の3ステップを踏んで商談をコピー(関連リストもコピー)されます。

まずは既存の商談をコピーするフローを作成します。画面フローを選択してください。なぜなら画面フローでないとカスタムボタンで起動することが出来ないからです。(レコードトリガーフローは後述するカスタムボタンと連携することは出来ません)

画面フローを選択し最初のプラスボタンをクリックして「レコードを取得」要素を選択してください。各入力内容は下記の通り入力してください。これによりカスタムボタンが押下した時に表示している商談の詳細を取得します。

表示ラベルリピートする商談の取得 (任意に分かりやすいものでOK)
API参照名getOppo (任意に分かりやすいものでOK)
オブジェクト商談
条件の要件すべての条件に一致(AND)
項目Id(商談ID)
演算子次の文字列と一致する
recordId (この変数の作り方は下記を参照)

上記の表の最後のの行にある「recordId」はテキスト変数です。下記の手順で作成してください。

  1. 「値」をクリックして「+新規リソース」を選択
  2. リソース種別で「変数」を選択
  3. 下記の図のように記入(API参照名は必ず「recordId」と記入してください。記入ミスがあると正常に動作しません)
  4. データ型は「テキスト」を選択

⬇️

⬇️

次に取得した商談の各項目の内容を変更します。次の➕ボタンをクリックして「割り当て」を選択してください。ここでは商談名に(コピー)というテキストを末尾に追加することでコピーされた商談であることを分かりやすくします。また、「コピー元商談ID」をあらかじめ作成しておいたカスタム項目に格納します。(この「コピー元商談ID」はこの後使うので必ず設定してください。)

※商談オブジェクトに「コピー元商談ID」を格納するカスタム項目(テキスト)が必要です。もし作っていない場合はここで作成しておいてください。

※「割り当て」とは、変数に対して値を追加したり上書きしたりする要素です。ここでは上記で取得した商談が「getOppo」という変数に格納されているので、その変数に格納された商談データの「商談名」と「コピー元商談ID」の項目を追加・上書きしています。

⬇️

割り当てには下記のように記入してください。

表示ラベル取得した商談項目の変更 (任意に分かりやすいものでOK)
API参照名updateOppo (任意に分かりやすいものでOK)
変数1{!getOppoId.Name}(商談名)
演算子1追加
値1(コピー)
変数2{!getOppoId.copyOppoId__c}(商談オブジェクトに作成したカスタム項目名)
演算子2次の文字列と一致する
値2recordId

最後に、上記の変数を元に商談を作成します。次の➕ボタンをクリックして「レコードを作成」を選択してください。「レコードを作成」要素には下記のように記入してください。

表示ラベルコピーした商談の作成 (任意に分かりやすいものでOK)
API参照名createOppo (任意に分かりやすいものでOK)
作成するレコード数1
レコード項目の設定方法レコードからのすべての値を使用
レコード{!getOppoId}(リピートする商談IDの取得 商談)
※この時点で「getOppoId」は割り当て要素によって「商談名」と「コピー元の商談ID」項目に変更が加えられています。

これで商談をコピーすることが出来ました。

フローの全体像は下記のようになります。

しかし、これだけでは商談の関連リストはコピーできていません。なので、下記で関連リストもコピーする方法を記載します。

ここからは商談に関連するレコードをコピーする方法を説明していきます。この記事では商談の取引先責任者の役割をコピーする方法を説明します。作成するフローの全体像は下記のようになります。

(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が上書きされた変数を新しい変数に格納し、新しい商談に紐づく取引先責任者の役割レコードを作成するというものでした。

いかがでしたでしょうか?少し複雑に感じたかもしれません。それもそのはず、変数の使い方や商談と取引先責任者の役割という連結オブジェクトの役割や詳細を理解しておく必要があるので、これら前提知識がないと今回のフローを作成することはできません。ぜひ、他の記事も読んで学習を進めていただければ幸いです。

Salesforceの最近記事

  1. 【Salesforce初心者向け】レポートを勝手にカスタマイズされないための権限設定ガイド…

  2. Salesforceフローでの日付・時間の扱いとUTC/JSTの違いによる影響

  3. Salesforceで「半角カタカナ禁止」+「特定記号のみ許可」の入力規則

  4. 【Salesforce】変更セットで項目を高速検索する裏技!1万件表示でCtrl+F活用術…

  5. Salesforceで関連リストのテキストを取得して項目に格納する方法

関連記事

プロフィール
●氏名:ARAKAN
●年齢:32歳
●居住地:九州
●勤務先:情報システム部
●一言:とある企業でSalesforce管理者として勤務しているARAKANです。業務の中での気づきやTipsを投稿しています。
<保有資格>
・Salesforce認定 アドミニストレーター
・Salesforce認定 上級アドミニストレーター
・Salesforce認定 Sales Cloudコンサルタント
・Salesforce認定 Service Cloudコンサルタント
・Salesforce認定Marketing Cloud Account Engagement コンサルタント
・Salesforce認定Marketing Cloud Account Engagement スペシャリスト
カレンダー
2025年10月
 12345
6789101112
13141516171819
20212223242526
2728293031 
言語切り替え
PAGE TOP