ADF:如何在一个adf table中标示一个view object有从属的detail信息

来源:互联网 发布:软件ico图标 编辑:程序博客网 时间:2024/05/17 03:35

 会有朋友问到,如何可以在以表格形式显示一个数据库表的信息的时候,其中某一个字段是标示从属detail数据是否存在。比如,在部门的表格中,有一个字段是标示是否该部门有员工。

       一般来说,有不少方法可以来实现这样的功能,也可以在一个应用的不从的层面来实现。最快的方法,就是在代表部门的View和代表Employee的View之间,创建一个ViewLink,形成一个master-detail的关系。然后在master一边创建一个transient的属性,然后用groovy表达式来计算从属的detail是否存在。 但这样做的话,对每一条Master的记录,ADF都会去查询其相关的Detail的信息,造成额外的性能开销。并且,由于我们只是需要标示是否有从属的Detail信息,所以用ViewLink就有点画蛇添足,将Detail的信息都查询回来了。

       经过研究,可行的一个方案是在Master的Entity上,追加一个transient的属性。并定义该属性的默认值为一段SQL。然后在ViewObject中添加该属性即可。

截图如下:

首先添加属性并设默认值为:case (select count(*) from employees e where e.department_id = Departments.DEPARTMENT_ID) when 0 then 'N'else 'Y'end

然后在ViewObject中添加该属性


添加完成后,运行AM,可以看到结果


在jdev日志信息里面也可以看到该DepartmentView的查询语句只有一条: SELECT Departments.DEPARTMENT_ID, Departments.DEPARTMENT_NAME, Departments.MANAGER_ID, Departments.LOCATION_ID, (case (select count(*) from employees e where e.department_id = Departments.DEPARTMENT_ID) when 0 then 'N'else 'Y'end) AS INDICATOR FROM DEPARTMENTS Departments