「
【前編】画面フローの繰り返しコンポーネント:Upsert(作成/更新)、削除を一括で行う」の続き、Upsertの部分の記事になります。このフローの目的、概要については前編をご確認ください。
後編は⑧の要素からスタートします。

フロー後半の設定
⑧決定:新規/更新あり
表示ラベル:新規/更新あり
組織の命名ルールに則って、わかりやすい名前を付けます。
API参照名:UpsertIncluded
組織の命名ルールに則って、わかりやすい名前を付けます。
結果:Yes
結果のAPI参照名:YesUpsert
結果を実行する条件の要件:
{!RepeatCredentials.AddedItems}|空|False
OR
{!RepeatCredentials.PrepopulatedItems}|空|False
{!RepeatCredentials.AddedItems}のリソースは、「編集画面 > 繰り返しコンポーネント(API参照名で表示されます)>追加された項目」を選択します。
{!RepeatCredentials.PrepopulatedItems}のリソースは、「編集画面 > 繰り返しコンポーネント(API参照名で表示されます)>事前入力された項目」を選択します。
「デフォルトの結果」の表示ラベルを「No」に変更します。
⑨ループ/出力すべてをループ
表示ラベル:削除をループ
組織の命名ルールに則って、わかりやすい名前を付けます。
API参照名:LoopAllOutput
組織の命名ルールに則って、わかりやすい名前を付けます。
コレクション変数を選択 > コレクション変数:{!RepeatCredentials.AllItems}
「編集画面 > 繰り返しコンポーネント(API参照名で表示されます)> すべての項目」を設定します。
コレクションを反復処理するための方向を指定します。> 方向:最初の項目から最後の項目へ
⑩割り当て:出力を割り当て
Upsert対象レコードのIdの値を割り当てる単一レコード変数を作成します。
レコード単一変数「OutputData」-----------------------
API参照名:OutputData
組織の命名ルールに則って、わかりやすい名前を付けます。
データ型:レコード
複数の値を許可(コレクション):チェックなし
オブジェクト:資格情報
フロー外部での可用性:チェックなし
------------------------------------------------------------
割り当ての設定を行います。
表示ラベル:出力を割り当て
組織の命名ルールに則って、わかりやすい名前を付けます。
API参照名:AssignOutputData
組織の命名ルールに則って、わかりやすい名前を付けます。
変数値を設定:
作成したレコード単一変数(資格情報)の項目に、出力をループして値を置き換えていきます。
一行目は、資格情報の項目「資格情報番号」の値を変数に格納しています。
※自動採番項目で自動的に付与されるため、既存レコードとの一致をこの項目で判断させない限り、割り当てが不要な場合が多いです。
{!OutputData.Name}|次の文字列と一致する|{!LoopAllOutput.CredentialsName}
「OutputData >資格情報番号|次の文字列と一致する|ループ 出力すべてをループ の現在の項目 > 資格情報番号」のように変数値を設定します。
他の項目も同様に設定しますが、参照項目「生徒」は↓のように設定します。
{!OutputData.Students__c}|次の文字列と一致する|{!recordId.Id}
「OutputData >生徒|次の文字列と一致する|recordId > カスタムオブジェクトId」
※recordIdについては「
【前編】画面フローの繰り返しコンポーネント:Upsert(作成/更新)、削除を一括で行う」をご確認ください。
必要な項目の分、この作業を行います。
⑪割り当て:出力コレクションに割り当て
⑩で単一レコード変数に割り当てたUpsert対象レコードId ×レコード件数を割り当てるコレクション変数を作成します。
レコード単一変数「OutputCollection」-----------------------
API参照名:OutputCollection
組織の命名ルールに則って、わかりやすい名前を付けます。
データ型:レコード
複数の値を許可(コレクション):チェックあり
オブジェクト:資格情報
フロー外部での可用性:チェックなし
------------------------------------------------------------
割り当ての設定を行います。
表示ラベル:出力コレクションに割り当て
組織の命名ルールに則って、わかりやすい名前を付けます。
API参照名:AssignOutputCollection
組織の命名ルールに則って、わかりやすい名前を付けます。
変数値を設定:{!OutputCollection}|追加|{!OutputData}
↓のようなパスで設定します。
作成したUpsert用コレクション変数 |追加|⑩で作成しIdを割り当てた単一レコード変数
⑫レコードを作成:資格情報をアップサート
表示ラベル:資格情報をアップサート
組織の命名ルールに則って、わかりやすい名前を付けます。
API参照名:UpsertCredentialsRecords
組織の命名ルールに則って、わかりやすい名前を付けます。
値を選択して複数のレコードを作成:OutputCollection
⑪で作成し、Upsert情報を割り当てたコレクションを選択します。
既存のレコードを更新:有効
既存のレコードを識別するために使用する項目:レコードID
作成または更新に失敗した場合の処理:成功したレコードを処理する。
※今回はこちらを選択していますが、「レコード処理をしない。」を選択して障害バスの設定を行うほうがレコード生成をしっかり管理できます。
⑬画面:操作終了画面
画面右側のプロパティで、画面要素自体の表示ラベル、API参照名を設定します。
表示ラベル:操作終了画面
組織の命名ルールに則って、わかりやすい名前を付けます。
API参照名:ScreenFinish
組織の命名ルールに則って、わかりやすい名前を付けます。
表示テキストコンポーネント
表示テキストコンポーネントを画面に追加します。

繰り返しコンポーネントを選択した状態で、右側の設定項目に入力していきます。

API参照名:TextLinkCredentials
組織の命名ルールに則って、わかりやすい名前を付けます。
テキスト本文:
「資格情報の更新が完了しました。
資格情報を確認
※クリックすると「資格情報」の関連リストが表示されます。」
と入力し、「資格情報を確認」にリンクを設定します。
リンクは次のように設定します。
https://XXXXXXXXXXXXX.lightning.force.com/lightning/r/Student__c/{!recordId.Id}/related/Credentials01__r/view・「XXXXXXXXXXXXX」は組織のドメインになります。
・「Student__c」は親オブジェクトのAPI参照名でを挿入します。今回は生徒オブジェクトになります。
・「recordId.Id」は作成した生徒レコード情報を取得する変数のId項目を指定します。
・「Credentials01__r」は生徒を参照する主従関係項目の子リレーション名です。
その他はデフォルトのままです。
これでフローは完成しました。
テスト等を行って問題がないか確認し、フローを有効化します。
レコード画面のアクションから起動できるように配置
生徒オブジェクトにフローを呼び出すアクションを作成し、アクションをページレイアウトに追加します。詳細については「
画面フローの繰り返しコンポーネント:ひとつの画面で複数のレコードを新規作成」の「レコード画面のアクションから起動できるように配置」の説明をご確認ください。

削除、Upsert(作成/更新)の確認
とある生徒さんの資格情報の状況です。

この3つをひとつの画面で1回の操作で終わらせます!
①既存レコードの削除
②既存レコードの更新
③新規レコードの作成
生徒レコード上の、フローを設定したアクションをクリックします。

ちょっとわかりづらいですが、既存のレコード全6件の情報が表示されています。

【削除】をクリックしてレコードを削除し、

既存のレコードを更新(値を編集)し、

【+追加】をクリック後に追加された入力項目に値を入力して、【更新】をクリックします。

画面に表示されるリンクをクリックすると、関連リストが表示されます。

削除、更新、作成の処理が想定通り実行されました。
仕様の気になるところ
更新されたレコードのみを切り分けることができない
既存のレコードを繰り返しコンポーネントで表示させ、フローの処理を完了させると、特に編集を行わなかったレコードも更新がかけられるようで、「最終更新日」の値が変更されていました。

操作の有無に関わらず同じ日付
繰り返しコンポーネントからの出力は「すべての項目」「事前入力された項目」「追加された項目」「削除された項目」として参照できますが、更新されたレコードは「すべての項目」からのみ値が参照可能となっています。「すべての項目」には「追加された項目」も、更新されていない既存の値も含まれています。なお、「事前入力された項目」は既存の値のことを指します。
色々と検証してみたのですが、変更がかけられた「事前入力された項目」の取得がスムーズに行えず、きれいにコレクションを分割することができませんでした。結果、「レコードを作成」要素の「既存のレコードを更新」を使用すると、変更がない場合も「最終更新日」が上書きされるようです。
もし、このあたりの回避策をご存じの方がいらっしゃいましたら、コメントいただけると大変喜びます!
とは言いいましても、リストビューやデータターブルよりも1件1件の内容をきちんと確認できそうですし、多すぎない量の子レコードのメンテナンスにはいいかもしれません。
関連記事
【前編】画面フローの繰り返しコンポーネント:Upsert(作成/更新)、削除を一括で行う画面フローの繰り返しコンポーネント:ひとつの画面で複数のレコードを新規作成
Winter'25 フローの選択肢ルックアップコンポーネントで複数の値を検索して保存【フロー】複数ルックアップコンポーネントを使って商談一括作成画面を作ってみたループとコレクション変数を用いたフローの作成同じパターンのレコード作成を自動化Summer'24 画面フローのAction Buttonコンポーネントでフローを呼び出す(ベータ)