Salesforceでフローを作成しよう～2つの親オブジェクトを持つ子オブジェクトで２つ同じ親オブジェクトを持つレコードを作成させない方法

こんにちは
本橋孝昭です

今回はSalesforceフローを使い
・2つの親オブジェクトを持つ子オブジェクトで２つ同じ親オブジェクトを持つレコードを作成させない方法
についてご紹介します

今回の内容は動画でも解説しています

https://youtu.be/s4h-recjTRs?si=KLdXTAzEZqQ2NBfe

<iframe width="560" height="315" src="https://www.youtube.com/embed/s4h-recjTRs?si=aLYi0vDN8me8iG8w" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>


例としてこちらのようなオブジェクト構成がSalesforceであったとします

![連結オブジェクト.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/2e690bce-3c37-98d7-4fc1-dc59a86f2349.png)


求人掲載オブジェクトのレコードを作成する際
・職種　レコード
・職務　レコード
を紐づけて作成しますが

1.求人掲載作成時に　職種A　職務aのレコードを紐づけて作成
→成功
2.次に求人掲載作成時に　職種A　職務aのレコードを紐づけて作成
→失敗（さきほどの１職種も職務も同じ親なので作成できないようにする）

3.次に求人掲載作成時に　職種A　職務bのレコードを紐づけて作成
→成功（職種Aと職務aは組み合わせがすでにあるが職種Aと職務bの組み合わせの求人掲載レコードは無いから）

上記のような設定ができるフローを作成します

こちらのフローを作成すれば不要な重複のようなデータを作成することを防ぐので大変便利になりますね


なお今回は分かりやすいようにフロー作成の例として
・親１は「親１オブジェクト」（Parent1__c）
・親２は「親2オブジェクト」（Parent2__c）
・子は「子オブジェクト」（Child__c）

とします


それではフローの設定画面を見ていきます

## フロー全体像

![001フロー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/8753e864-cf39-aeab-93f8-3f449b2e2f26.png)

## フロー詳細

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/fd39d917-0eb9-450d-9d1e-c8599e488ca6.png)

※最後のANDは　ID　次の文字列に一致しない　{!$Record.Id}　です


![002フロー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/faea1e4b-c84e-2fbc-b19f-a19dd4da4015.png)

![0022フロー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/1e771502-dc12-d3d4-db46-8ea9ca30a470.png)

![003フロー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/a0b4c88d-d177-c05a-2839-a0980ef72718.png)

※もちろんエラーメッセージは任意で大丈夫です
今回は例としてこのようなエラーメッセージを作成しました


>親1オブジェクトと親2オブジェクトで全く同じデータのものがあります。
こちら同じものがすでにあるので保存はできないです。
同じデータはこちらです
https://wise-koala-1v6x88-dev-ed.trailblaze.lightning.force.com/lightning/r/Child__c/{!GetChild.Id}/view


なお、このURLは例でありSalesforce環境により異なります
（「wise-koala-1v6x88-dev-ed.trailblaze.」は他環境により異なります）
もしもそちらの環境で設定したい場合、子オブジェクトのレコード（なんでもいいので）を開きそのURLをコピペして貼ることが確実です

![フロー123.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/1b00a3d9-ba0a-3342-4a4d-9279d63badc5.png)

これでフローの設定は完成です

フローを有効にして、子レコード作成時に親1オブジェクトと親2オブジェクトレコードの紐づけがすでにある場合エラーを起こしレコード保存ができなくなります

![124フロー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/3ec887c7-3fb9-faf0-2366-d3352cb748d9.png)

そして表示されるURLを見ると作成しようとしている親１と親２がすでに紐づいている子オブジェクトのレコードが表示されます

（上記画像でいうと「親1-A」と「親2-A」が紐づく子オブジェクトのレコードがＵＲＬで表示されます）



### おまけ　アクションの挙動

こちらのフローのエラーメッセージはレコード作成アクション時でも発生することが確認しました

例として親1オブジェクトにこのようなアクションを作成してページレイアウトに表示させると、親1オブジェクトレコードから子オブジェクトのレコード作成が可能ですね

![126フロー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/6cdb5568-25e4-d7f9-d0c3-c9a1360ef4dd.png)

しかしながら、アクションからの子オブジェクトのレコード作成でも今回のような条件で子レコード作成の場合同様のエラーを発生することが可能です

![127フロー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/4b74cd2d-b289-ff98-c896-360ed9898a57.png)


今回のようなフローを作成すれば重複するようなレコード作成を防ぐことが出来そうですね
ぜひいろいろと試してみてください