【salesforce】プロセスビルダーで枝番をつける方法
商談における見積、見積における明細など、何でもいいのですが、1対多のリレーションを持つオブジェクトの多の方に枝番をつけるというのはよくある話です。1-1、1-2、1-3みたいな。salesforceが出しているforce.com workbookの中にもapex初学者向けの例題として出てきます。
JP:Force.com workbook - developer.force.com
この説明ではよくわからなかったので、ノンプログラミングで解決してみたいと思います。
まず要件を整理します。
- あるオブジェクト(今回は商談でやります)と参照関係にあるオブジェクト(商談参照関係という名前のカスタムオブジェクト)がひとつ作られるたびにカスタム項目「枝番」に番号が入る。
- 枝番は参照関係のオブジェクトが増えていくごとに1ずつ増加する。
- 参照関係のオブジェクトの枝番の途中が削除された場合は欠番となり、その後に作られたオブジェクトが埋めることがない。
ざっくりこんなかんじでしょうか。
さて作ってみましょう。実は今回はプロセスビルダーのみで、フローは使いません。
まず、親オブジェクトである商談に数値のカスタム項目を作ります。とりあえず名前は枝番最大値とでもしておきます。注意点としてデフォルト値は0にしておいてください。これは裏側で枝番最大値を保有しておくためだけの項目なので、画面に表示させる必要はありません。
そして当然子オブジェクト(商談参照関係)には枝番を入れる数値形式のカスタム項目を用意します。
そしてプロセスビルダーです。作るのは大変シンプルです。
動作は子オブジェクトの作成のみです。更新は含めないでください。
実行は無条件に行います。
そしてルール適用時のアクションは2つです。順番が決まっているのでそのとおりに作ってください。
一つは枝番最大値の更新です。親オブジェクトの方の値を1つ増やします。ただ、全くまっさらでレコードを作ったことないオブジェクトに実装する場合は枝番最大値+1でいいのですが、途中からこれを始めた場合は枝番最大値はnullになっているのでif関数でnullだった場合は0に置き換えるという数式を入れなくてはなりません。
こんな数式ですね。nullだったら0、そうでなかったら最大値の数字をそのまま出して、+1をするというものです。
IF (ISNULL([opportunity_Lookup__c].Opportunity__c.branch_number_max__c), 0, [opportunity_Lookup__c].Opportunity__c.branch_number_max__c) +1
次のアクションは子オブジェクトに枝番を割り当てます。割り当てるのは親オブジェクトは先ほど+1した枝番最大値です。
これだけで、オブジェクトがひとつ作られるたびに枝番がひとつずつ増えていきます。今までapex書かないと出来なかったのが、こんなに簡単にできるのが嬉しいですね。