リストビューで選択したレコードを処理するフローは、こちらの
記事の応用になるとすぐに浮かびましたが、キャンペーンメンバーはリードと取引先責任者、場合によっては取引先など複数のオブジェクトが混在しているので、少し工夫が必要かなと思いました。
また、キャンペーンメンバーのリストビューへはクイック検索条件しか使えないので、その辺りを考慮してサンプルフローを作成してみました。
キャンペーンメンバーのリストビューについて
キャンペーンメンバーのリストビューはこんな感じで見込客(リード)と取引先責任者が混在しています。
表示する項目は変更できますが、新規でリストビューを作成して条件指定することができません。
(表示する項目の変更方法は「
2.カスタムボタンの作成、配置の3」でご紹介しています。)

設定できる検索条件は、「クイック検索条件」の項目のみです。
そのため、今回はToDoを作成した顧客を識別できるように、キャンペーンメンバーの状況を使いたいと思います。
キャンペーンメンバーの状況の選択値は、キャンペーンごとに違うので、該当のキャンペーンのキャンペーンメンバーの状況のみ選択可能な状態にします。

今回は少しだけ凝って、フロー内でキャンペーンメンバーの状況の値も追加できるようにしてみます。
1.フローの設定
障害パスの設定は省略していますので、必要に応じて設定してください。
参考ヘルプ:
フローが失敗した場合の処理のカスタマイズ1.[設定] から、[クイック検索] で「フロー」を検索し、[フロー]をクリックし[新規フロー]ボタンをクリック、または、設定ホームの[作成▼]の「フロー」をクリックします。

2.「画面フロー」を選択、[作成]ボタンをクリックします。
Flow Builderが開いたら、左上のアイコン「ツールボックスを切り替え」をクリックします。

3.マネージャの[新規リソース]をクリックして以下の変数を作成します。
①選択したレコードIDを受け取るテキストコレクション変数
・
リソース種別:変数
・
API参照名:
ids(※大文字と小文字が区別されるため、この表記のままで入力してください)・
データ型:テキスト
・
複数の値を許可 (コレクション):チェックあり
・
フロー外部での可用性:入力で使用可能にチェック

②受け取ったレコード件数を格納する変数
・
リソース種別:変数
・
API参照名:命名は自由です
・
データ型:数値
・
小数点の位置:0

③ToDoのレコードを格納するレコード(単一)変数
・
リソース種別:変数
・
API参照名:命名は自由です
・
データ型:レコード
・
オブジェクト:ToDo

④ToDoのレコードを格納するレコードコレクション変数
・
リソース種別:変数
・
API参照名:命名は自由です
・
データ型:レコード
・
複数の値を許可 (コレクション):チェックあり
・
オブジェクト:ToDo

⑤キャンペーンメンバーのレコードを格納するレコード(単一)変数
・
リソース種別:変数
・
API参照名:命名は自由です
・
データ型:レコード
・
オブジェクト:キャンペーンメンバー

⑥キャンペーンメンバーのレコードを格納するレコードコレクション変数
・
リソース種別:変数
・
API参照名:命名は自由です
・
データ型:レコード
・
複数の値を許可 (コレクション):チェックあり
・
オブジェクト:キャンペーンメンバー

4.[開始]の下の⊕から[割り当て]を追加し以下のとおり設定します。
変数 | 演算子 | 値 |
var_Count(3.②で作成した変数) | 次の数と一致する | ids(3.①で作成した変数) |

5.[割り当て]の下の⊕から[決定]を追加し以下のように設定します。
・
表示ラベル:0件
・
結果を実行する条件の要件:すべての条件に一致 (AND)
リソース | 演算子 | 値 |
var_Count(3.②で作成した変数) | 次の文字列と一致する | 0 |
・
デフォルトの結果の表示ラベル:1件以上

6.[決定]要素のコネクタの「0件」の下の⊕から[画面]を追加し以下のように設定します。
コンポーネントから[表示テキスト]をクリックし、選択件数0件のユーザ宛てのメッセージを入力します。
サンプルではレコードの選択件数が0件はフローを終了させますので、[カスタム表示ラベルを使用]で完了ボタンの表示ラベルを「終了」にします。(フッターの設定は任意です)

7.[決定]要素のコネクタの「1件以上」の下の⊕から[レコードを取得]を追加し、以下のように設定します。
・
オブジェクト:キャンペーンメンバー
・
レコードを絞り込み:[条件の要件] すべての条件に一致(AND)
項目 | 演算子 | 値 |
Id | 次に含まれる | ids (3.①で作成したコレクション変数) |
・
レコードを並び替え:[並び替え順] 並び替えなし
・
保存するレコード数:最初のレコード
・
レコードデータの保存方法:すべてのデータを自動的に保存

8.[レコードを取得]の下の⊕からもうひとつ[レコードを取得]を追加し、以下のように設定します。
・
オブジェクト:キャンペーンメンバーの状況
・
レコードを絞り込み:[条件の要件] すべての条件に一致(AND)
項目 | 演算子 | 値 |
CampaignId(キャンペーン ID) | 次の文字列と一致する | get_CampaignMember キャンペーンメンバー > キャンペーン ID |
・
レコードを並び替え:[並び替え順] 昇順
[並び替え] Label(メンバーの状況)
※レコードの並び替えは「キャンペーンメンバーの状況関連リスト」と合わせるのがおすすめですが、任意ですので「並び替えなし」でもOK。
・
保存するレコード数:すべてのレコード
・
レコードデータの保存方法:すべてのデータを自動的に保存

9. マネージャの[新規リソース]をクリックして、コレクション選択肢セットを作成します。
・
リソース種別:コレクション選択肢セット
・
API参照名:命名は自由です
・
コレクション:{!get_CampaignMemberStatuses} (8.で取得したレコードコレクション)
・
選択肢表示ラベル:Label(メンバーの状況)
・
データ型:テキスト
・
選択肢の値:Label(メンバーの状況)

10.8.の[レコードを取得]の下の⊕から[画面]を追加し以下のように設定します。
この画面は「キャンペーンメンバーの状況」の選択と、「ToDo作成に必要な項目」をユーザに入力させる画面です。サンプルでは最小限の項目となっていますので、必要に応じて項目を追加してください。
サンプルではこのような入力画面に設定していきます。

①まずはコンポーネントから[表示テキスト]をクリックし、「キャンペーンメンバーの状況」の値の追加に関するメッセージを表示させます。

②「キャンペーンメンバーの状況」を追加する場合にチェックを入れる、チェックボックスを追加します。
コンポーネントから[チェックボックス]をクリックし、右側の表示ラベル等を入力します。

③「キャンペーンメンバーの状況」を選択させる、「選択リスト」を追加します。
コンポーネントから[選択リスト]をクリックし、右側の選択リストの設定を入力していきます。
・
データ型:テキスト
・
ユーザが複数のオプションを選択できるようにする:いいえ
・
コンポーネントの種類:選択リスト
・
選択肢:{!list_CampaignMemberStatuses}(9.で作成したコレクション選択肢セット)

④コンポーネントから[表示テキスト]をクリックしToDo情報入力に関するメッセージを表示させます。
以降で追加するコンポーネントは「キャンペーンメンバーの状況」を新たに追加しない場合のみ、この時点で入力が必要ですので、キャンペーンメンバーの状況を新規追加する場合は、入力欄が非表示となるように条件を設定します。
「コンポーネントの表示設定」を開き、以下のように条件を設定します。
・
コンポーネントを表示するタイミング:すべての条件に一致(AND)
リソース | 演算子 | 値 |
input_CreateCampaignMemberStatus (10.②のチェックボックス) | 次の文字列と一致する | False |

⑤ToDoの割り当て先を選択するルックアップ項目を追加します。
※ToDoの割り当て先をリードや取引先責任者の所有者にする場合はこちらの設定は不要です。
後の手順18.の割り当てで、ループ内の項目「LeadOrContactOwnerId」を使用します。
コンポーネントから[ルックアップ]をクリックし、右側の設定を入力していきます。
こちらはToDoの割り当て先(ユーザレコード)を選択できるようにするためですが、ルックアップコンポーネントでToDo(Task)とOwnerIdがサポート対象外のため、
Campaignの
CreatedByIdにしています。
このフローを実行するユーザのレコード作成権限があるオブジェクトであれば、キャンペーン以外のどのオブジェクトでも問題ありません。
作成権限がないオブジェクトを指定すると、画面で選択できませんのでご注意ください。
詳細は
ヘルプの考慮事項のヒントをご確認ください。
・
API 参照名:命名は自由です
・
オブジェクト API 参照名:Campaign
・
項目 API 参照名:CreatedById
・
表示ラベル:ToDoの割り当て先 (命名は自由です)
・
必須:{!$GlobalConstant.True}
「コンポーネントの表示設定」※④と同じ
・
コンポーネントを表示するタイミング:すべての条件に一致(AND)
リソース | 演算子 | 値 |
input_CreateCampaignMemberStatus (10.②のチェックボックス) | 次の文字列と一致する | False |

⑥ToDoの件名を入力するテキスト項目を追加します。
コンポーネントから[テキスト]をクリックし、右側の設定を入力していきます。
「コンポーネントの表示設定」※④と同じ
・
コンポーネントを表示するタイミング:すべての条件に一致(AND)
リソース | 演算子 | 値 |
input_CreateCampaignMemberStatus (10.②のチェックボックス) | 次の文字列と一致する | False |

⑦最後に、ToDoの期日を入力する日付項目を追加します。
コンポーネントから[日付]をクリックし、右側の設定を入力していきます。
「コンポーネントの表示設定」※④と同じ
・
コンポーネントを表示するタイミング:すべての条件に一致(AND)
リソース | 演算子 | 値 |
input_CreateCampaignMemberStatus (10.②のチェックボックス) | 次の文字列と一致する | False |

11.10.の[画面]の下の⊕から[決定]を追加し以下のように設定します。
・
表示ラベル:作成する
・
結果を実行する条件の要件:すべての条件に一致 (AND)
リソース | 演算子 | 値 |
input_CreateCampaignMemberStatus (10.②のチェックボックス) | 次の文字列と一致する | True |
・
デフォルトの結果の表示ラベル:作成しない

12.[決定]要素のコネクタの「作成する」の下の⊕から[画面]を追加し、新規作成する「キャンペーンメンバーの状況」の情報をユーザに入力してもらう画面を設定します。
こちらの通常のキャンペーンメンバーの状況を新規追加する画面を参考にしています。

コンポーネントから[テキスト]と[チェックボックス]をクリックし、それぞれ右側の表示ラベル等を入力します。

13.12.の[画面]の下⊕から[レコードを作成]を追加し以下のように設定します。
・
作成するレコード数:1
・
レコード項目の設定方法:個別のリソースおよびリテラル値を使用
・
オブジェクト:キャンペーンメンバーの状況
・
キャンペーンメンバーの状況の項目値を設定項目 | 値 |
CampaignId(キャンペーン ID) | get_CampaignMember キャンペーンメンバー > キャンペーン ID (7.で取得したキャンペーンメンバーのキャンペーンID) |
Label(メンバーの状況) | input_label(12.のコンポーネント) |
HasResponded(レスポンスあり) | input_HasResponded(12.のコンポーネント) |

14.13.[レコード作成]の下の⊕から[要素に接続]をクリックし、次に8.のキャンペーンメンバーの状況の[レコードを取得]要素をクリックして、接続させます。

ここまでのフロー図はこんな感じです。
ここから、ようやくリストビューで選択したキャンペーンメンバーにToDoを作成する設定をします。

15.[決定]要素のコネクタの「作成しない」の下の⊕から[レコードを取得]を追加し、以下のように設定します。
・
オブジェクト:キャンペーンメンバー
・
レコードを絞り込み:[条件の要件] すべての条件に一致(AND)
項目 | 演算子 | 値 |
Id | 次に含まれる | ids (3.①で作成したコレクション変数) |
・
レコードを並び替え:[並び替え順] 並び替えなし
・
保存するレコード数:すべてのレコード
・
レコードデータの保存方法:すべてのデータを自動的に保存

16.15.の[レコードを取得]の下の⊕から[ループ]要素を追加し、以下のように設定します。
・
コレクション変数:{!get_CampaignMembers} (上記15.で取得したレコードコレクション変数)

17.マネージャの[新規リソース]をクリックして、ToDoの関連先にキャンペーンを紐づけるための数式 を作成します。
リードは関連先を紐づけることができませんが、取引先責任者と取引先は可能です。そのため、数式でリードの場合とそうでない場合に値を変える必要があります。
ToDoの関連先にキャンペーンを紐づけないのであれば、この数式の作成は不要です。また、取引先がある場合はToDoの名前用の数式の作成も必要になります。
・
リソース種別:数式
・
API参照名:命名は自由です
・
データ型:テキスト
・
数式:IF(ISBLANK(ループのリードID),ループのキャンペーンID,"")
IF(ISBLANK({!loop_CampaignMembers.LeadId}),{!loop_CampaignMembers.CampaignId},"") |
※サンプルの数式は取引先を考慮していませんので、「キャンペーンメンバーとしての取引先」を有効にしている場合はそちらを考慮した数式にしてください。

18.[ループ]の「項目ごと」の下の⊕から[割り当て]要素を追加し、以下のように設定します。
・変数値を設定変数 | 演算子 | 値 |
TaskRecord > 関連先 ID (3.③で作成したレコード単一変数) | 次の文字列と一致する | formula_WhatId (17.①で作成した数式) |
TaskRecord > 名前 ID (3.③で作成したレコード単一変数) | 次の文字列と一致する | ループ loop_CampaignMembers の現在の項目 > 関連レコード ID |
TaskRecord > 件名 (3.③で作成したレコード単一変数) | 次の文字列と一致する | input_subject (10.⑥の画面コンポーネント) |
TaskRecord > 期日のみ (3.③で作成したレコード単一変数) | 次の文字列と一致する | input_ActivityDate (10.⑦の画面コンポーネント) |
TaskRecord > 状況 (3.③で作成したレコード単一変数) | 次の文字列と一致する | 未着手 (選択リストから選択) |
TaskRecord > 割り当て先 ID (3.③で作成したレコード単一変数) | 次の文字列と一致する | input_OwnerID > レコード ID (10.⑤の画面コンポーネント) リード等の所有者にする場合は、 ループ loop_CampaignMembers の現在の項目 > 関連レコードの所有者 ID |
TaskRecords (3.④で作成したレコードコレクション変数) | 追加 | TaskRecord (3.③で作成したレコード単一変数) |

19.18.の[割り当て]の下の⊕からもう一つ[割り当て]要素を追加し、以下のように設定します。
・変数値を設定変数 | 演算子 | 値 |
CampaignMemberRecord > キャンペーンメンバー ID (3.⑤で作成したレコード単一変数) | 次の文字列と一致する | ループ loop_CampaignMembers の現在の項目 > キャンペーンメンバー ID |
CampaignMemberRecord > 状況 (3.⑤で作成したレコード単一変数) | 次の文字列と一致する | input_CampaignMemberStatus (10.③の画面コンポーネント) |
CampaignMemberRecords (3.⑥で作成したレコードコレクション変数) | 追加 | CampaignMemberRecord (3.⑤で作成したレコード単一変数) |

20.[ループ]の「最後の項目の後」の下の⊕から[レコードを作成]要素を追加し、以下のように設定します。
・
作成するレコード数:複数
・
レコードコレクション:TaskRecords(3.④で作成したToDoのレコードコレクション変数)

21.20.の[レコードを作成]の下の⊕から[レコードを更新]要素を追加し、以下のように設定します。
・
更新するレコードを検索してその値を設定する方法:レコードまたはレコードコレクションからの ID およびすべての項目値を使用
・
レコードまたはレコードコレクション:CampaignMemberRecords(3.⑥で作成したキャンペーンメンバーのレコードコレクション変数)

22. 21.の[レコードを作成]の下の⊕から[画面]を追加し、完了メッセージ用の画面を設定します。
コンポーネントから[表示テキスト]をクリックし、処理が完了したメッセージを入力します。
サンプルではフロー完了後の画面遷移についてメッセージを入れています。
完了後の戻り値については、この後の手順で設定しますが、元のキャンペーンメンバーのリストビューへは標準機能で設定はできなさそうなので、このようなメッセージにしています。
また、フッターの[一時停止]と[前へ]ボタンを非表示にしています。

23.最後にフローを[保存]し、 [有効化]にします。

2.カスタムボタンの作成、配置
1.キャンペーンメンバーのオブジェクトマネージャから「ボタンとリンク」にアクセスし、[新規ボタンまたはリンク]をクリックします。

2.[表示ラベル][名前]を入力し、以下のように設定します。
・表示の種類:リストボタン
・チェックボックスの表示 (複数レコード選択用):チェックあり
・動作:現在のウィンドウにサイドバーおよびヘッダーなしで表示
・内容のソース:URL
・数式入力欄:/flow/CampaignMember_batch_TaskCreate?retURL=701/o

<数式入力欄の解説>

フローの API 参照名:フローの「プロパティ」や、「詳細とバージョンの表示」から確認することができます。
戻り値:設定しないとフロー完了ボタンを押した後も初期画面に戻りエンドレスになりますので、何かしらの設定が必要です。
今回のサンプルではキャンペーンのホーム画面に戻るようにしていますので、LEXではキャンペーンのリストビューが表示されます。(701はキャンペーンオブジェクトのPrefix)
本当はフローを起動したキャンペーンメンバーのリストビューに戻したいのですが、標準機能ではできなさそうなので、キャンペーンのホームにしています。
他のオブジェクトのオブジェクトPrefixを確認したい場合はレコード画面を開いてアドレスバーからレコードIDの先頭の3桁を確認してください。
その他のフローの完了時のカスタマイズについては
ヘルプを参照してください。
3.キャンペーンのオブジェクトマネージャから「ページレイアウト」にアクセスし、[キャンペーンメンバー]の関連リストのプロパティを開きます。
他のリストビューの設定とは異なり、キャンペーンメンバーのリストビューの表示項目の変更や、リストビューのボタンはこちらから設定します。

4.「ボタン」の⊞をクリックして、カスタムボタンの[利用可能なボタン]から、作成したボタンを移動させ[OK]をクリックします。

5.最後にキャンペーンのページレイアウトを保存します。
【結果確認】
こちらのテストキャンペーンのキャンペーンメンバーで検証してみます。
このキャンペーンのキャンペーンメンバーの状況は、開始時点では2つです。

キャンペーンメンバーのリストビューに移動し、 選択件数を0件にして配置したボタンをクリックすると、ちゃんと設定したメッセージが表示され、[終了]ボタンを押すとキャンペーンのホーム画面に戻りました。
検証して気づきましたが、ここでもキャンペーンメンバーのリストビューへ戻る場合のメッセージを表示してあげた方が親切かもしれません。

次は、キャンペーンメンバーのリストビューの1行目の取引先責任者「植松」さんと、9行目の見込客「見込客1」さんを選択して、ボタンからフローを起動します。

設定したユーザ入力画面が表示され、選択可能なキャンペーンメンバーの状況も開始時点の2つのみが表示されています。
「キャンペーンメンバーの状況を新規作成する」にチェックを入れると、表示条件で設定したToDoの入力欄はちゃんと非表示となりました。このまま[次へ]をクリックしてみます。

メンバーの状況の入力画面がちゃんと表示されましたので、入力して[次へ]進んでみます。

最初のユーザ入力画面に戻り、キャンペーンメンバーの状況に先程入力した値が追加されました。

更新するキャンペーンメンバーの状況と、ToDoの情報も入力して[次へ]をクリックすると、完了のメッセージが表示されました。
[完了]ボタンの動作は最初に確認しましたので、ブラウザの[戻る]でキャンペーンメンバーのリストビューに戻ります。

戻った時点では「状況」は更新されていないので、ブラウザの更新をかけます。

次にToDoの作成状況を確認します。
取引先責任者の「植松」さんです。
フロー内で設定、入力した値でToDoが作成されていました。

次は見込客(リード)の「見込客1」さんです。
こちらも、フロー内で設定、入力した値でToDoが作成されていました。

さいごに
今回お題の「キャンペーンメンバーのリストビュー」ではできることが少なく、ありそうな要件を詰め込んでみたので、工程が少々多くなりましたが、キャンペーンメンバーのリストビューから状況の一括更新は可能なので、キャンペーンメンバーの状況を特定の値にした場合に起動するレコードトリガフローにすればもっとシンプルなものになると思います。
制限のある中で工夫して考えることが楽しいと思える人間ですので、今回の質問内容のお題は作成していてとても楽しかったです。
いつも勉強させていただいています。
* 質問広場~初心者から上級者まで~ 日本 *