SalesforceのProcessBuilderで前後の値の違いを判定して値更新する

ProcessBuilderは、カスタムオブジェクトの値に一定の変更があった場合に、ステータス更新を行うなど、値の自動更新と同じようなことがGUIの画面で設定できるため、Salesforceの中でも非常に便利な機能だと思います。

その中で、「ある項目の値が○○から▲▲に変わった場合に、そのオブジェクトのステータス項目を更新する」みたいなことを行う場合は、変更前の値と変更後の値を取得しなければいけませんが、「変更前の値」って、どうとればいいんだろう?と思って、試行錯誤した結果をメモしておきます。

ProcessBuilderで値が変わったことを判断するには?

本題に入る前に、よく使うTipsとして、「値が変わったことを判断のトリガーとして、ステータス更新する」場合にはどうするかですが、下記のようにします。

アクションの実行条件を「式の評価がtrueになる」に設定して、以下のような数式を用います。

AND( ISCHANGED([Account].Mail_Send_Flg__c) ,[Account].Mail_Send_Flg__c ==true)

ISCHANGEDが、値が変更されたかどうかを判定する数式になるので、値の変更があり、項目値が「true」になった場合にアクションが実行されることになるというわけです。

ProcessBuilderで変更前の値を取得するには?

上記の例では、変更前の値は何でもOkでした。とにかく、前後で値が変更されたら、アクションが実行されるので、変更履歴などを残すのに便利な条件式です。

では、前の値が、「02」で、それから「01」に変わった場合にのみメールを送りたいような条件はどうすればいいでしょうか。

これを実現するためには、以下の数式を使えます。Accoutに、ピックリストの項目「Update_Status__c」があると仮定しましょう。

AND( ISPICKVAL(PRIORVALUE([Account].Update_Status__c), ’02’) ,ISPICKVAL([Account].Update_Status__c, ’01’))

PRIORVALUEが、変更前の値を取得できる数式になるので、それを用いて「その値が02だったら」という条件が書けます。

ちなみに、ピックリスト項目の項目値の判定は、「==」ではなく「ISPICKVAL」を用いないと、「数式は無効です: 項目取引先責任者は選択リスト項目です。選択リスト項目は、特定の関数でのみサポートされます。」というエラーになってしまいます。