【前編】画面フローの繰り返しコンポーネント:Upsert(作成/更新)、削除を一括で行う

【前編】画面フローの繰り返しコンポーネント:Upsert(作成/更新)、削除を一括で行う

長いので次回の記事に続きます。
【前編】画面フローの繰り返しコンポーネント:Upsert(作成/更新)、削除を一括で行う
40
【前編】画面フローの繰り返しコンポーネント:Upsert(作成/更新)、削除を一括で行う
Admin
2024/11/29 18:19:30
画面フローの繰り返しコンポーネント:ひとつの画面で複数のレコードを新規作成」ではレコードの新規作成を行いましたが、Winter'25で「事前入力された項目のコレクション」という設定項目が加わり、レコードの新規作成以外の処理もできるようになったということで、新規作成/更新/削除ができるフローを作ってみました。
長くなりますので、前編と後編に分けて記事にしました。今回は全体の構成と削除部分の説明になります。


やりたいこと

前提

・生徒と資格情報を Salesforce上で管理している。
・主従関係によって生徒(カスタムオブジェクト)を参照する資格情報(カスタムオブジェクト)があり、Salesforceの資格取得情報を管理している。
 《オブジェクト構成》
 生徒(主)ー資格情報(従)
 ※資格情報オブジェクトの名前は自動採番。
・主要な項目は次の 5つ。
 ・資格情報番号(自動採番):レコード名
 ・生徒(主従関係):紐づいている生徒
 ・資格取得日(日付):認定試験に合格した日付
 ・資格名(選択リスト):取得した Salesforce認定資格 
 ・状況(選択リスト):「有効」「要更新」「無効」
  ※更新用モジュールが公開されたら、管理者が一括で「要更新」に変更し、各ユーザーがモジュールを完了後に「有効」へ変更する。


要望

・ひとつの画面で既存(登録済み)の資格情報を確認し、あらたな資格情報の追加、既存の情報の更新、削除を行えるようにしたい。
・操作は生徒レコード上で行いたい。


設定

概要

フローの全体図です。


①既存のレコードを取得します。②繰り返しコンポーネントで構成した画面を表示します。ユーザーが作成/更新/削除の操作を行います。③②削除の操作の有無を確認し、あった場合は「Yes」、なかった場合は「No」の分岐を進みます。
④削除データをループします。


⑤削除対象のレコードIDを単一レコード変数に割り当てます。

⑥⑤の単一レコード変数を削除用のレコードコレクション変数に割り当てます。


⑦⑥を使ってレコードを削除します。

⑧②でレコードの新規作成または更新があったか確認し、あった場合は「Yes」、なかった場合は「No」の分岐を進みます。

⑨②の出力データをループします。出力データには既存の値と新規作成された値が含まれています。

⑩単一レコード変数に②の出力データの値を割り当てます。

⑪⑩の単一レコード変数を新規作成/更新用のレコードコレクションに割り当てます。

⑫⑪を使って、レコードの新規作成と更新を行います。「レコードを作成」要素の「既存のレコードを更新」オプションを使用します。

⑬操作の終了を告げるテキストと、生徒の関連リスト「資格情報」のページに遷移するリンクを配置した画面を表示します。






今回は⑦までの設定内容詳細をご説明します。


設定詳細


最初に、①の要素で必要となる変数を作成します。「画面フローの繰り返しコンポーネント:ひとつの画面で複数のレコードを新規作成」と同様に、最終的にこのフローは生徒レコードのアクションから呼び出せるようにするため、画面からレコードの情報を取得できる変数を作成します。

レコード単一変数「recordId」-----------------------
API参照名:recordId
必ずこの値にしてください。
データ型:レコード
複数の値を許可(コレクション):チェックなし
オブジェクト:生徒
フロー外部での可用性:入力で使用可能に✓を入れます。
フロー外部(レコード画面)から値を受け渡すため、こちらにチェックが必要です。
------------------------------------------------------------


①レコードを取得:資格情報を取得

表示ラベル:資格情報を取得 
組織の命名ルールに則って、わかりやすい名前を付けます。
API参照名:GetCredentials 
組織の命名ルールに則って、わかりやすい名前を付けます。
このオブジェクトのレコードを取得:資格情報
資格情報のレコードを絞り込み>条件の要件:すべての条件に一致(AND)
Students__c(生徒)|次の文字列と一致する|recordId > カスタムオブジェクト ID
資格情報レコードを並び替え:並び替えなし
保存するレコード数:すべてのレコード
レコードデータの保存方法:すべての項目を自動的に保存


②画面:編集画面


画面右側のプロパティで、画面要素自体の表示ラベル、API参照名を設定します。
表示ラベル:編集画面
組織の命名ルールに則って、わかりやすい名前を付けます。
API参照名:ScreenEdit
組織の命名ルールに則って、わかりやすい名前を付けます。

フッター >ナビゲーションの設定-------------------------
状況に応じたナビゲーションのラベルに設定すると、ユーザビリティも良くなります。
今回は、「[次へ] ボタンまたは [完了] ボタン」の設定を変更しています。
------------------------------------------------------------


繰り返しコンポーネント
繰り返しコンポーネントを画面に追加します。

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


API参照名:RepeatCredentials 
組織の命名ルールに則って、わかりやすい名前を付けます。

データソースの設定 >事前入力された項目のコレクション:GetCredentials 資格情報
①で取得したレコードコレクションを選択します。

項目の一位の識別子:Id
※自動的に設定されます。

表示オプションを設定 > 項目の追加または削除をユーザーに許可
☑ユーザーは項目を追加できる
☑ユーザーは事前入力された項目を削除できる

※「ユーザーは項目を追加できる」にチェックを入れると、【追加】のアクションが画面に表示され、レコードの新規作成ができるようになります。
「ユーザーは事前入力された項目を削除できる」にチェックを入れると、【削除】のアクションが画面に表示され、レコードの削除ができるようになります。

コンポーネントの表示を設定 > コンポーネントを表示するタイミング:常に


子コンポーネント

4つの項目を表示するため、4つのコンポーネントを繰り返しコンポーネントの中に追加します。

 《項目》
 ・資格情報番号(自動採番)※編集は不可
 ・資格取得日
 ・資格名
 ・状況
  ↓
 《コンポーネント》
 ・テキスト
 ・日付
 ・選択肢ルックアップ
 ・選択リスト


それぞれのポイントに絞って内容をご説明します。

・資格情報番号(テキスト)

表示ラベル:資格情報番号
組織の命名ルールに則って、わかりやすい名前を付けます。
API参照名:CredentialsName
組織の命名ルールに則って、わかりやすい名前を付けます。
無効:True ({!$GlobalConstant.True})
値は表示しますが、編集はさせたくない場合に Trueにします。
デフォルト値:{!GetCredentials[$EachItem].Name}
「繰り返しの事前入力された項目 >資格情報番号(Name)」で↑の値を設定します。

その他はデフォルトのままです。


・資格取得日(日付)

表示ラベル:資格取得日
組織の命名ルールに則って、わかりやすい名前を付けます。
API参照名:AcquisitionDate
組織の命名ルールに則って、わかりやすい名前を付けます。
デフォルト値:{!GetCredentials[$EachItem].AcquisitionDate__c}
資格情報番号のときと同様に、「繰り返しの事前入力された項目 >資格取得日(AcquisitionDate)」で↑の値を設定します。

その他はデフォルトのままです。


・資格名(選択肢ルックアップ)

新しく「選択リスト選択肢セット」を作成します。

選択リスト選択肢セット「CertificationPicklistSet」------------------
「+新規選択肢リソース」で↓の内容で作成します。
API参照名:CertificationPicklistSet
組織の命名ルールに則って、わかりやすい名前を付けます。
オブジェクト:資格情報
データ型:選択リスト
項目:資格名(CertificationName__c)
並び替え順:項目のデフォルトの順序
---------------------------------------------------------------------------

選択肢ルックアップを設定していきます。
表示ラベル:資格名
組織の命名ルールに則って、わかりやすい名前を付けます。

API参照名:CertificationName
組織の命名ルールに則って、わかりやすい名前を付けます。

選択肢を設定 > ユーザーが複数のオプションを選択できるようにする:いいえ

選択肢:{!CertificationPicklistSet}
作成した選択リスト選択肢セットを設定します。

デフォルト値:{!GetCredentials[$EachItem].CertificationName__c}
資格情報番号のときと同様に、「繰り返しの事前入力された項目 >資格名(CertificationName)」で↑の値を設定します。

その他はデフォルトのままです。





・状況(選択リスト)
新しく「選択リスト選択肢セット」を作成します。

選択リスト選択肢セット「StatusPicklistSet」------------------
「+新規選択肢リソース」で↓の内容で作成します。

API参照名:StatusPicklistSet
組織の命名ルールに則って、わかりやすい名前を付けます。
オブジェクト:資格情報
データ型:選択リスト
項目:状況(Status__c)
並び替え順:項目のデフォルトの順序
---------------------------------------------------------------------------


選択リストを設定していきます。

表示ラベル:状況
組織の命名ルールに則って、わかりやすい名前を付けます。

API参照名:Status
組織の命名ルールに則って、わかりやすい名前を付けます。

選択肢を設定 > ユーザーが複数のオプションを選択できるようにする:いいえ

コンポーネントの種類:選択リスト

選択肢:{!StatusPicklistSet}
作成した選択リスト選択肢セットを設定します。

デフォルト値:{!GetCredentials[$EachItem].Status__c}
資格情報番号のときと同様に、「繰り返しの事前入力された項目 >状況(Status)」で↑の値を設定します。

その他はデフォルトのままです。







③決定:削除あり

表示ラベル:削除あり
組織の命名ルールに則って、わかりやすい名前を付けます。
API参照名:DeleteDataIncluded
組織の命名ルールに則って、わかりやすい名前を付けます。
結果:Yes
結果のAPI参照名:Yes
結果を実行する条件の要件:{!RepeatCredentials.RemovedItems}|空|False
「編集画面 > 繰り返しコンポーネント(API参照名で表示されます)> 削除された項目」で↑のリソースの値を設定します。
「デフォルトの結果」の表示ラベルを「No」に変更します。


④ループ:削除をループ

表示ラベル:削除をループ
組織の命名ルールに則って、わかりやすい名前を付けます。
API参照名:LoopDelete
組織の命名ルールに則って、わかりやすい名前を付けます。
コレクション変数を選択 > コレクション変数:{!RepeatCredentials.RemovedItems}
「編集画面 > 繰り返しコンポーネント(API参照名で表示されます)> 削除された項目」を設定します。
コレクションを反復処理するための方向を指定します。> 方向:最初の項目から最後の項目へ


⑤割り当て:削除データを割り当て

削除対象レコードのIdの値を割り当てる単一レコード変数を作成します。

レコード単一変数「DeleteId」-----------------------

API参照名:DeleteId
組織の命名ルールに則って、わかりやすい名前を付けます。
データ型:レコード
複数の値を許可(コレクション):チェックなし
オブジェクト:資格情報
フロー外部での可用性:チェックなし
------------------------------------------------------------


割り当ての設定を行います。
表示ラベル:削除データを割り当て
組織の命名ルールに則って、わかりやすい名前を付けます。
API参照名:AssignDeleteData
組織の命名ルールに則って、わかりやすい名前を付けます。
変数値を設定:{!DeleteRecord.Id}|次の文字列と一致する|{!LoopDelete.UniqueField__Id}
↓のようなパスで設定します。
作成した削除用単一レコード変数 >Id|次の文字列と一致する| ループ 削除をループ の現在の項目 > Id



⑥割り当て:削除コレクションに割り当て

⑤で単一レコード変数に割り当てた削除対象レコードId ×レコード件数を割り当てるコレクション変数を作成します。

レコードコレクション変数「DeleteCollection」-----------------------

API参照名:DeleteCollection
組織の命名ルールに則って、わかりやすい名前を付けます。
データ型:レコード
複数の値を許可(コレクション):チェックあり
オブジェクト:資格情報
フロー外部での可用性:チェックなし
------------------------------------------------------------

割り当ての設定を行います。
表示ラベル:削除コレクションに割り当て
組織の命名ルールに則って、わかりやすい名前を付けます。
API参照名:AssignDeleteCollection
組織の命名ルールに則って、わかりやすい名前を付けます。
変数値を設定:{!DeleteCollection}|追加|{!DeleteRecord}
↓のようなパスで設定します。
作成した削除用コレクション変数 |追加|⑤で作成しIdを割り当てた単一レコード変数



⑦レコードを削除:削除されたレコードを削除

表示ラベル:削除されたレコードを削除
組織の命名ルールに則って、わかりやすい名前を付けます。
API参照名:DeleteCredentialsRecords
組織の命名ルールに則って、わかりやすい名前を付けます。
削除するレコードを検索する方法:レコード変数またはレコードコレクション変数に保存されたIDを使用
削除するレコードを選択:DeleteCollection
⑥で作成し、削除対象Idを割り当てたコレクションを選択します。

削除の処理について、設定は終了です。


削除の処理のテスト

フローはまだ完成していませんが、最終的な削除の動作について確認した結果を載せておきます。

とある生徒さんの Salesforce認定資格取得情報です。5件の登録があります。
残念ながら、失効してしまった「認定 platform アプリケーションビルダー」を削除したいと思います😱

生徒レコードのアクションをクリックします。

削除したいレコードの右下の【削除】をクリックし、続けて【更新】をクリックします。
(実際は【削除】をクリック後すぐに画面から消えてしまいます)


表示されたリンクをクリックします。


レコードが 1件削除され、4件となりました。


つづきはこちらをご確認ください。
【後編】画面フローの繰り返しコンポーネント:Upsert(作成/更新)、削除を一括で行う


関連記事

【後編】画面フローの繰り返しコンポーネント:Upsert(作成/更新)、削除を一括で行う
画面フローの繰り返しコンポーネント:ひとつの画面で複数のレコードを新規作成
Winter'25 フローの選択肢ルックアップコンポーネントで複数の値を検索して保存
【フロー】複数ルックアップコンポーネントを使って商談一括作成画面を作ってみた
ループとコレクション変数を用いたフローの作成
同じパターンのレコード作成を自動化
Summer'24 画面フローのAction Buttonコンポーネントでフローを呼び出す(ベータ)


公開:2024年11月28日
更新①:2024年11月29日


gilde tech(for Salesforce)」に入会しませんか?
登録すると、「gilde tech」に掲載されているSalesforceのノウハウを全部閲覧できるだけでなく、自分が知っている知識を発信し、他の会員と交流することもできます。
またSalesforceの知識習得に役立つイベント情報も得ることができます。
是非ここで得た知識を業務に活かしてください!
40
コメント