2009年4月17日星期五

复合LOV的实现


概述

在实际应用中,经常会用到对于同一个属性使用不同LOV,本技巧主要介绍了对于同一属性使用多个LOV的方法,以及不同LOV之间切换的方法。
场景:
1、 定义新员工时,根据员工学历的不同,使用不同LOV选择起薪范围
2、 根据职位不同,LOV中显示的内容也不同或需使用不同LOV显示内容
3、 其他应用场景
下面我们以EmployeesVO中的DepartmentID属性为例,根据员工Salary的不同为该属性添加使用不同LOV,以显示不同内容。

实现
1、创建新应用后,创建Entity Object:EmployeesEO,该EO基于数据库中的Employees表,可以看到其关联(EmpManagerFkAssoc)被自动创建。
2、创建基于1中创建的EO的View Object:EmployeesVO。
3、创建名为EmpManagerFkLink的View Link,在“Selected Source Attribute”和“Selected Destination Attribute”中都选择EmployeesVO中的EmpManagerFkAssoc,点击“OK”完成。



4、创建DepartmentId的LOV数据源VO(DepartmentLOV),并设置DepartmentId属性为Key Attibute,其SQL如下:
SELECT Departments.DEPARTMENT_ID,
Departments.DEPARTMENT_NAME,
Departments.MANAGER_ID,
Departments.LOCATION_ID
FROM DEPARTMENTS Departments


5、为EmployeesVO中的DepartmentId属性添加两个LOV,其List Data Source均选择为前面创建的DepartmentsLOV(DepartmentsLOV1),List Attribute为DepartmentId,List Return Values使用默认,即DepartmentId-DepartmentId,在UI Hints中设置不同的显示项,分别如下:
LOV_DepartmentId:



LOV_DepartmentId1:



6、为DepartmentId属性添加LOV Swicher,单击选中该属性,在“List of Values: DepartmentId”中设置List Type UI Hint为Input Text with List of Values,在List of Values Switcher点击新建,命名为lovSwitcher,在“Edit Attribute: lovSwitcher”面板中选择Value Type为Expression,添加Value内容,即Groovy脚本,以判断使用哪个LOV,在这里根据Salary进行判定(若Salary>10000,使用LOV_DepartmentId1,若Salary<=10000,使用LOV_DepartmentId)。
Value:
if(Salary != null && (new oracle.jbo.domain.Number(Salary)).intValue() > 10000)
{
return 'LOV_DepartmentId1'
}
return 'LOV_DepartmentId'



7、新建页面,命名为Main,为方便扩展功能,产生出了其Backing Scope的Managed Bean。
7.1、选中并点开“Data Controls”中“AppModuleDataControl”内的EmployeesVO2(与AM中名字相同,不一定为该名),继续点击“Named Criteria”,将All Queriable Attributes拖动到页面中,选择ADF Query Panel with Table,根据需要调整显示属性,完成后确定。



7.2、在“Structure”面板中选择af:table – redId1,双击打开其属性编辑器,选择“Columns”项设置所有属性(除lovSwitcher)的“Component To Use”为输入类型控件。
7.3、保存设置,运行页面。


最终运行结果:
在Search区中在Salary选项中填入9999(<10000),DepartmentId此时使用的LOV是LOV_DepartmentId,显示DepartmentId和DepartmentName两项。


更改Salary为10001,重新查看DepartmentId,发现其显示列数分别为DepartmentId,DepartmentName与ManageId,使用的LOV为LOV_DepartmentId1。


清空Search中内容,使用默认空值进行查询,在Table中继续验证。


相关代码请查看:
howtomultiplelov.rar

0 评论:

发表评论