[Salesforce]クローズ後の商談をロックしたいときの手取り早い方法

2021.07.08

Hola〜皆さんこんにちは!Salesforceシステム管理者の清水です。

今日は、商談が受注されたらロックをかけたいといった要件が、弊社営業からあがってきたのでその時に、検証したことについて書いてみようと思います。

商談が受注フェーズになったら、ロックをかけたい要件は割と一般的な内容かと思います。少し検索すると入力規則のやり方など書いてるものが見つかります。そこでつまづいたことや、この方が良かったなどを書いてみます。

入力規則でロックをかける

まずググるとこの方法が、一番ヒットすると思います。

私も試しに、商談オブジェクトに以下のような入力規則を書いてみましたが、要件として考えるとこれでも良さそうでした(最初は・・)

特定のプロファイルを除いて、「IsClosed」受注もしくは失注状態になっているフェーズの商談は、指定した項目の編集が一切できないといったものです。

AND(
 PRIORVALUE( IsClosed ),
 NOT($Profile.Id ="00e28000001Ozyb")&&NOT($Profile.Id ="00e5j0000015t82"),
OR(
 ISCHANGED(AccountId),
 ISCHANGED(Name),
 ISCHANGED(InternalComment__c),
 ISCHANGED(LastEventComment__c),
 ISCHANGED(ContractType__c),
 ISCHANGED(IsImportantOpp__c),
 ISCHANGED(Trigger__c),
 ISCHANGED(StageName),
 ISCHANGED(Parent__c),
 ISCHANGED(Probability)
)
)

ただこれ後からわかったのですが、編集させたくない項目をISCHANGEDで指定して、全部書いていく必要がありました。

商談の大多数の項目にロックをかけたい場合、1つづつの項目に対してISCHANGEDと書くのは大変なので、「XX」の項目だけは編集許可するといった書き方に変更はできないのかサポートに確認してみましたが、結論から言うとできないと言うことです。

NOT文の書き方

実際には書き方としては存在していて、例えば以下のようにNOTにして書きます。


NOT(ISCHANGED(Field1__c))


ただ「XXX」の項目のみ編集許可といった「1つの項目以外」という条件であれば、 上記の条件にて指定が可能ですが、「複数の項目以外」という条件は、指定することができないとのことです。

以下のように書いた場合でもダメです。

OR(

 NOT(ISCHANGED(ContractStart__c)),

 NOT(ISCHANGED(ContractEnd__c)), ・・・

 

・「OR」で条件を結んだ場合(どれか1つでも条件に一致するとTrueを返す動作)

例えば項目「ContractStart__c」を変更した場合、「NOT(ISCHANGED(ContractStart__c)),」はFalseになりますが、以降の「NOT(ISCHANGED(ContractEnd__c)),~」がTrueになり、結果エラーとなってしまいます。

 

・「AND」で条件を結んだ場合(すべての条件に一致した場合のみTrueを返す動作)

例えば項目「ContractStart__c」と一緒に、変更させたくない項目を変更した場合、保存が可能となってしまいます。そのほか、「その他の項目」といった表現をする関数の用意もないということです。

結論

入力規則で、商談受注後のロックはかけれるけれど、項目が多数ある場合、制限に引っかかる可能性があって利用が難しいです。

受注したらプロセスビルダーを利用して、レコードタイプを変更する

上記の内容を、弊社でいつもお世話になっている開発ベンダーさんにさらっと話してみました。

株式会社匠BusinessPlace

すると、こんな思いもよらない回答が返ってきました。

「弊社の場合受注フェーズになった段階で、プロセスビルダーを使って、商談のレコードタイプを変更しています」とのこと。

「あ、なるほど」と思いました。これなら項目がいくらあろうが、受注用のページレイアウト上の項目を全部参照権限にしておくだけで済みます、では早速設定してみます。

受注商談用のページレイアウト・レコードタイプを用意

ページレイアウトの準備

プロセスビルダーを設定する前に、準備しておくことがあります。

まずこのように、普段利用している商談のページレイアウトとは別に新しく作成します。

あとはこのように、編集させたくない項目に対して「参照のみ」のチェックをつけていきます。「フェーズ」などいくつかの標準項目は「参照のみ」にチェックできないものもあるので、そういったものだけ入力規則で別途設定します。

レコードタイプの準備

該当のページレイアウトに、受注用に作成したレコードタイプを割り当てします。この時に、各プロファイルに受注商談用のレコードタイプを「使用可能に設定」にチェックしないようにします。

理由は「使用可能」に設定してしまうと、以下のような新規商談レコード作成時やレコードタイプ変更時に、ユーザー側にて受注商談用のレコードタイプが手動で選べてしまうからです。

プロセスビルダーの作成

準備ができたので、プロセスビルダーを利用して受注フェーズになった商談レコードのレコードタイプを、参照のみのレコード対応へ変更する設定を組みます。

まず、条件の1・2番に受注フェーズを指定し、3番に元のレコードタイプのIDを設定します。(受注フェーズが1つしかない場合は、1つだけ設定でいいと思います)

次に、変更したいレコードタイプのIDになるように指定してあげて、レコード更新のアクションを設定します。

「クローズ案件」という名目のチェックボックスを新しく作成し、そちらにチェックも入れておくようにします。理由は後述する入力規則や、動的アクションで利用できるようにしたいからです。

参照の設定ができなかった項目を入力規則で設定する

「フェーズ」などいくつかの標準項目は「参照のみ」にチェックできないものもあるということを先ほど説明しましたが、それらの項目だけ以下のように設定してみました。

AND(
 PRIORVALUE( IsClosed ),
 NOT($Profile.Id ="00e28000001Ozyb"),
OR(
 ISCHANGED(StageName),
 ISCHANGED(RecordTypeId)
),
 NOT(ISCHANGED( CloseOpp__c ))
)

NOT(ISCHANGED( CloseOpp__c )を最初入れずに設定すると、上記のプロセスビルダーと処理がバッティングするのかエラーになってしまったため、入力規則に追加しました。

動的アクションの利用

作成した「クローズ案件」のチェックボックスがOFFになっているときだけ、「削除」ボタンを表示といった方法ができるようになります。

終わりに

検索すると、入力規則での方法が非常に多かったのですが、項目が多数あった場合に使えないと書いている記事が見当たらなかったのでUPしてみました。

どなたかの参考になれば幸いです。