不是主从关系的情况下,参照关系的对象之间用Flow来实现累计汇总字段(積み上げ集計項目)
2023年08月13日
文章浏览:318
在文章中,
【主-详细信息(Master-Detail relationship)】我们统一称为【
主从关系】。
【查找关系(Lookup relationship)】我们统一称为【
参照关系】。


1,什么是累计汇总字段(Roll-Up Summary Fields)(日语:積み上げ集計項目)

累计汇总字段(積み上げ集計項目)我们经常在有【主从关系】的情况下,在主Object中建立累计汇总字段。

累计汇总字段(積み上げ集計項目)在计算子Object的数量,金额等方面特别有用,也很方便。

比如说,我们有一个预算的Object,还有和预算有主从关系的一个业务机会(Opportunities),那么我们就可以用这个累计汇总字段(Roll-Up Summary Fields)来集计每个月的业务机会(Opportunities)的金额。

2,为什么要用Flow来实现累计汇总字段(Roll-Up Summary Fields)

但是如果两个Object之间,没有主从关系,只有【参照关系】的情况下。 

一般来讲,我们会写一些Apex代码,在ApexTrigger里面来实现这个累计汇总的功能。

那么也有同学,可能会有疑问了,如果我们不用Apex代码,我们用标准功能Flow的话,能不能够实现呢?

答案肯定是可以的。还有一个优点,就是参照关系我们可以建多个,但是在一个Object内,主从关系,最多只能建2个。

所以如果我们用了Flow来实现累计汇总字段的话,我们就可以摆脱主从关系数量的限制。

这里我们就来详细讲解一下,用Flow来实现累计汇总字段的功能。

3 怎么用Flow来实现累计汇总字段

点击【NewFlow】之后,首先我们需要选择【Record-Triggered Flow】


在Configure Start中,我们选择子Object,在每次子Object的数据有更改(创建或者更新)的时候,

就会触发这个TriggerFlow。


关于Set Entry Conditions,大家可以按照实际的需要进行更改,我这里就非常暴力地写成True了。


关于Optimize the Flow for,我们学过Trigger都知道,在Trigger里面有Before和After的概念。

在Flow里面,也是类似的。

Fast Field Updates】相当于Before。

Actions and Related Records】相当于After。

设置好了之后,点击【Done】来开始设置我们的Flow。


我们的最终目的是更新主Object的字段,在我们设计Flow之前,我们先进行梳理一下,所有的处理最终要分为几步。

第一步,我们需要将所有的子Object的数据都查询出来。

第二步,把所有的子Object的金额数据进行汇总

第三步,就是把汇总的数据更新到父的Object上面。


第一步,我们需要将所有的子Object的数据都查询出来。

好吧,那么第一步,我们把所有的子数据都查询出来,这样我们来添加一个查询的元素。

选择【Get Records】

在【New Get Records】中,

设置好Label和API Name,我们要把子Object里面的数据给查询出来,所以仍然选择ChildObject。


关于【Filter ChildObject Records】,我们需要查询出拥有相同父ObjectId的数据。


关于【How Many Records to Store】,肯定是要把所有的数据取出来,所以我们选择【All records

关于【How to Store Record Data】,我们只需要汇总预算的金额,所以只需要把【预算金额SalesBudget__c】取出来。

所有查询子Object数据的要素我们已经设置完成,最后点击【Done】结束。

点击Done之后,就是这样的效果。


第二步,把所有的子Object的金额数据进行汇总

因为需要汇总,所以需要添加一个Loop要素,在Loop要素里面,我们可以把所有查询出来的数据进行循环处理。


在【Select Collection Variable】中,选择上一步查询出来的数据。

点击Done,添加完Loop之后,就是下面这样的效果。


现在我们只是添加了一下Loop循环处理元素,第二步还没有完成。

我们需要在这个Loop元素里面,再添加一个Assignment元素才可以。

在Assignment元素里面,我们可以给变量赋值。

在添加Assignment元素之前,我们需要新建一个变量,用来存放累加的预算金额的值。


选择Variables,然后再选择Number的类型。


  现在开始,我们可以点击Loop元素内的圆圈按钮来添加Assignment元素了。

选择Assignment元素。


如下图所示,设置好Variable和Operator,还有Value,就可以点击Done结束了。


效果如下

到这里,第二步:把所有的子Object的金额数据进行汇总,就已经全部结束了。


第三步,就是把汇总的数据更新到父的Object上面。

点击Loop元素之后的圆圈按钮来添加【更新元素】


选择【Update Records】


关于【How to Find Records to Update and Set Their Values】,

我们选择【Specify conditions to identify records, and set fields individually


设置好要更新的Object,那肯定就是和ChildObject有参照关系的ParentObject。

再设置要更新的具体哪条数据。

我们在这里设置ID,设置成当前触发这个Trigger的数据的ParentObject的ID。


最后的最后,最关键的来了。

就是设值

在【Set Field Values for the ParentObject Records】里面,我们ParentObject里面的累计汇总字段。

把存放在MoneyInTotal变量里面的值,更新到SalesBudgetInTotal__c里面去。


最后就是保存和有效化。这个大家都知道的,截图就不放了。

关注 收藏
2023年08月13日

有Record-Triggered Flow之后确实不用再写Apex Trigger了,更是省去了写测试类的时间。

这里提一嘴,依据条件进行权限控制之类的对Object__share的操作也可以用Record-Triggered Flow来做,因为Object__share也是Object__c的子表??。

回复