OAF中实现动态LOV
2013-04-14 18:57
127 查看
EBS 10.5.10
介绍
Oracle标准页面上也有使用动态LOV的情况,主要是子在应用Key Flex。代码可参考oracle.apps.ap.oie.framework.kff.webui.KffRegionCO。
但是Oracle标准页面上的动态LOV存在Bug,不能在弹出的LOV查询页面中多次输入条件查询,原因在下面会提及。
不知在R12中,这个Bug是否已经修正。本文所介绍的方法在11.5.10版本下运行正常,而且没有标准动态LOV的Bug,并实际运用在项目上。
要在OAF中动态创建LOV的功能是很复杂的一件事,本文所讲述的动态LOV创建场合用于事先不能知道页面上会有多少个LOV,而且LOV所使用的SQL查询,也是由用户交互而获得的。
思路如下:首先创建一个通用的LOV Region,建立一个查询的视图对象(Select … From Dual),这个LOV并不能查出任何内容,在运行时动态更改视图对象的定义。
1,创建LOV
首先在使用LOV的页面的控制器的processRequest方法中创建一个LOV
需要注意的是动态建立LOV时,不要使用addLovRelations去增加LOV_CRITERIA(criteria item),如果设置了criteria item,
那么LOV就会用原始定义的SQL去拼页面上的值组成SQL查询,而不会使用我们设置的动态SQL去查询。
(顺便提一下,对于不是动态创建的LOV,而需要动态修改LOV对应的视图对象定义的情况,因为LOV基本的对应项必须设置成criteria item,
为了防止LOV的自动查询,可以设置lovMAP的Programmatic Query为True,这样就不会把页面上的值自动加到WHERE子句后查询。)
2,修改视图对象的查询
在LOV的控制器类的processRequest中动态修改视图对象的查询,因为我们屏蔽了LOV的自动查询,所以在processRequest中还必须处理自动查询的情况
(自动查询的情况是因为用户输入了值或之前已经选择了,重新打开LOV),这里不给出具体的代码。在LOV控制器的processFormRequest方法中必须做以下处理,
因为尽管我们更改了视图对象的定义,但是当点查询按钮时,LOV还是按最原始定义的SQL绑定条件来查询,所以这里的操作是不让LOV执行查询,而进入processRequest重新更改视图的定义:
介绍
Oracle标准页面上也有使用动态LOV的情况,主要是子在应用Key Flex。代码可参考oracle.apps.ap.oie.framework.kff.webui.KffRegionCO。
但是Oracle标准页面上的动态LOV存在Bug,不能在弹出的LOV查询页面中多次输入条件查询,原因在下面会提及。
不知在R12中,这个Bug是否已经修正。本文所介绍的方法在11.5.10版本下运行正常,而且没有标准动态LOV的Bug,并实际运用在项目上。
要在OAF中动态创建LOV的功能是很复杂的一件事,本文所讲述的动态LOV创建场合用于事先不能知道页面上会有多少个LOV,而且LOV所使用的SQL查询,也是由用户交互而获得的。
思路如下:首先创建一个通用的LOV Region,建立一个查询的视图对象(Select … From Dual),这个LOV并不能查出任何内容,在运行时动态更改视图对象的定义。
1,创建LOV
首先在使用LOV的页面的控制器的processRequest方法中创建一个LOV
OAMessageLovInputBean lovItem = (OAMessageLovInputBean)createWebBean(pageContext,LOV_TEXT,null ); region.addIndexedChild(lovItem); lovItem.setAttributeValue(REGION_CODE, "/xxx/oracle/apps/cux/lov/webui"); lovItem.setAttributeValue(REGION_APPLICATION_ID, new Integer(pageContext.getResponsibilityApplicationId())); addLovItem.setLovRegion(pageContext,"/xxx/oracle/apps/cux/lov/webui/CommonLovRN"); lovItem.setUnvalidated(false); lovItem.addLovRelations(pageContext,lovItem.getID(),,LOV_RESULT,LOV_REQUIRED_NO); lovItem.setPrompt();
需要注意的是动态建立LOV时,不要使用addLovRelations去增加LOV_CRITERIA(criteria item),如果设置了criteria item,
那么LOV就会用原始定义的SQL去拼页面上的值组成SQL查询,而不会使用我们设置的动态SQL去查询。
(顺便提一下,对于不是动态创建的LOV,而需要动态修改LOV对应的视图对象定义的情况,因为LOV基本的对应项必须设置成criteria item,
为了防止LOV的自动查询,可以设置lovMAP的Programmatic Query为True,这样就不会把页面上的值自动加到WHERE子句后查询。)
2,修改视图对象的查询
在LOV的控制器类的processRequest中动态修改视图对象的查询,因为我们屏蔽了LOV的自动查询,所以在processRequest中还必须处理自动查询的情况
(自动查询的情况是因为用户输入了值或之前已经选择了,重新打开LOV),这里不给出具体的代码。在LOV控制器的processFormRequest方法中必须做以下处理,
因为尽管我们更改了视图对象的定义,但是当点查询按钮时,LOV还是按最原始定义的SQL绑定条件来查询,所以这里的操作是不让LOV执行查询,而进入processRequest重新更改视图的定义:
OAMessageLovInputBean lovItem = (OAMessageLovInputBean)createWebBean(pageContext,LOV_TEXT,null ); region.addIndexedChild(lovItem); lovItem.setAttributeValue(REGION_CODE, "/xxx/oracle/apps/cux/lov/webui"); lovItem.setAttributeValue(REGION_APPLICATION_ID, new Integer(pageContext.getResponsibilityApplicationId())); addLovItem.setLovRegion(pageContext,"/xxx/oracle/apps/cux/lov/webui/CommonLovRN"); lovItem.setUnvalidated(false); lovItem.addLovRelations(pageContext,lovItem.getID(),,LOV_RESULT,LOV_REQUIRED_NO); lovItem.setPrompt();
相关文章推荐
- OAF_开发系列10_实现OAF动态LOV设定
- OAF_开发系列11_实现OAF通过DataBoundValues动态显示表列的左右对齐
- FORM开发实现动态LOV
- OAF_开发系列14_实现OAF代码动态新增控件
- FORM开发实现动态LOV
- FORM开发实现动态LOV
- OAF数据库动态图片的实现
- OAF数据库动态图片的实现
- OAF数据库动态图片的实现
- java实现时间的动态显示
- JDK动态代理的实现及原理
- iOS 动态表情控件视图的实现
- ECharts3 实现数据动态更新3+时间坐标,数据累积
- openresty--基于redis实现一个动态路由
- 仿百度壁纸客户端(五)——实现搜索动画GestureDetector手势识别,动态更新搜索关键字
- [Android学习系列15]下拉刷新列表实现动态加载
- Orancle下的动态游标实现(总结)
- 写MySQL存储过程实现动态执行SQL
- 利用zookeeper的发布/订阅模式实现配置动态变更
- JFinal之旅——Sql 管理与动态生成实现简洁分页