2009年2月6日星期五

在ADF中计算页面字段值

概述

本文主要描述在ADF开发中如何根据某些某些字段值计算页面某一其他字段数值。

需求:

hr数据库为例,实现以下需求:

1、实现Jobs表和JobHistory表的Master-Detail关系。

2、在Master部分中,实现字段MaxSalaryMinSalary的汇总。

3Detail部分以Table形式展现,并在Table的最后一列计算该条记录中EmployeeIdDepartmentId的和。

4、在Master部分中,汇总步骤3中所计算出的DetailTable最后一列值。

下面我们创建howtocalculatevalue应用实现以上需求。

实现

1、创建新应用,名为howtocalculatevalue,并基于JobsJobHistory表创建EOVO并将VO及自动生成的ViewLink添加到AM中。创建完成后Model项目应如图所示:

2、由于将在Master部分将有两个汇总字段,因此,在这里为JobsVO添加两个非数据库项,分别为SumSalarySumTestValue,分别用于计算Master部分Salary的汇总以及Detail部分最后一列值的汇总。并修改这两个字段的Updatable属性为Always。并为JobHistoryVO添加一个非数据库项,用于计算每行EmployeeIdDepartmentId的和,也修改。

3、分别为JobsVOJobHistoryVO生成对应的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 = new ArrayList();

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、保存,运行页面。

最终的运行结果:

相关代码请查看:

howtocalculatevalue.rar


0 评论:

发表评论