ある特定の1つの項目以外の項目値を変更できないようにするには、「Not(IsChanged(Field))」を使用すれば実現できるようですね。
IsChanged(Field) 関数
「 IsChanged(Field) 」はSalesforceの数式関数のひとつで、項目の値が以前の値と異なるかどうかを確認し、値が異なる場合は TRUE を、値が等しい場合は FALSE を返します。
つまり、返却値がTRUEの場合は、エラーの対象となり、項目を更新することはできません。
この IsChanged(Field) 関数にNot()関数を組み合わせることで、ある特定の項目以外の値が更新されることを制御することができます。
入力規則の作成例
今回は取引先に「ロックフラグ」というチェックボックスを用意し、以下のような条件で入力規則を作成しました。
- ロックフラグ = Trueの時
- ロックフラグ以外の項目が変更された時
- 新規作成でない時
①かつ②かつ③の場合にエラーメッセージを表示する。
実際の数式はこんな感じになります。
AND関数を使用して、それぞれの条件がすべてTrueだった場合にエラーメッセージを表示するようにしています。
Isnew()は新規レコードかどうかを確認し、新規の場合は TRUE を、新規でない場合は FALSE を返す関数です。
ここではNot( Isnew() )として使用しています。
この記述がないと、ロックフラグをTrueにした状態で取引先を新規作成した際に、エラーが発生してしまいます。
さて、入力規則を設定したところで画面上の確認もしておきましょうか。
上の画像のように、ロックフラグがTrueの状態でその他の項目を更新しようとすると、エラーメッセージが表示されます。
今回が、特定のひとつの項目を対象にしていますが、「Not(IsChanged(Field))」を追加することで複数の項目を対象にすることも可能です。
その場合、この項目とこの項目以外の項目が編集されたらエラーにする、みたいな処理になります。
コメント