複数選択リストの解析はもう問題ありません


+ [チェックボックスグループの項目選択後の処理について（画面フロー）](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000JySyM)
+ [Hurray! Parsing a Multi-Select Picklist is Trouble No More! Phew!](https://automationchampion.com/2021/07/27/parsing-a-multi-select-picklist-is-trouble-no-more/)


Apex を使用せずに Flow で複数選択リストを解析する簡単で迅速な方法はありますかという質問がよく寄せられます。

しかし、先に進む前に、複数選択ピックリストまたはチェックボックス グループを解析するために何が必要かを理解するために数分を費やしましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/670d26bf-a9d2-46c9-ca19-0a02f806522d.png)


答えは非常に簡単です。(前のスクリーンショットに示されているように) 3 つのキャンペーンを選択した場合、Salesforce はレコード ID をコレクション変数ではなくカンマ区切り形式で保存します。チェックボックス グループと複数選択ピックリストの両方に適用できます。 

701B0000000UKG1;701B0000000HRFi;701B0000000UKG1

フローで特定のキャンペーンを使用する場合、唯一のオプションは ID を解析することです。心配はいりません。解析は非常に簡単で迅速です。麺を茹でるよりも時短になると思います!!

# 目的:

このブログ投稿は、次のことを理解するのに役立ちます。

+ 複数選択リストを解析する方法
+ チェックボックス グループを解析する方法
+ Salesforce Flow で数式を使用して最適化する方法 + 
+ 決定要素を複数回実行する方法
+ 最後になりましたが、レコードの作成要素を使用して、一度に複数のレコードを作成 (キャンペーンメンバーを追加) する方法 (Bulk Safe) を発見してください – (うーん… たくさんありますね! )


# ビジネスユースケース

Brenda Davidは、Universal Containers (UC) でシステム管理者として働いています。リードの最適化プロセスの一環として、彼女はセールス ディレクターの Chris Mattison から次の要件を受け取りました。彼らの会話は次のようになりました。

+ ブレンダ、先週、ダラスのオフィスで何人かのテレマーケティング担当者と会いました。テレマーケティング担当者が提起する共通の問題の 1 つは、見込み客/見込み客に電話をかけるたびに、見込み客/見込み客が私たちのキャンペーンの多くの影響を受けていることに気付いたということでした。その結果、アトリビューションをより適切に維持するために、テレマーケティング担当者は見込み客/見込み客との会話に基づいて見込み客/見込み客を複数のキャンペーンに手動で追加しました。

+ テレマーケティング担当者の生活を楽にするために、あなたの助けが必要です! テレマーケティング担当者がリード レコードから起動して複数のキャンペーンを選択できる画面を作成することは可能ですか? 完了すると、テレマーケティング担当者はリードをメンバーとしてキャンペーンに追加できるようになります。

# オートメーション チャンピオン アプローチ (I-do):

上記のビジネス シナリオにはいくつかの解決策が考えられますが、ここではビジネス要件を解決するために画面フローを使用します。ユーザーが入力を提供できるようにするため、画面フローを選択する主な理由。 

先に進む前に、 SalesforceのCampaignMemberオブジェクトについて理解しておきましょう。このオブジェクトは、キャンペーンと (1) 見込み客または (2) 連絡先のいずれかとの間の関連付けを表します。

|フィールド名|詳細|
|:-----------|:---------------|
|キャンペーン ID	|この見込み客または連絡先が関連付けられているキャンペーンの ID。|
|リードID|キャンペーンに関連付けられているリードの ID。|

次に、 MID 式を理解しましょう。この式は、開始位置が指定されたテキスト文字列の中央から指定された数の文字を返します。

ソリューションについて説明する前に、プロセス フローの概要図を示します。次のフロー ダイアグラムに数分かけて理解してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/82beeb15-a7f8-cb60-533d-2021cfa9220c.png)


この自動化プロセスの構築を始めましょう。

# ガイド付き練習 (私たちが行います):

Screen Flowを使用して Brenda のビジネス要件を解決するには、2 つのステップがあります。我々はしなければならない：

1\.  Salesforce フローの手順: フロー プロパティを定義する
  
. 1 選択したキャンペーン ID を保存するテキスト変数を作成します
. 2 ユーザーの入力をキャプチャする画面を追加する
.. 1 複数選択リスト コンポーネントを追加して、アクティブなキャンペーンを表示する 
. 3 割り当て要素を追加して、選択したキャンペーン ID をテキスト変数に追加します 
. 4 開始番号を格納する数値変数を作成する 
. 5 式リソースを追加して、選択したキャンペーン ID から一度に 1 つのキャンペーンを取得します
. 6 数式がレコード ID を返すかどうかを確認する決定要素を追加します。
. 7 割り当て要素を追加して、キャンペーン メンバー レコード変数を入力します 
. 8 割り当て要素を追加して、キャンペーン メンバー レコード変数をレコード コレクション変数に追加します
..   1 開始番号を 19 増やします  
...   1 ちょっと待って！なぜ開始番号を 19 増やす必要があるのか​​と疑問に思われるかもしれません。18 桁の Salesforce ID を使用していませんか? 
...   2 私の回答 – 素晴らしい質問です!! ブログを読むときは常に注意してください！すべてに質問してください！理由を聞いてください！
....   1 では、開始番号を 19 ずつ増やす必要がある理由について説明します。レコード ID は 18 桁です。複数の ID を使用しているため、「;」を使用して ID を区切る必要があります。したがって、「;」のスペースを追加する必要があります。
. 9 キャンペーン メンバー レコードを追加するための Create Records 要素を追加します。 

2\. フローを起動するクイック アクションを作成する

**ステップ 1: Salesforce フロー – フロー プロパティを定義する**
1\.[セットアップ]をクリックします。
2\.[クイック検索] ボックスに「Flows 」と入力します。
3\.Flowsを選択し、 New Flowをクリックします 。
4\.[画面フロー ] オプションを選択し、[次へ] をクリックして、次 のようにフローを構成します。 
.. 1 どのように構築を開始しますか:フリーフォーム
5\.フロー デザイナーが開きます。

**ステップ 1.1: Salesforce フロー – 選択したキャンペーン ID を保存するテキスト変数を作成する**

1. [ Toolbox ]で[ Manager  ]を選択し、[ New Resource ] をクリックして、選択したキャンペーン ID を保存します
2. 次の情報を入力します。
..1 リソース の種類:変数
..2 API 名: varTSelectedCampaignId
..3 データ型:テキスト
..4 デフォルト値:  {!$GlobalConstant.EmptyString}
..5 入力可能チェック 
..6 出力可能チェック
3\. [完了]をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/4af4c79c-e689-859a-0abe-1fef57921e36.png)


**ステップ 1.2: Salesforce フロー – 画面要素を追加する**

1. [ツールボックス]で、[要素]を選択します。画面をキャンバスに ドラッグ アンド ドロップします。
2. 次の情報を入力します。
.. 1 ラベルを入力すると 、API 名 が自動入力されます。
3\. [完了]をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/26b702aa-ab7f-7e13-1b4c-6b36878b4e0f.png)

**ステップ 1.2.1: Salesforce フロー – 複数選択ピックリスト コンポーネントを追加して、アクティブなキャンペーンを表示する**

1. 画面 要素の入力 セクションの下。Multi-Select Picklist コンポーネントを画面に ドラッグ アンド ドロップします。
2. 次の情報を入力します。
.. 1 [ラベル ] フィールドに名前を入力します。API 名は自動入力され ます。
.. 2 チェックボックスを選択
.. 3 アンダーチョイス
... 1 + New Resourceをクリックすると、ポップアップが開きます
... 2 リソース タイプ:レコード チョイス セット
... 3 API名： recChoiceCampaigns 
... 4 オブジェクト:キャンペーン
... 5 キャンペーンレコードのフィルター処理
..... 1 行 1
....... 1 フィールド: IsActive
....... 2 演算子:等しい 
....... 3 値: {!$GlobalConstant.True}
... 6 各選択肢を構成する
.... 1 選択肢 レーベル: Name
.... 2 データ型:テキスト
.... 3 選択値: Id
... 7 [完了] をクリックします

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/1b618e52-f6bc-9f2a-f90b-654dba3d1ef8.png)

3\. [完了]をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/d2e63b22-c371-0651-4220-eb72c6da1dbd.png)


**ステップ 1.3: Salesforce フロー – 割り当て要素を追加して、選択したキャンペーン ID をテキスト変数に追加する**

1. ラベル(変数にキャンペーン ID を入力) フィールドに 名前 を入力します。API 名は自動入力されます。 
2. 変数値の設定
.. 1 行 1
... 1 フィールド: {!varSelectedCampaignId}
... 2 オペレーター: 追加
... 3 値: {!Select_Campaigns}

3\. [完了]をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/02a8be45-edae-a4d3-83b4-5b9b97b7fdf0.png)


**ステップ 1.4: Salesforce フロー – 開始番号を格納する数値変数を作成する**
1. [ツールボックス]で[マネージャー ]を選択し、[新しいリソース] をクリックして開始番号を保存し ます
2. 次の情報を入力します。
.. 1 リソース の種類:変数
.. 2 API 名: varStartNumber
.. 3 データ型:数値
.. 4 10 進値: 0
.. 5 デフォルト値: 1
.. 6 入力可能チェック 
.. 7 出力可能チェック
3\. [完了]をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/a8f312c2-a6a6-2e47-23db-38b950c616a6.png)

**ステップ 1.5: Salesforce フロー – 数式を追加して、選択したキャンペーン ID から一度に 1 つのキャンペーン ID を取得する**

1. [ Toolbox ]で[ Manager ]を選択し、  [ New Resource ] をクリックして、1 つのキャンペーン ID を返す数式を作成します。
2. 次の情報を入力します。
..1 リソース タイプ:フォーミュラ
..2 API 名: for18DigitCampaignId
..3 データ型:テキスト
..4 式: MID( {!varSelectedCampaignId}, {!varStartNumber}, 18)
3\. [完了]をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/06b16358-ae1d-89e8-42b0-ca0ea37cc444.png)


**ステップ 1.6: Salesforce フロー – 決定要素を使用して、数式が RecordId を返すかどうかを確認する**

ここで、決定要素を使用して、数式が recordId を返したかどうかを確認します。次のスクリーンショットは、決定要素の構成に役立ちます。

1. [ツールボックス]で、[要素]を選択します。 
2. 決定要素をフロー デザイナーに ドラッグ アンド ドロップ します。
3. Label (Returned RecordId) フィールドに名前を入力します。API 名は自動入力され ます。
4. [結果の詳細]で、API 名 が自動 入力される ラベル(開始ループ)を入力します。  
5. 結果を実行するための条件要件: すべての条件が満たされている (AND)
.. 1 行 1
... 1 リソース: {!$for18DigitCampaignId}
... 2 演算子: Null です 
... 3 値: {!$GlobalConstant.False}
6\. [完了]をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/8eb1f354-d04c-7734-972f-e0f84dfebd5a.png)


**ステップ 1.7: Salesforce フロー – キャンペーン メンバー レコード変数に入力する割り当て要素を追加する**

1. キャンペーン メンバータイプのレコード変数varRCampaignMember を作成して、キャンペーン メンバーをリードに追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/bc01db61-ef65-15e2-4492-c79c1473b77e.png)


2\. テキスト変数を追加して、現在のリードのレコード ID を渡します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/8e3c0dd6-162c-36c8-5c71-51f1a9bea29a.png)


3\.割り当て 要素をフロー デザイナーに ドラッグ アンド ドロップします。
4\.Label ( Construct EntitySubscription フィールド に名前を 入力します。API 名は自動入力されます。 
5\.変数値の設定
.. 1 行 1
... 1 フィールド: {!varREntitySubscription.ParentId}
... 2 演算子: 等しい
... 3 値: {!$Record.Id}

.. 2 [割り当てを追加] を クリックします
.. 3 行 2
... 1 フィールド: {!varREntitySubscription.SubscriberId}
... 2 演算子: 等しい
... 3 値: {!Loop_through_Preferences.Follower_Name__c}
6\. [完了]をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/7b28e19e-2c08-8931-6c14-b1e459b2da72.png)

**ステップ 1.8: Salesforce フロー – キャンペーン メンバー レコード変数をレコード コレクション変数に追加し、開始番号を 19 ずつ増やす**

1. タイプCampaign Memberのレコード コレクション変数varRCampaignMember を作成して、一括処理用のレコード変数 (ステップ 1.7 で作成) を格納します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/27768677-2b6d-db60-8056-f3941b32e2ac.png)

2\. 割り当て 要素をフロー デザイナーに ドラッグ アンド ドロップします。
3\. [ラベル] ( [開始変数とバルク化を増やす] ) フィールドに 名前 を入力します。API 名は自動入力されます。 
4\. 変数値の設定
.. 1 行 1
... 1 フィールド: {!varRCampaignMembers}
... 2 オペレーター: 追加
... 3 値: {!varRCampaignMember}
.. 2 [割り当てを追加] を クリックします
.. 3 行 2
... 1 フィールド: {!varStartNumber}
... 2 オペレーター: 追加
... 3 値: 19
5\. [完了]をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/381bdac9-bbae-6598-517f-1dfd215facb7.png)


**ステップ 1.9: Salesforce フロー – レコードの作成要素を追加して、キャンペーン メンバー レコードを追加する**

1. レコードの作成要素をフロー デザイナーに ドラッグ アンド ドロップします。
2.  [ラベル ] ([キャンペーン メンバーの追加] ) フィールドに名前を入力します。API 名は自動入力されます。 
3. [作成するレコード数] で[複数] を 選択します。
4. マップレコード コレクション: {!varRCampaignMembers}
5. [完了]をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/7c5ebf9d-5abe-6a52-ff3a-15d6c10bd702.png)


最終的に、ブレンダのフロー は次のスクリーンショットのようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/a3327528-8cff-6e38-0413-f127d088ab8a.png)


すべてが良さそうに見えたら、次の手順を実行します。 

1. [保存]をクリックします。
2.  フロー ラベルを入力すると 、API 名 が自動入力されます。 
3. [詳細を表示]をクリックします。
4. フローの実行方法: フローを実行するための API バージョン: 52
5. フローを実行するための API バージョン: 52
6. インタビュー ラベル:複数選択候補リストの解析 {!$Flow.CurrentDateTime}
7. [保存]をクリックします。 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/c5bd741c-6b79-8272-835a-09aae0eed5b7.png)


もうすぐそこ！すべてが良さそうに見えたら、[アクティブ化] ボタンをクリックします。

**ステップ 2: フローを起動するクイック アクションを作成する**

次のステップは、フローを開始するために、Lead オブジェクトでクイック アクション (キャンペーンに追加) を作成することです。Salesforce は自動的に Lead Id をrecordId変数に渡します。

1. [セットアップ]をクリックします。
2. オブジェクト マネージャでLeadと入力します。
3. [ボタン、リンク、およびアクション] を選択し、[新しいアクション] をクリックします。
4. 次の情報を入力します。

..1 [アクション タイプ] として[フロー]を選択します。
..2 [ 複数選択リスト をフローとして解析] を選択します。
..3 ラベル (キャンペーンに追加) を入力すると 、 名前 が自動入力されます。 

5. [完了]をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/74a38f04-4a84-3746-5459-cbc00ca205a7.png)


リード Lightning レコードページにクイックアクションを必ず追加してください。