標準のパートナー関連リストではそれぞれの取引先にお互いの役割を定義するだけでカスタム項目を作成するなどのカスタマイズができません。また、パートナー関連リストは取引先と商談の詳細ページにしかありません。
今回は、こちらの機能に「項目を追加したい、取引先責任者でも同様に関係性を記録したい」とのご相談を受けましたので、カスタムオブジェクトで作成する方法を検証してみました。
標準の[パートナー]関連リストとは
使いどころが少ないため、標準のパートナー関連リストを知らない方も多いと思いますので、簡単にご紹介します。
取引先の[パートナー]関連リストから、取引先と役割を登録します。

登録すると、もう一方の取引先も対になっている役割で自動的にレコードが作成されます。そして、こちらは登録すると編集はできず、削除しかできません。

商談からも登録ができます。

商談で登録すると、それぞれの取引先にも反映されます。

パートナーの役割はカスタマイズが可能ですが、Classicに切り替えないと設定画面にいけません。(たぶん…)

以上です。役割を登録するのみの機能です。公式のヘルプは
こちらです。
<今回作成する要件>
・取引先責任者同士の関係性を登録できるようにする
・片方を登録したら、対のレコードを自動作成(標準のパートナーと同じ)
・片方の役割を変更したら、対のレコードの役割を自動更新
・特定の項目を更新したら、対のレコードの同じ項目も同じ値に自動更新
・片方のレコードを削除したら、対のレコードを自動削除(標準のパートナーと同じ)
1.カスタムオブジェクトの作成
関係性を登録する
①「関係」オブジェクトと、パートナー関係を登録する
②「カスタムパートナー」オブジェクトを作成します。
①「関係」オブジェクト
1.[設定] → [作成▼] → 「カスタムオブジェクト」をクリックします。

2.必須項目等を以下のように入力[保存]をクリックします。
・
表示ラベル:関係 (命名は自由)
・
オブジェクト名:Relationship (命名は自由)
・
レコード名:関係 (命名は自由)
・
データ型:テキスト
以降は必要に応じてチェックを入れてください。サンプルではこちらにチェックを入れています。
・レポートを許可
・項目履歴管理
・検索を許可
・カスタムオブジェクトの保存後、新規カスタムタブウィザードを起動する

3.任意のタブスタイルを選択して、タブを設定します。
(上記2.の「カスタムオブジェクトの保存後、新規カスタムタブウィザードを起動する」にチェックを入れなかった場合はスキップしてください)

4.[項目とリレーション] → [新規]をクリックして、データ型で「選択リスト」を選択し、以下のように作成します。
・
項目の表示ラベル:先方から見た関係 (命名は自由)
・
値:「各値を改行で区切って入力します。」を選択し、登録する関係を入力します。
・
項目名:Reverse_Relationship (命名は自由)

②「カスタムパートナー」オブジェクト
5. [オブジェクトマネージャ]タブ → [作成▼] → 「カスタムオブジェクト」をクリックします。
6.必須項目等を以下のように入力[保存]をクリックします。
・
表示ラベル:カスタムパートナー (命名は自由)
・
オブジェクト名:CustomPartner (命名は自由)
・
レコード名:カスタムパートナー名(命名は自由)
・
データ型:自動採番(テキストでも可)
・
表示形式:P-{000000}(形式は自由)
・
開始番号:1(自動採番の場合、任意の数字)
以降は必要に応じてチェックを入れてください。サンプルではこちらにチェックを入れています。
・レポートを許可
・項目履歴管理
・検索を許可
・カスタムオブジェクトの保存後、新規カスタムタブウィザードを起動する

7. 任意のタブスタイルを選択して、タブを設定します。
(上記6.の「カスタムオブジェクトの保存後、新規カスタムタブウィザードを起動する」にチェックを入れなかった場合はスキップしてください)
8.[項目とリレーション] → [新規]をクリックして、以下の項目を作成します。
<取引先責任者>
・
データ型:主従関係(取引先責任者) ※関係を登録したいオブジェクト
<パートナー>
・
データ型:参照関係(取引先責任者) ※関係を登録したいオブジェクト(主従関係と同じ)
・
ルックアップ検索条件:検索条件
項目 | 演算子 | 値/項目 | 値 |
現在のレコード カスタムパートナー: 取引先責任者 | 次の文字列と一致しない | 項目 | 現在のルックアップ 取引先責任者: 取引先責任者 ID |
・
条件種別:必須
<関係>
・
データ型:参照関係(関係) ※最初に作成した関係性を登録するオブジェクト
<メモ(共通)>
・
データ型:ロングテキストエリア

以下の項目はフローで使用する項目のため、レイアウトへの配置は不要です。
<対のレコード>
・
データ型:参照関係(カスタムパートナー) ※このオブジェクト
<自動作成フラグ>
・
データ型:チェックボックス
<削除前フラグ>
・
データ型:チェックボックス
<自動更新カウント>
・
データ型:数値
・
小数点の位置:0
・
デフォルト値:0

2.「関係」レコード登録
1. カスタムオブジェクトの作成で作成した「関係」オブジェクトにレコードを登録します。
レコード名は1.4.で作成した選択リスト項目「先方から見た関係」と同じ値で登録します。

※関係を変更できる仕様のため、このような標準のパートナーの役割のような重複した値は登録しないでください。Name項目が重複すると正しく動作しません。

3.作成時、更新時のフローの設定
1.[設定] から、[クイック検索] で「フロー」を検索し、[フロー]をクリックし[新規フロー]ボタンをクリックします。
2.「レコードトリガフロー」を選択し、以下のように開始を設定します。
・
オブジェクト:カスタムパートナー
・
フローをトリガする条件:レコードが作成または更新された
・
エントリ条件を設定:
[条件の要件] カスタム条件ロジックに一致
[条件ロジック](1 AND 2) OR ( (3 OR 4) AND 5)
| 項目 | 演算子 | 値 |
1 | CreatedDate(作成日) | 変更済み | True |
2 | AutoCreateFlag__c(自動作成フラグ) | 次の文字列と一致する | False |
3 | Relationship__c(関係) | 変更済み | True |
4 | Memo__c(メモ/共通項目) | 変更済み | True |
5 | AutoUpdate_Count__c(自動更新カウント) | 変更済み | False |
※1と2が新規作成時の条件で、3~5が対のレコードを更新する条件です。
共通項目としてロングテキストエリアを使用しているので、数式を使用していません。
ロングテキストエリア項目を変更済み条件に含めない場合は数式で作成しても構いません。
・
更新されたレコードでフローを実行するタイミング:レコードを更新し、条件の要件に一致するたび
・
フローを最適化:アクションと関連レコード

3.[開始]の下の⊕から[レコードを取得]を追加し、以下のように設定します。・
オブジェクト:関係
・
レコードを絞り込み:[条件の要件] すべての条件に一致(AND)
項目 | 演算子 | 値 |
Name(関係) | 次の文字列と一致する | $Record > 関係 > 先方から見た関係 (1.4.で作成した項目) |
・
レコードを並び替え:[並び替え順] 並び替えなし(Name項目をユニークにすること前提としてます)
・
保存するレコード数:最初のレコードのみ
・
レコードデータの保存方法:すべてのデータを自動的に保存

4.左側のマネージャの[新規リソース]をクリックし、以下のように設定します。
・リソース種別:数式
・データ型:Boolean
・数式:ISNEW()

5.[レコードを取得]の下の⊕から[決定]要素を追加し、以下のように設定します。
・表示ラベル:新規作成
・結果を実行する条件の要件:すべての条件に一致(AND)
リソース | 演算子 | 値 |
formula_ISNEW(4.で作成した数式を選択) | 次の文字列と一致する | True |
・結果を実行するタイミング:条件の要件を満たす場合

6.「新規作成」(5.で入力した表示ラベル)の下の⊕から[レコードを作成]を追加し、以下のように設定します。
・作成するレコード数:1
・レコード項目の設定方法:個別のリソースおよびリテラル値を使用
・オブジェクト:カスタムパートナー
・項目:
項目 | 値 |
Contact__c(取引先責任者) | $Record > パートナー > 取引先責任者 ID |
Partner__c(パートナー) | $Record > 取引先責任者 |
Relationship__c(関係) | get_Relationship 関係 > カスタムオブジェクト ID(3.で取得したレコードID) |
memo(メモ/共通項目) | $Record > メモ(共通) |
Pair_Record__c(対のレコード) | $Record > カスタムオブジェクト ID |
AutoCreateFlag__c(自動作成フラグ) | True |

7.[レコードを作成]の下の⊕から[レコードを更新]を追加し、以下のように設定します。
・更新するレコードを検索してその値を設定する方法:フローをトリガした
カスタムパートナー レコードを使用
・レコード を更新する条件の要件:なし — 常にレコードを更新
・項目:
項目 | 値 |
Pair_Record__c(対のレコード) | create_PairRecord の カスタムパートナーId |

ここまでがカスタムパートナーを新規登録した場合の設定です。

ここからは、関係や共通項目を更新した際に対のレコードにも反映される設定です。
8.左側のマネージャの[新規リソース]をクリックし、以下のように設定します。
・リソース種別:数式
・データ型:数値
・小数点の位置:0
・数式:{!$Record.Pair_Record__r.AutoUpdate_Count__c}+1
(「トリガレコード → 対のレコード → 自動更新カウント」 +1)

9.[決定]要素の「デフォルトの結果」の下の⊕から[レコードを更新]を追加し、以下のように設定します。
・
更新するレコードを検索してその値を設定する方法:レコードを識別する条件を指定し、項目を個別に設定
・オブジェクト:カスタムパートナー
・レコードを絞り込み:すべての条件に一致 (AND)
[レコード を更新する条件の要件] すべての条件に一致 (AND)
項目 | 演算子 | 値 |
Id(カスタムオブジェクトId) | 次の文字列と一致する | $Record > 対のレコード |
・
項目値を レコード に設定項目 | 値 |
Relationship__c(関係) | get_Relationship 関係 > カスタムオブジェクト ID |
Memo__c(メモ/共通項目) | $Record > メモ(共通) |
AutoUpdate_Count__c(自動更新カウント) | formula_COUNT(8.で作成した数式を選択) |

10.最後にフローを[保存]しデバッグで確認後、 [有効化]にします。

4.削除時のフローの設定
カスタムパートナーレコードを削除した場合には、対のレコードも自動削除されるようにするフローの設定です
1.[設定] から、[クイック検索] で「フロー」を検索し、[フロー]をクリックし[新規フロー]ボタンをクリックします。
2.「レコードトリガフロー」を選択し、以下のように開始を設定します。
・
オブジェクト:カスタムパートナー
・
フローをトリガする条件:レコードが削除された
・
エントリ条件を設定:
[条件の要件] すべての条件に一致 (AND)
項目 | 演算子 | 値 |
BeforeDelete_Flag__c(削除前フラグ) | 次の文字列と一致する | False |

3.[開始]の下の⊕から[レコードを更新]を追加し、以下のように設定します。
・更新するレコードを検索してその値を設定する方法:レコードを識別する条件を指定し、項目を個別に設定
・オブジェクト:カスタムパートナー
・レコード を更新する条件の要件:すべての条件に一致 (AND)
項目 | 演算子 | 値 |
Id(カスタムオブジェクトID) | 次の文字列と一致する | $Record > 対のレコード |
・項目値を レコード に設定:
項目 | 値 |
BeforeDelete_Flag__c(削除前フラグ) | True |

4.[レコードを更新]の下の⊕から[レコードの削除]を追加し、以下のように設定します。
・削除するレコードを検索する方法:条件を指定
・オブジェクト:カスタムパートナー
・削除するレコードの条件の要件:すべての条件に一致 (AND)
項目 | 演算子 | 値 |
Id(カスタムオブジェクトID) | 次の文字列と一致する | $Record > 対のレコード |
5.最後にフローを[保存]し、 [有効化]にします。

【結果確認】
サンプルとして、このような相関図で関係を登録してみます。

「鈴木 太郎」の子として「鈴木 一朗」を登録します。

「鈴木 一朗」には親として「鈴木 太郎」が登録されました。共通項目のメモの内容もコピーされています。

サンプルの相関図を全部登録した状態がこちらです。

「佐藤 友美」から「高橋 遊冶郎」の関係を「友人」に変更します。

「高橋 遊冶郎」側のカスタムパートナーでも関係が「友人」に変更されたのが確認できます。
ちなみに「自動作成フラグ」や「自動更新カウント」をフローのアクション内で更新することで、フローのトリガの条件から除外されるようにしています。

次は、「鈴木 二葉」から「高橋 遊冶郎」のカスタムパートナーレコードのメモを更新してみます。

「高橋 遊冶郎」からも「鈴木 二葉」のカスタムパートナーレコードのメモに同じ内容が挿入されましたのが確認できます。

「鈴木 二葉」から「高橋 遊冶郎」のカスタムパートナーレコードを削除してみます。

「高橋 遊冶郎」からも「鈴木 二葉」のカスタムパートナーレコードが削除されたことが確認できます。

ごみ箱には2つのレコードが入っています。

おわり