レコードの削除を制御したい
kazunii
2024/02/14 17:10:56
はじめに
まだまだ、寒い日が続きますね、早く春が来ないかなぁ。。。
今年は、桜の開花が「例年並かそれより早くなりそう」と、最近ニュースで見たのですが、いつもより早くお花見ができそうだなぁと思って、なんだか嬉しくなりました🌸😄🍺
体調を崩しやすい季節ですので、皆さまも暖かくしておすごしください。
さて本題に入りますが、「レコードの削除を制御したい」と、お客様から要望をいただくことが、たまに(いや必ず)あります。
「普段はレコードの作成や削除は自由に行えるが、消してほしくない条件になったレコードは消せない様にしたい」と、言う要望です。
最近は、フローの「カスタムエラー」で制御できるようになっているようですが、以前はその機能が無かったので「基本的に標準機能ではレコードの削除を制御できないんです、要件によっては開発が必要なんです。。。」と、お客様に説明していました。
この方法を知っている事で、お客様への提案の幅が広がるのかなとも思っておりますし、何かの気付きになればなと思いまして書いてみました。
参考:カスタムエラーで主従関係の子レコードがあるときは親レコードを削除させない
レコード削除の恐ろしさ
salesforceは「主従関係」の場合、親レコードを削除すると、その子レコードは、何もアラートを出さずに、サクッとすべて削除されてしまいます。
例えば、取引先を削除すると、紐づくすべての商談が削除されてしまいます。
ちなみに、標準オブジェクトでは、少しだけレコードの削除が制御されていて、成立した商談などががあると、その取引先は削除できないように制御はかかっているようなので、少しは安心ですね♪
レコードを削除した本人も気づかないうちに、関連するレコードまでサクッと消されてしまうのは、怖いですね。。。
集計に利用している、大事なレコードが削除されてしまうと、影響が出てしまいます。。。
ここからは、ユーザには削除権限は与えて、ある条件になるとレコードを削除できない様にする方法をお伝えします。
(ユースケース)
前提:商談には「予算化」のチェックボックスがあり、これにチェックが入っている商談は、会社の予算として集計されている
- 予算化された商談を削除させたくない(商談の削除を制御)
- 予算化された商談を持つ取引先は削除させたくない(取引先の削除を制御)
予算化された商談を削除させたくない
ここでは、予算化されている「商談」レコード自体の、削除を制御する方法を説明します。
取引先と商談の主従関係を利用して、取引先に「積み上げ集計」項目と「入力規則」を作成して課題解決を図ります。
設定内容
(取引先に作成する項目)
- すべての商談件数
- 積み上げ集計 商談の件数
- 予算化された商談件数
- 積み上げ集計 商談の件数
- 条件:予算化にチェックがある
- 予算化された商談削除のチェック
1.商談の削除を検知する
変更前のすべての商談件数 > 変更後のすべての商談件数
2.予算化された商談の減少を検知する
変更前の予算化された商談件数 > 変更後の予算化された商談件数
動作イメージ
予算化された商談のレコードを削除しようとすると、紐づく取引先の入力規則が動作して、エラーメッセージも表示されます。
予算化された商談を持つ取引先は削除させたくない
ここでは、商談の親である「取引先」レコードの削除を制御する方法を説明します。
取引先に「入力規則」の作成と、フローを利用して課題解決を図ります。
また、カスタムエラーを利用した場合の説明も、後ろの方で触れております。
設定内容
(取引先に作成する項目)
- DeleteNG チェックボックス
- 取引先の削除チェック
- DeleteNGにチェックが入っている場合エラーとする
- 取引先の削除チェック
- 開始条件:レコードフロートリガー 取引先、取引先レコードが削除される前
- 処理の流れ:紐づく商談の「予算化」にチェックが入っているものが存在した場合に、取引先の「DeleteNG」にチェックを入れる
取引先を削除しようとすると、フローのレコードの更新で、取引先のDeleteNGにチェックが入いるので、入力規則が動作してレコードの更新できないと言うエラーが出ます。
そのため、レコードの削除は行わまれません。
ただし、システムエラーがそのまま表示されてしまい、操作している人は戸惑ってしまいます。
更に、フローでエラーが出ているため、管理者にエラーが出たことのメールが送信されてしまいます。
カスタムエラーを利用した場合
(作成するフロー)
- 取引先の削除チェック(カスタムエラー利用)
- 開始条件:レコードフロートリガー 取引先、取引先が削除される前
- 処理の流れ:紐づく商談に「予算化」にチェックが入っているものが存在した場合に、エラーを表示させる
カスタムエラーの方が、分かりやすいメッセージが表示されるので、操作している人が戸惑うこともありません。また、フローの処理は、カスタムエラーが出ることで、取引先の削除処理はキャンセルされます。
更に、フローでは本当のエラーが出ているわけではないため、管理者にエラーが出たことのメールは送信されません。
おわりに
今回は、フローのカスタムエラーを利用しない、標準機能で「レコードの削除を制御する方法」を説明しました。
- 予算化された商談を削除させたくない(商談の削除を制御)
- 予算化された商談を持つ取引先は削除させたくない(取引先の削除を制御)
salesforceのバージョンアップにより、どんどんできることが広がっていく事は、嬉しいです。
その反面、今まで開発者が行っていた事も、私達アドミニストレータが担当することになるので、なんだか大変な気もします。
ただ、今まで制限があって諦めていたことが、プログラムを書かなくても設定できる様になるのは、技術者のハシクレとしては、やっぱり嬉しいんですよねぇ♪
ご活用ください。
コメント