Salesforceの行動レコードでは[Shared Activities]機能を使って、複数取引先責任者を登録できることは有名です。
ではそれらの取引先責任者はどこへ保存され、行動上で一覧化するにはどうしたらいいのでしょうか。
Event RelationオブジェクトとEvent Who Relationオブジェクトを使いこなせば行動の上級者活用が可能になります。
前提
今回検証するのはSalesforceの行動レコードの名前項目です。
●[名前]項目
・行動オブジェクトの標準項目であり、リードか取引先責任者を紐づけ可能です。
下記例では取引先責任者を1レコード紐づけています。
・1行動レコードへ複数名のリードや取引場合任者を紐づけたい場合
上記キャプチャ例では「取引先責任者1」という1名を紐づけると、他の取引先責任者を紐づけることは出来なくなっています。
そこで[ユーザーが複数取引先責任者をToDoと行動に関連付けられるようにする]機能を有効化しておきます。
いわゆる[Shared Activities]という機能で、1行動へ最大50名の取引先責任者 (リードは1件のみ) を紐づけられるようになります。
一度有効化後に無効化したい場合はSalesforceカスタマーサポートへ申請することで可能ですが、1行動へ複数取引先責任者などがすでに紐づけられている場合はそれらの紐づきがすべて削除されます。
実質的には有効化後の無効化は出来なくなるため注意が必要です。
機能有効化後には下記のように複数の取引先責任者を紐づけ可能となりました。
被招集者の行動上で複数の取引先責任者を一覧化したい
1行動へ取引先責任者を2名以上登録した場合、下記のように [+1] のような表示になり可視性が低いです。
せっかく複数名登録したんだからぱっと見で全員が表示されるようにしてよという要望は少なくありません。
対応策①:関連リストで表示する
行動レコードの関連リストへ[名前]というリストを表示します。デフォルトでは表示されてないためオブジェクトマネージャーから下記のように表示させます。
すると、下記のように2名であっても一覧表示することができました。
ただし被招集者側の行動レコードではこの[名前]関連リストに取引先責任者が表示されません。
被招集者項目を使用する場合はこの方法では要望を満たすことは出来ません。
対応策②:子レコードから情報を取得してテキスト化する
被招集者側の行動レコードで表示するには、次に紹介する[Event Relation]オブジェクト、または[Event Who Relation]オブジェクトで取引先責任者を取得し、
行動上にカスタムテキスト項目で取引先責任者をカンマ区切りなどで保存することで実現できそうです。
下記で検証してみましょう。
Event Relationオブジェクトを活用する
先ほど確認した通り、Salesforceの行動レコードの子レコードとして複数の取引先責任者が保存されている[名前]関連リストの存在を確認できました。
この子レコードは正式には[Event Relation]オブジェクトという標準オブジェクトになります。
このオブジェクトの仕組みを確認してみます。ますは開発者コンソールのQueryEditorで下記のSOQLを実行してみます。
SELECT Id,Event.Subject,Status,Relation.Name,Account.Name,IsParent,IsWhat
FROM EventRelation WHERE EventId =’00UJ200000GLJvIMAX’
EventId =’00UJ200000GLJvIMAX’という1行動データは下記の状態です。
・関連先:取引先を登録
・名前:取引先責任者を2名登録
・被招集者:主催者含めて2ユーザ登録
SOQLの結果は下記のとおりです。1行動に対してEvent Relationレコードが4つ存在します。
・1行目:関連先に登録した取引先、[IsWhat]がTrueにて絞り込み可能
・2行目:名前に登録した取引先責任者の1名、[isParent]がTrueかつ[isWhat]がFalseにて絞込み可能
・3行目:2行目と同じ
・4行目:被招集者で登録した主催者以外のユーザ:[isParent]がFalseにて絞込み可能
つまり、行動レコードの[関連先][名前][被招集者]に登録されたレコードの数だけ、Event Relationレコードが存在するということになります。
Event Who Relationオブジェクトを活用する
ここまでの検証でSalesforceの[Event Relation]オブジェクトで行動の名前に登録した取引先責任者を複数名取得できることが確認できました。
ただし取引先や被招集者も含まれるため、フィルターを誤ると取引先責任者以外も取得してしまいそうです。名前に登録した取引先責任者だけを簡単に取得は出来ないでしょうか。
その際に使用するのが[Event Who Relation]オブジェクトです。
簡単に言うと[Event Relation]オブジェクトに登録されたレコードのうち、人情報(リードと取引先責任者)だけが格納されています。
先ほどの行動でSOQLを再度実行してみます。今度は[Event Who Relation]オブジェクトが対象です。
SELECT Id, Event.Subject, Relation.Name, Account.Name FROM EventWhoRelation WHERE EventId =’00UJ200000GLJvIMAX’
SOQLの結果は下記のとおりです。1行動に対して取引先責任者の2レコードだけ存在しています。
・1行目:名前に登録した取引先責任者の1名
・2行目:1行目と同じ
取引先責任者に限って言うと[Event Relation]オブジェクトも[Event Who Relation]オブジェクトも同じ2レコードが取得できました。
まとめると、下記の違いがあるようでした。
・[Event Relation]オブジェクト:行動に関連する[関連先][名前][被招集者]が格納されている
・[Event Who Relation]オブジェクト:行動に関連する[名前]のみ格納されている
結論
本記事の最初に検討をしていた「Salesforceの行動レコードで複数の取引先責任者を一覧化する」という課題に対する結論としては下記2通りの方法があることになりました。
①被招集者を使用しない行動であれば、行動レコードの関連リストに[名前]を表示することで可能
②被招集者を使用する行動であれば、[Event Relation]オブジェクト、または[Event Who Relation]オブジェクトを使ってフロー内で各取引先責任者を取得し、ループで下記「担当者(フローでテキスト化)」のようなカスタム項目へ保存することで可能
※行動レコード上の[名前]項目を対象に、フロー内で取引先責任者を取得しても主取引先責任者(名前へ最初に登録した1取引先責任者のみ)しか取得できないため注意