本文主要描述在ADF开发中如何根据某些某些字段值计算页面某一其他字段数值。
需求:
以hr数据库为例,实现以下需求:
1、实现Jobs表和JobHistory表的Master-Detail关系。
2、在Master部分中,实现字段MaxSalary和MinSalary的汇总。
3、Detail部分以Table形式展现,并在Table的最后一列计算该条记录中EmployeeId和DepartmentId的和。
4、在Master部分中,汇总步骤3中所计算出的Detail中Table最后一列值。
下面我们创建howtocalculatevalue应用实现以上需求。
实现
1、创建新应用,名为howtocalculatevalue,并基于Jobs和JobHistory表创建EO,VO并将VO及自动生成的ViewLink添加到AM中。创建完成后Model项目应如图所示:
2、由于将在Master部分将有两个汇总字段,因此,在这里为JobsVO添加两个非数据库项,分别为SumSalary和SumTestValue,分别用于计算Master部分Salary的汇总以及Detail部分最后一列值的汇总。并修改这两个字段的Updatable属性为Always。并为JobHistoryVO添加一个非数据库项,用于计算每行EmployeeId和DepartmentId的和,也修改。
3、分别为JobsVO和JobHistoryVO生成对应的Java类。
4、打开JobHistoryVORowImpl.java,修改getTestValue方法如下:
public Number getTestValue() { Number value = this.getEmployeeId().add(this.getDepartmentId()); return value; } |
5、打开JobsVORowImpl.java,分别修改getSalary方法和getSumTestValue方法:
public Number getSumSalary() { List l.add(this.getMaxSalary()); l.add(this.getMinSalary()); for (int i = 0; i <> if (l.get(i) == null) { l.set(i, new Number(0)); } } Number value = new Number(); for (int i = 1; i <> value = l.get(i).add(l.get(i - 1)); } return value; } public Number getSumTestValue() { RowIterator ri = this.getJobHistoryVO(); Number value = new Number(0); while (ri.hasNext()) { value = value.add((Number)ri.next().getAttribute("TestValue")); } return value; } |
6、新建页面,合理设置页面内显示属性的PPR,具体为:
Auto Submit:MinSalary, MaxSalary,EmployeeId,DepartmentId,TestValue
Partial Trigger:SumSalary(MinSalary,MaxSalary)
TestValue(EmployeeId,DepartmentId)
SumTestValue(TestValue)
注:括号内表示为括号前字段的PartialTrigger内应该设置的内容。
7、保存,运行页面。
最终的运行结果:
相关代码请查看:
0 评论:
发表评论