OutSystems的初学者在做统计功能时可能会遇到OutSystems 实现带条件聚合功能这个问题,本文适合OutSystems的初学开发者,以及从java或者其它语言转到OutSystems开发的朋友。不了解OutSystems的朋友只需要知道,它是国外的一个低代码平台,具体的OutSystems官网有介绍,这里不啰嗦。
当我们使用OutSystems开发统计功能时,如果你有后台开发经验,通常都是使用sql或者orm给你实现根据某些条件聚合数据,换言之如果用sql来写的话,就是类似 sum(case when…) 这种写法。
OutSystems实现带条件聚合功能
假如我们有如下结构的一张Transaction表:
再有一张交易类型的表,这张表里面设定了系统支持的交易类型,当然这个例子来源于OutSystems官方Demo,感兴趣的朋友可以自己找到。你可以理解为左图是TransactionType(交易类型)表设计,右图是该表的数据。
在实现聚合统计功能时,或多或少会遇到根据某些条件进行聚合计算,例如统计交易类型为Interest的Amount,那么我们使用SQL来写的话,大概逻辑如下:
SELECT AccountId, Sum(convert(decimal(37,8), (CASE WHEN TransactionType = 6 THEN Amount ELSE 0 END))) Amount FROM Transaction WHERE -- Other Filter,其它筛选条件 GROUP BY AccountId
以上是很常见的一个功能,真实的OutSystems项目中,如果要在一个Action里面返回所需要的统计数据是如何做的呢?
这里简单说一下,尽管OutSystems是一个低代码平台,可以直接在页面上(Screen)上拖一个Aggregate来实现相应的功能,但对于有素养的开发人员来说这种做法并不可取,因为需要分层处理,想想你以前刚开始学习开发的时候,使用三层架构来搭建项目的场景,就是这个理。
第一步:创建统计数据Structure
可能有些开发者对Structure这个概念有点陌生,Structure是OutSystems里面用于封装自定义数据的一种数据类型,你可以理解为数据迁移对象DTO,或者一个class。它有Attribute,类似class的属性。public设置为Yes后,其它Module也可以使用了,类似使用 .net 写一个 class,将其设置为public。
第二步:创建统计Action
这个action我们需要放到对应的位置(层),你可以理解为使用C#/.net 写的类库公开方法,这个方法返回相应的数据(这里返回的是上面定义的Structure集合),缺点就是不支持泛型了。
第三步:实现Action里面的内容
在设计窗口里面这里操作的是最关键的,先拖一个Aggregate到设计窗口,然后指定数据源为Transaction。如下左图所示,指定数据源后(这时什么都没有做),你可以看到数据,这是OutSystems自动从数据库加载了部分数据显示在这里,如下右图所示。
接下来我们在这个Aggregate上添加计算列,然后再将其聚合就实现了本文的目的。详细的操作步骤,如下图所示:
完成上面的步骤后,还差最后一步才能正确的生成 sum(case when)这种带条件的统计,那是如何做的呢?将鼠标放到添加的新列上,然后点击右键,会看到下图的Group by SubAmount弹出界面,选择Sum即可,请看下左图,右图是添加sum聚合后出现的结果数据。
最后再添加Group 列,本例中需要按AccountId进行group by,具体操作如下左图所示,添加完毕后,如下右图所示,可见已经正确的实现了本文想要的功能。
最后再给返回值赋值即可,如下图所示:
写在最后
通过本文详细的介绍,或许你明白了如何写一个action,并且完成OutSystems 实现带条件聚合功能,整个过程完全零SQL实现,是不是这个低代码平台很好玩呢?