2022.07.25

Salesforceの必須項目について

はじめに

今回はSalesforceの必須項目についていくつか検証を行いました。

Salesforceでは、データの品質を高めるために必須項目を設定することができます。
設定することでユーザがSalesforceにデータを入力する際に、項目が空の状態でデータが作成されることを防げます。

ヘルプによると、項目を必須にする方法は次の3つです。
・項目レベル要件
・ページレイアウト
・入力規則要件

https://help.salesforce.com/s/articleView?id=000323820&type=1


ただしこの方法は標準機能内で実現できる方法であり、フローの利用あるいはApexクラスでの制御、VisualforceとLightning Web ComponentではJavaScriptで制御することも可能です。

今回は(個人的に)違いが分かりにくい、項目レベル要件とページレイアウトについて比較してみます。またこの記事では前者を「項目の必須」、後者を「ページレイアウトの必須」と呼ぶことにします。

設定箇所

まず設定をする場所の違いです。
どちらもオブジェクトマネージャーで設定することに変わりはありません。

項目の必須は項目とリレーション→項目名→編集→一般的なオプションセクション内の必須項目で設定を行います。

一方ページレイアウトの必須はページレイアウト→ページレイアウト名→項目の歯車マークより表示した項目プロパティ内で設定を行います。

また共通点としては、どちらの設定方法もレコードが保存されるタイミングで評価される点があげられます。

新規作成

次に実際にレコードを新規作成する時の動きを確認します。
検証用に「項目の必須検証」(API参照名 : vertification01)と「ページレイアウトの必須検証」(API参照名 : vertification02)という2つの項目を作成しました。
「項目の必須検証」は項目名が示すように項目の必須にチェックを付けています。「ページレイアウトの必須検証」も同様にページレイアウトの必須にチェックを付けています。

はじめに画面上からレコードの新規作成を行います。またページレイアウトは先ほど必須項目のチェックを付けたものを使用しています。
どちらも値が空では画像のようにエラーメッセージが出力され、保存ができません。

続いて「項目の必須検証」のみ値を入力し、「ページレイアウトの必須検証」は値が空の状態で保存をクリックしましたが、同様のエラーになり保存ができません
 また「項目の必須検証」、「ページレイアウトの必須検証」どちらも値を入力した場合はもちろん保存が成功します。
続いてData loaderでレコードを新規作成してみます。
用意したデータは以下の通りです。
vertification01,vertification02
,
test1,
test2,test2
insertRecord.csv
1行目は項目のAPI参照名を指しています。
vertification01は「項目の必須検証」、vertification02は「ページレイアウトの必須検証」です。
また2行目から4行目は挿入するレコードです。2行目はどちらの項目も値が空、3行目は「ページレイアウトの必須検証」のみ値が空、4行目はどちらの項目にも値が入っています。

これらのデータをインポートすると2行目のみ挿入が失敗し、3,4行目は挿入が成功します。
// error
"VERTIFICATION01","VERTIFICATION02","ERROR"
"","","値を入力してください: [vertification01__c]"

// success
"ID","VERTIFICATION01","VERTIFICATION02","STATUS"
"a092x00000K3izpAAB","test1","","Item Created"
"a092x00000K3izqAAB","test2","test2","Item Created"
errorAndSuccessLog
このことからページレイアウトの必須はあくまでも、画面上からレコードを保存する時のみの制約ということが分かりました。

項目の値の削除

続いて項目の値の削除について検証を行います。
はじめに画面上から項目の値を削除します。これも新規作成時と同様に、エラーとなり保存ができません。

続いては少し趣向を変えてフローにて項目の値の削除を行います。
簡単に次のフローを作成しました。

「項目の必須検証」、「ページレイアウトの必須検証」のどちらの値も削除するフローです。
エラーになる場合は画面上にエラーメッセージを出力するよう工夫をしています。

結果はフローでも項目の値が削除ができません。

ここで削除する項目の値を「ページレイアウトの必須検証」のみにして再度フローを実行します。

すると今回は項目の値の削除に成功しました。

以上の検証より項目の値を削除する場合も、ページレイアウトの必須はあくまでも画面上の制約であり、フローなど画面以外から操作は制約の対象外ということが分かりました。

既存レコードがある状態での必須設定

最後の検証として、項目の値が空のときにこれらの必須項目設定を行った場合にどのような動きになるのかを行います。

あらかじめこれまで設定していた項目の必須チェック、ページレイアウトの必須チェックどちらも外しどちらの項目の値も空で保存しておきます。

この状態で冒頭で行ったように、項目の必須とページレイアウトの必須にチェックを付けます。

結果は特段エラーも起きることなく設定ができます。
しかしこの状態でレコードを編集しようとすると、項目の値が空である旨のエラーメッセージが表示されます。

以上のことから、既にレコードがある状態で項目の必須をかけたとしても、設定自体は可能。しかし既存レコードで値が空の項目はそのまま値が空ということが分かりました。

まとめ

以上の通り、いくつか検証を行いました。

ページレイアウトの必須は、プロファイルと組み合わせることが可能です。
これによって、あるプロファイルでは入力を必須としながらも、他のプロファイルでは任意の項目にするといった制御が可能です。

一方項目の必須は、どんなユーザーが入力しても項目の値が空で保存されることを許可しません。
フロー、トリガー、バッチなどでシステム的にレコードを作成する場合でも同様です。
そのためシステム的に必ず必要な項目であったり、外部システムとの連携のために制約を付けたい時などは特に有効です。

また今回の記事では触れませんでしたが、特定の条件のときだけ入力の必須制御を行いたいという時には入力規則が有用です。
加えて少々力技になりますが、VisualforceやLightning Web ComponentではJavaScriptを使用すれば、レコードの保存のタイミング以外での制御も可能です。

使用する状況によって最適な方法で必須項目を設定し、データの品質を高めましょう!!
38 件
     
  • banner
  • banner

関連する記事