salesforce：複数の取引先責任者が紐づく単一の活動（Todoや行動）を画面フローで作成する

salesforceには一つの活動に対して複数の取引先責任者を紐づける機能が備わっています。
普通に標準機能で活動を記録する場合は特に難しい事はありません。

しかし、活動の記録を色々カスタマイズするために画面フローで行おうとしたときに、
ちょっと詰まってしまいました。

と言う事でこれをどう解決したかを記録しておきます。

# 先にやっておく事
## shared activate機能の有効化
一つの活動に複数の取引先責任者を紐づけるには、機能の有効化が必要です。
設定画面から「活動設定」を選んで以下の部分にチェックを入れます。
![スクリーンショット 2022-12-16 145211.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629350/b27a85c0-8e76-f4fd-5a8b-ace38f3c0ff5.png)
ここにある通り無効化は自力で出来ないので、有効化する前にちゃんと考えてやってみてください。
## ダミーで適当なオブジェクトに取引先責任者への参照関係を作っておく
フローの中ではTodoオブジェクトの取引先責任者項目（名前項目(WhoId))は使えません。
しかし、レコードをルックアップする画面コンポーネントをフロー内に作るには、
どこかのオブジェクトにそのレコードへの参照関係がないといけません。（これ、めんどいなーと思うんですが）
なので、とりあえず的にどこかに作ります。（あるなら既存の参照関係を使っても問題ないと思います。）
![スクリーンショット 2022-12-16 145815.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629350/f056f727-c071-4eec-f998-84c032656efd.png)
とりあえず、今回はこんな感じに作りました。

# TodoとTodoリレーションと取引先責任者
Todoに取引先責任者を複数紐づけるという事は多対多リレーションなので、
連結オブジェクトが存在します。
その連結オブジェクトがTodoリレーションです。（行動の場合は行動リレーション）
![プレゼンテーション1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629350/862e88ed-0872-2296-fe0e-03aef09978ed.jpeg)
と言う事なので、このTodoリレーションを作っていくのが今回のミッションです。

分かる人はここまで読めば十分だと思います。

後はタラタラと画面フローを作成していく説明です。

# 画面フローの全体像
![スクリーンショット 2022-12-16 153920.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629350/73fea4a7-bf73-ccdb-bc47-24faa0e01baf.png)

こんな感じで作っていきます。

# レコード変数を作っておく
以下のように、Todoリレーションの単一レコード変数とレコードコレクション変数を作っておきます。
![スクリーンショット 2022-12-16 154257.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629350/074bb67b-0452-b3fc-4ee3-4ab542b9476e.png)
![スクリーンショット 2022-12-16 154340.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629350/9ad3bf47-3417-da22-dd31-2b1bb49268da.png)




# 入力画面
![スクリーンショット 2022-12-16 153033.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629350/290ddd30-b1bd-d582-465a-a745c152080f.png)
項目は適宜必要に応じて作るとして、今回重要なのはこの取引先責任者のコンポーネント。
![スクリーンショット 2022-12-16 153228.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629350/a4e1ebff-1fe7-bcca-987c-ff290b055503.png)
画像の通り、最初に作ったダミーの参照関係のオブジェクトAPI名と項目API名を指定します。
で、最大選択数を記入。ここにいれた数字分だけ取引先責任者を紐づけられます。今回はとりあえず10人までとしました。

# Todoを作成
画面で入力した項目を適当に入れていけばいいんですが、
ここでは一旦取引先責任者項目は触りません。
![スクリーンショット 2022-12-16 153832.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629350/3de68ab6-47c8-af6f-81e3-3d6cfd313069.png)

# ルックアップで選択した取引先責任者IDでループ
![スクリーンショット 2022-12-16 154105.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629350/05350f41-3430-d638-97a5-25dff1137b63.png)
先ほど画面のルックアップで選択した取引先責任者のIDはコレクション変数に格納されるので、
これでループします。

# 変数に参照先のIDを割り当てる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629350/7918b097-5f56-b2ca-7210-cc2355f5936b.png)
Todoリレーションの単一レコード変数で、TodoIDに先ほど作ったTodoレコードのID、リレーションIDに今ループしている取引先責任者IDを代入します。

# コレクション変数に追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629350/48ad2f05-2c1b-8db8-57c2-128aa087f7e8.png)
代入された単一レコード変数をコレクション変数に追加。
このループを回して、Todoリレーションのコレクションを完成させます。

# Todoリレーションレコードを作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629350/a6fc369d-d490-6013-b617-a75e8caf155c.png)
出来上がったコレクション変数でレコード作成してOK。

# 動かしてみる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629350/189ea6b1-11f5-1e93-eec1-0b331975c9a4.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629350/16aeea96-fc73-bcdd-8a41-f2a271d0f2e1.png)
こんな感じで複数の取引先責任者を選べます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629350/61953c52-dc94-24eb-98cc-a42376b61015.png)
実行してTodoを作成すると、このように複数の取引先責任者が登録されています。


連結オブジェクトの存在が分かったらまあ大した話でもなかったのですが、
最初結構「あれ？」ってなったので投稿させてもらいました。

※親分、代官、和尚、ご出演ありがとうございました。