※こちらは過去に公開していたブログからの移行記事です。
状況
取引先に対して、一致ルールと重複ルールを適用して重複管理を行っている。
やりたいこと
取引先名が同じでもレコードタイプが異なれば一致と見なされないようにして、レコードの登録を可能にしたい。
まず、一致ルールの仕様を再確認
取引先の一致ルールの一致条件で指定できる項目の中に、レコードタイプはありません。
選択可能な項目は、一致ルールが適用されるオブジェクトによって異なりますが、サポートされる入力項目の種別は次の通りです。
・メール
・参照関係
・主従関係
・数値
・電話番号
・標準選択リスト
・カスタム選択リスト (単一選択のみ)
・テキスト
・URL
◇ SALESFORCE ヘルプ >ドキュメント >データ品質 >一致ルールの一致条件数式項目では対応できないの?
取引先に、レコードタイプ名を表示するような数式項目「数式:RecordType.DeveloperName」を作成して対応しようと考えたのですが、上述の「サポートされる入力項目の種別」に数式項目が含まれていないように、サポートされない種別のため、数式項目を作成しても一致条件で指定できませんでした。
項目自動更新で対応できる?
取引先に、レコードタイプ名を表示するようなテキスト項目を作成し、レコードが作成/編集される際にレコードタイプ名を項目自動更新するようなプロセスビルダーを設定しました。テキスト項目なので、一致条件で指定することが可能です。
しかしながら、実行順序の関係だと思うのですが、うまく動作しません。
・重複ルール「作成時/編集時のアクション」でブロックを指定していると、取引先名が重複している場合、エラーが表示されて、作成/編集ができません。
・重複ルール「作成時/編集時のアクション」で許可を指定していると、取引先名が重複している場合、アラート/レポートを指定しても、アラート/レポートが表示されることなく、レコードの作成/編集を実行できてしまいます。
実行順序や重複ルールと項目自動更新の処理について
前述のエラーについて記載がないかヘルプやナレッジ記事を確認しました。
開発者ガイドで重複ルールの実行順序について記載されているページがあり、その内容によると、重複ルールはワークフロー(項目自動更新)の前に処理されるようです。
◇ Salesforce > Developer Documentation > Apex 開発者ガイド > トリガと実行の順序また、重複管理の動作に関するページではこのような記載がありました。
◇ Salesforce > Trailblazer Community > ヘルプ > 重複管理の動作ワークフローの項目自動更新によるレコード更新は、 即時実行かスケジュール実行かを問わず、プロセスを実行した結果、重複チェックが動作せず、重複レコードが作成されます。
以上の内容から、
項目自動更新と重複ルールは相性が悪いらしい
ということがわかりました。
レコードタイプ名をテキスト項目にデフォルト値で指定する
取引先に、レコードタイプ名を表示するようなテキスト項目「レコードタイプテキスト」を作成し、デフォルト値に「$RecordType.Name」と指定しました。
これにより、「レコードタイプテキスト」には、デフォルトでレコードタイプ名が入力されます。
(自動的にレコードタイプは挿入されますが、数式項目ではなくテキスト項目のため、一致条件に使用できます)
一致条件に「レコードタイプテキスト」の完全一致を追加することで、レコードタイプ名が異なる場合には一致と見なさないよう、指定できました。
注意事項
「レコードタイプテキスト」項目はテキスト項目なので、そのままにしておくと変更されてしまう可能性があります。
レイアウトで非表示にするなど、正確なレコードタイプ名を保持するような設定や運用ルールが必要です。
参考
Answersでも同様の質問がされていました。
◇ Salesforce >Answers >Unsolved Questions >
How to include Account recordtype field in Matching rule一致条件にレコードタイプを指定したい、という要望がのIdeaにも上がっています。
◇ Salesforce >IdeaExchange >Ideas >
Include Record Type as a field option for Matching Rules.