目次
はじめに
こんにちは。
今回は、特定の条件を満たす関連レコードの重複作成を防ぐ方法についてご紹介します。
具体的には、同じ「取引先」レコードに関連する特定の選択リスト項目を持つ「商談」レコードについて、その項目値に基づき複数作成できないようにする方法となります。入力規則とフローを組み合わせて活用することで実現可能です。
では設定方法をご紹介していきます。
特定の条件を満たす関連レコードの重複作成を防ぐ
1. 事前準備
設定方法をご紹介していくにあたって、今回は「商談」に以下の選択リスト項目があるとします。そして、同じ「取引先」レコードに関連する「商談」レコードについて、選択リスト項目の値が「①」であるレコードは複数作成できるが、「②」であるレコードは1つしか作成できないように設定を行なっていくこととします。
オブジェクト: 「商談」
項目: 「テスト」 (API参照名:TestPicklist__c)
データ型: 「選択リスト」
選択リスト値: 「①」、「②」
2. 入力規則を作成する
「商談」にチェックボックス項目を作成し、その項目にチェックが入っている場合(= True である場合)にエラーになる入力規則を作成していきます。
この後作成するフローで、選択リスト項目「テスト」の値が「②」である「商談」レコードが2つ以上作成されようとした時にチェックボックス項目をTrueに更新することで、入力規則が発動しエラーになるという仕組みになります。
① 「商談」にチェックボックス項目を作成する
「商談」に以下のチェックボックスを作成します。
オブジェクト: 「商談」
項目: 「重複あり」 (Duplication__c)
データ型: 「チェックボックス」
② 「商談」に入力規則を作成する
「商談」に、①で作成したチェックボックス項目がTrueである場合にエラーとなる入力規則を作成していきます。
[設定] > [オブジェクトマネージャー] > [取引先] を選択し、画像①の画面のように[入力規則]を選択、画面右上にある[新規]をクリックします。
A. ルール名の入力
入力規則の編集画面が表示されたら、画像②のように任意の[ルール名]を英数字のみで入力し、[有効]にチェックがついていることを確認します。
B. エラー条件数式の入力
次に[エラー条件数式]の入力欄へ以下の数式を入力します。入力後、画像③のように入力欄の下の[構文を確認]ボタンを押してエラーがないことを確認します。
数式:
Duplication__c = TRUE
数式の解説:
「Duplication__c」は①で作成したチェックボックス項目「重複あり」 のAPI参照名です。この数式によって、「重複あり」にチェックが入っている(= True である)場合にエラーとなり「商談」レコードが保存できなくなるように設定されます。
C. エラーメッセージの入力
Bで入力した数式の結果がTrueになり、「商談」レコードの保存に失敗した場合のエラーメッセージを[エラーメッセージ]へ入力します。今回は画像④のように設定しました。
ここまでの設定を終えたら[保存]をクリックし、以上で入力規則の作成は完了です。
3. フローを作成する
選択リスト項目「テスト」の値が「②」である「商談」レコードが2つ以上作成されようとした時に、2. で作成したチェックボックス項目「重複あり」をTrueに更新するフローを作成していきます。
① レコードトリガーフローの作成を開始する
レコードトリガーフローでフローを作成していきます。[設定] > [フロー] > [新規フロー] を選択し、画像①の画面で[レコードトリガーフロー]を選択し[作成]をクリックします。
② フローの開始要素を設定する
[作成]をクリックすると、フローの開始要素の設定画面が画像②のように画面右側に表示されるので、「テスト」項目の値が「②」である時のみフローが起動されるように以下の設定を行います。
オブジェクト: 商談
フローをトリガーする条件: レコードが作成または更新された
条件の要件:
すべての条件に一致(AND) ⇨ これによって、「テスト」項目の値が「②」となった時のみフローが起動します。
[項目] TestPicklist__c [演算子] 次の文字列と一致する [値] ②
更新されたレコードでフローを実行するタイミング: 条件の要件に一致するようにレコードを更新したときのみ
フローを最適化: 高速項目更新
③ 同じ選択リスト値を持つ「商談」レコードを取得する
後続の処理で使用するため、トリガーレコード以外の「テスト」項目の値が「②」である「商談」レコードを取得します。②で設定した開始要素の下にある[ + ]をクリックし、画像③のように[レコードの取得]を選択します。
その後表示される画像④の設定画面では以下の設定を行います。
オブジェクト: 商談
表示ラベル: 同じ選択リスト値を持つ「商談」レコードを取得 (任意)
API参照名: Get_OppRecords_SamePicklistValue (任意)
商談レコードを絞り込み:
すべての条件に一致(AND)
[項目]Id [演算子]次の文字列と一致しない [値]{!$Record.Id} → トリガーレコード以外の「商談」レコードを取得します
[項目]AccountId [演算子]次の文字列と一致する [値]{!$Record.AccountId} → トリガーレコードと同じ「取引先」レコードに関連する「商談」レコードを取得します
[項目]TestPicklist__c [演算子]次の文字列と一致する [値]② → 「テスト」項目の値が「②」である「商談」レコードを取得します
商談レコードを並び替え: 並び替えなし
保存するレコード数: すべてのレコード
レコードデータの保存方法: すべての項目を自動的に保存
④ 取得したレコードの件数を変数に割り当てる
③で取得したレコードの件数を変数に割り当てます。③で設定した[レコードを取得]要素の下にある[ + ]をクリックし、画像⑤のように[割り当て]を選択します。
画面が表示されたら[変数値を設定]の[変数を検索...]ボックスをクリックし、表示される[ + 新規リソース]をクリックし変数を作成します。画像⑥の画面が表示されるので、以下のように入力を行い[完了]をクリックします。
リソース種別: 変数
API参照名: Var_RecordCount (任意)
データ型:数値
変数を作成したら、[割り当て]の設定画面では以下の設定を行います。
表示ラベル: 取得したレコード件数を変数に割り当て (任意)
API参照名: SetVar_RecordCount (任意)
変数値を設定:
[変数]{!Var_RecordCount} [演算子]次の数と一致する [値] {!Get_OppRecords_SamePicklistValue}(③の[レコードを取得]で作成されたレコードコレクション変数)
⇨ 先ほど作成した変数{!Var_RecordCount}に③で取得したレコードの件数を保存します。
⑤ 取得したレコードの件数によって処理を分岐する
④の設定によって、変数には③で取得したレコードの件数が保存されました。この変数が1以上の場合(既に「テスト」項目の値が「②」である「商談」レコードがある場合)のみレコードの作成を不可としたいので、その場合と0の場合(「テスト」項目の値が「②」である「商談」レコードがない場合)に分けて処理を行えるように設定していきます。これには、[決定]というフロー要素を使用します。
④で設定した[割り当て]要素の下にある[ + ]をクリックし、画像⑦のように[決定]を選択します。
その後表示される画像⑧の設定画面では、初めに任意の[表示ラベル]と[API参照名]を入力します。
次に既に「テスト」項目の値が「②」である「商談」レコードがある場合の設定を行います。画像⑨のように[結果]の[新しい結果]タブで以下のように設定を行います。
表示ラベル: レコード件数が1の場合 (任意)
API参照名: RecordCount_1 (任意)
結果を実行する条件の要件:
すべての条件に一致(AND)
[リソース]{!Var_RecordCount} [演算子]以上 [値]1
結果を実行するタイミング: 条件の要件を満たす場合
次に「テスト」項目の値が「②」である「商談」レコードがない場合の設定を行います。画像⑩のように[結果]の[デフォルトの結果]タブで表示ラベルを分かりやすい名前とし、[完了]をクリックします。
⑥ チェックボックス項目をTrueに更新する
⑤で設定したレコード件数が1の場合の分岐にて、2. で作成したチェックボックス項目「重複あり」をTrueに更新します。この処理によって、同じく2. で作成した入力規則が発動し「商談」レコードの保存が不可となります。
⑤で設定した[決定]要素の結果「レコード件数が1の場合」の下にある[ + ]をクリックし、画像⑪のように[レコードを更新]を選択します。
その後表示される画像⑫の画面では、以下のように値を入力します。
表示ラベル: チェックボックス項目をTrueに更新する (任意)
API参照名: UpdateCheckbox_True (任意)
更新するレコードを検索してその値を設定する方法: フローをトリガーした 商談 レコードを使用
レコード を更新する条件の要件: なし ー 常にレコードを更新
商談 の項目値を レコード に設定(項目 ← 値):
Duplication__c ← {!$GlobalConstant.True}
以上で選択リスト項目「テスト」の値が「②」である「商談」レコードが2つ以上作成されようとした時に、2. で作成したチェックボックス項目「重複あり」をTrueに更新するフローの作成は完了です。[保存] をクリックして、[有効化] をクリックします。
4. 行なった設定内容を確認する
2. と3. で作成した入力規則とフローによって、同じ「取引先」レコードに関連する「商談」レコードについて、選択リスト項目「テスト」の値が「②」である「商談」レコードは1つしか作成できないように設定できているか確認していきます。
確認には、画像①の「取引先」レコードを使用します。この取引先には、既に選択リスト項目「テスト」の値が「②」である画像②の「商談」レコードが1件関連しています。
この「取引先」レコードに関連する「商談」レコードを選択リスト項目「テスト」の値を「②」として新たに作成・更新しようとした時に、エラーとなりレコードを保存できないように設定されているかを確認します。
① 同じ選択リスト値のレコードを新規作成しようとした場合
画像①の「取引先」レコードに関連する「商談」レコードを選択リスト項目「テスト」の値を「②」として新規作成します。画像③のように入力し[保存]をクリックすると、画像④のように入力規則によってエラーとなりレコードを新規作成できないことが確認できました。
② 同じ選択リスト値へ既存のレコードを更新しようとした場合
画像①の「取引先」レコードに関連する既存の「商談」レコードを選択リスト項目「テスト」の値を「②」として更新します。画像⑤のように入力し[保存]をクリックすると、画像⑥のように入力規則によってエラーとなりレコードを新規作成できないことが確認できました。
まとめ
今回は、フローと入力規則を組み合わせて、特定の条件を満たす関連レコードの重複作成を防ぐ方法についてご紹介しました。
今回のケースのように、1つの機能だけでは実現できない要件も複数の機能を活用することで実現できる場合がありますので、他の機能を組み合わせられないか?と考えることは重要な観点となります。
Salesforceに関するお悩みはありませんか?
今回ご紹介した入力規則やフローをはじめとするSalesforceの機能活用について、
「調べるのに時間がかかる...」
「作ったはいいがバグが起こらないか心配...」
「Salesforceを活用したいけどそこまで手が回らない...」
などお悩み事はありませんか?
Air合同会社ではSalesforceエンジニアを一人雇うほどの業務は無いが、業務を任せたいというお客様へ月 数時間~40時間で柔軟にご利用頂けるSalesforce活用支援サービスを提供しています。
機能の実装や改善のご提案、社内での内製化支援まで、Salesforce認定資格保持者で構成される当社チームが貴社のSalesforceのお悩みを解決いたします。Salesforceをより活用し課題解決を行なっていくための手段としてぜひご検討ください。
Salesforce業務を他社に外注するイメージがわかない…という方に向け、外注する際のメリット・デメリットやSalesforce開発の流れを以下の記事で解説しています。ぜひご覧ください。
Salesforce運用保守を外注するメリット・デメリットとは?
Salesforceのノーコード・ローコード開発の流れを解説!
また、弊社では「サービスについて簡単に知りたい」「Salesforceの使い方について相談したい」などSalesforceに関する無料相談会も随時実施しています。
貴社の課題解決のお力になれるよう、Salesforce認定資格を持つ担当者が心を込めてサポートいたします。まずはお気軽に下記ボタンよりお問い合わせください。
Salesforceオンライン無料相談会
Air合同会社では
「サービスについて簡単に知りたい」
「Salesforceの使い方について相談したい」
など、Salesforceのお悩みに関する無料相談会を随時実施しております。
\Salesforce認定資格を持つ担当者が対応!/
無料相談のご予約はこちら