フローで積み上げ集計をやってみた(2-2)

前回の続きで参照関係のオブジェクトで積み上げ集計をフローでやってみます。

前回の内容

処理を作成する

前回はリソースを作成しましたので、実際のフロー処理を作成します。

レコードの取得

プロセスビルダーを起動した子オブジェクトと同じ親をもつレコードを取得します。

  1. 要素からレコードを取得をパレット上にもっていきます
  2. 設定画面が開くので以下のような設定をします
    • 表示ラベル:親オブジェクトが同じ子オブジェクトを取得
    • API参照名:getChildren(好きな名前にしてください)
    • このオブジェクトのレコードを取得:子オブジェクト
    • 子オブジェクトレコードを絞り込み
      • 条件の要件:条件を満たしている
      • 項目:Parent__c
      • 演算子次の文字列と一致する
      • 値:{!varParentId}
      • レコードコレクション変数:{!listChildren}
      • 変数に保存する子オブジェクトを選択:IDSales__c(売上)を選択

f:id:sweaty:20191022181109g:plain
レコードを取得

ループ処理

取得したレコードを1件ずつ取り出すループ処理を作成します

  1. 要素からループをパレット上にもっていきます
  2. 設定画面が開くので以下のような設定をします
    • 表示ラベル:子オブジェクトをループ
    • API参照名:loopChildren
    • コレクション変数:{!listChildren}
    • ループ変数:{!child}

listChildrenに複数の子オブジェクトが格納されるので、1件ずつ取り出してchildに割り当てて処理をします。

f:id:sweaty:20191022183406g:plain
ループ

設定したら、レコードを取得からループ処理へ矢印をつなげて保存してください。

割り当て

先に設定したvarTotalに売上を足し込んでいきます

  1. 要素から割り当てをパレット上にもっていきます
  2. 設定画面が開くので以下のような設定をします
    • 表示ラベル:合計を算出
    • API参照名:calculateTotal
    • 変数値を設定
      • 変数:{!varTotal}
      • 演算子追加
      • 値:{!child.Sales__c}

f:id:sweaty:20191022185343g:plain
割り当て

設定が完了したら、ループから割り当てへ矢印をつなげます。 そのときにループコネクタを選択画面が表示されるので、コレクション内の項目ごとを選択して完了を選択し、割り当てからループに矢印をもどします。

f:id:sweaty:20191022195012g:plain
ループコネクタ

親レコードを更新

最後に親レコードにvarTotalで計算した合計値を更新します。

  1. 要素からレコードを更新をパレット上にもっていきます
  2. 以下の設定をします。
    • 表示ラベル:親レコードを更新
    • API参照名:updateParent
    • 更新するレコードを検索してその値を設定する方法:レコードを識別する条件を指定し、項目を個別に設定
    • 親オブジェクトレコードを絞り込み
      • 条件の要件:条件を満たしている
      • 項目:Id
      • 演算子次の文字列と一致する
      • 値:{!varParentId}
    • 親オブジェクトレコードの項目値を設定
      • 項目:sum__c
      • 値:{!varTotal}

設定したらループから矢印をつなげます

このときは自動的にループコネクタが選択された状態になります。

f:id:sweaty:20191022191601g:plain
レコードを更新

有効化

これまでの設定をすべて保存したら有効化ボタンを押してください

プロセスビルダーの設定

最後にフローを呼び出すプロセスビルダーを設定します。

子レコードが作成されたときに呼び出すようにします。
※売上が空欄の場合だったり、変更されたときなど実運用では考慮することがありますが今回は単純に作成されたときという条件で呼び出します。

  • ルール適用時のアクション種別でフローを選択
  • フローで作成したものを選択
  • フロー変数にvarParentIdを選択(これしか選べないはずです)
  • 種別を項目を参照にしてparent__cを選択してください

f:id:sweaty:20191022193359p:plain
アクション

最後にプロセスビルダーを有効化してください。

動作確認

実際に動作確認です。
キャッシュが残って更新がきれいにはいかなかったですが親オブジェクトの項目が子オブジェクトによって更新されたことが確認できました。

f:id:sweaty:20191022200642g:plain
検証結果

まとめ

フローを使うとプログラムがかけなくても複雑な処理を実装することができます。
ただしある程度の知識と慣れが必要だと思いますので、かんたんなものから始めてステップアップするのが良さそうです。
今回は使用しませんでしたが、決定という要素を使うことで条件分岐も可能となりより複雑な処理ができます。

今回の内容であればプロセスビルダーだけでも実装は可能ですが、一例として。。