【Salesforce】リストビューを活用し、一括コピーができるフローの作成方法

※もし間違いがあれば、お手数おかけしますがご指摘いただけましたら幸いです。すぐ修正致します。

# idsとループ処理の掛け合わせ

主な処理の流れは下記になります

**①リストビューで選択されたレコードを、idsでフローに呼び起こす**
**②ループ処理で、idsにあるidを呼び起こし、コピーしていく**


# 作り方

作り方の主な流れです
**①フローを作成する**（ウェイト重め）
**②オブジェクトにカスタムボタンを作成し、フローを割り当てる**（ウェイト軽め）


# ①フローを作成する

フローを作成していきます。こちらの画面キャプチャが概要になります。

![コメント 2023-07-27 161108.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3489181/08287c34-033f-8544-4161-13c97a37b014.png)

フロー作成の流れとして、
**①idsでリストビューにてチェックされたレコードを呼び起こす**
**②決定木で、0件、101件以上、1~100件に振り分ける**
**③ループ処理で、idsに格納されたレコードを一件ずつ呼び起こす**
**④一件ずつ、レコードをコピーしていく**
になります。

## idsでリストビューにてチェックされたレコードを呼び起こす

画面フローで作成を行っていきます。

API参照名「ids」となっているリソースを作成します。
※idsには、ID情報のみ格納されています。
![コメント 2023-07-27 162037.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3489181/5d224d14-4885-ca1c-cc60-83ee758c7bf0.png)
API参照名を「ids」とすることで、リストビューにてチェックされたレコードを呼び起こすことができます。

続いて、idsで受け取ったレコードの数をカウントし、格納する要素を作成します。
![コメント 2023-07-27 162201.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3489181/fd03de4f-d14b-334a-ab2c-5682841a81d6.png)
ここで新規に「Count」リソースを作成してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3489181/6a7af464-52b6-1d5d-47b9-e379a224ad33.png)
API参照名を「Count」とすることで、レコード件数をカウントすることができます。

## 決定木で、0件、101件以上、1~100件に振り分ける
決定木を作成します。各決定分岐を、下記画面キャプチャ通り作成してください。
![コメント 2023-07-27 162418.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3489181/f0b8d904-6477-f612-b2a7-787c2b1858f3.png)
![コメント 2023-07-27 162527.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3489181/8dec8c17-f7ba-12cb-7908-a4ebdb0168d5.png)
![コメント 2023-07-27 162547.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3489181/e7ad278b-6348-269f-d771-b26a1792cd90.png)

次に、0件、101件以上、1~100件だった場合の画面を作成します。
0件だった場合↓
![コメント 2023-07-27 162708.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3489181/049a8128-407b-ea54-0e77-f6db1bfb0f21.png)

101件以上だった場合↓
![コメント 2023-07-27 162800.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3489181/f692b113-7b8f-1178-ced0-3c1cf8b3ca44.png)

1~100件だった場合↓
![コメント 2023-07-27 163007.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3489181/e1b16bfe-7c96-4229-e33c-9f8255bb5399.png)
コンポーネントより、「テキスト」を画面に挿入し、商談名を一律にできるようにします。
例：2023年3Q価格改定商談　など
![コメント 2023-07-27 163025.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3489181/80f364f1-3b39-0aef-d60c-a275dc2a9bec.png)

## ループ処理で、idsに格納されたレコードを一件ずつ呼び起こす
ループ処理で、idsを呼び起こします。
![コメント 2023-07-27 163223.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3489181/bff8a500-abc3-6e8b-74b5-42715b508543.png)

続いて、要素「レコードの取得」にて、idsに格納されている個別のID情報を、商談オブジェクトにて検索をかけ、レコード情報をすべて取得します。
![コメント 2023-07-27 163337.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3489181/a6be7ff7-8800-fee7-5ff1-b1d46832bf52.png)

次に、「レコードの取得」にて得たレコード情報をもとに、レコードを作成していきます。
要素「レコードの作成」を用意し、下記画面キャプチャ通りに設定していきます。

ここで商談名に、先ほどの画面キャプチャにて入力された商談名を割り当てていきます。
項目値の設定も設定していけるので、任意で自由に設定してください。
![コメント 2023-07-27 163653.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3489181/18a21474-5271-62c8-efa2-be652b459d68.png)

コピー完了の通知をする画面を作成します。
![コメント 2023-07-27 165719.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3489181/738e2276-c08d-8b34-d0a1-663a60ed8f5a.png)

最後に、フローを保存し、有効化します。
![コメント 2023-07-27 165831.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3489181/4817d54c-865f-af98-5572-221c60254051.png)


# ②オブジェクトにカスタムボタンを作成し、フローを割り当てる
商談オブジェクトの設定画面に遷移し、「ボタン、リンク、およびアクション」から「新規ボタンまたはリンク」を作成します。
![コメント 2023-07-27 170123.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3489181/f46bb8ab-14e7-4997-c43e-22416bbc2ec6.png)

カスタムボタンは下記画面キャプチャの通り設定していきます。
画面フローの呼び起こしは、
**/flow/(フローのAPI参照名)**
と入力します。作成できたら保存します。
![コメント 2023-07-27 170448.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3489181/cf3edb5f-116f-f7a5-2cbd-40ad17fa889b.png)

続いて、リストビュー上にカスタムボタンとして表示させます。
商談オブジェクトの設定画面から、「リストビューボタンレイアウト」を開き、使用しているリストビューの編集画面に遷移します。
![コメント 2023-07-27 170606.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3489181/29a8566b-a6f4-54cc-ec06-e6655a7b3cef.png)
ここに、先ほど作成したカスタムボタン「一括コピー」を追加してください。最後に保存します。
![コメント 2023-07-27 170721.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3489181/100564b7-def4-d25c-d06d-6dfae2410b70.png)


#　挙動の確認
商談オブジェクトにて、実際にコピーしてみます。
![コメント 2023-07-27 170956.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3489181/86a54c81-694d-e14f-8ee6-c262f27d52bc.png)

まずは適当に何件か選択します。
※ここでリストビューにてレコードタイプを一つに絞らないと、コピーができないので、一つに絞る必要があります。
![コメント 2023-07-27 171054.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3489181/737e2f0b-c9e0-3795-58af-69c9ef142e53.png)

次に、「一括コピー」をクリックします。商談名も適当に入力します。
![コメント 2023-07-27 171159.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3489181/e7363dad-ad09-bf0d-7d9c-e731dea3fdd2.png)

コピーできました。
![コメント 2023-07-27 171723.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3489181/b8268b31-b3c5-ecc9-979c-ae4b3c9ed42d.png)



# まとめ＆参考したサイト
一括コピーに関してはまだまだ改善点あると思います。
・誤って複数レコードタイプを選択してしまったりしたときのパス
・コピー完了したレコードを一括コピーの画面フローの最後に表示させる
・商談名を「（元の商談名）のコピー」などと制御する
など・・・

ひとまず、こちら一括コピーの草案として提示します。
ご参考になれば幸いです。

リストビューで選択したレコードをidsで呼び起こし、またSOQLの問題は、こちらの記事を参考にしました。

https://sf.forum.circlace.com/articles/711663296326930432