OAF实现客户化查询
在OAF中,存在标准的查询面板,但是标准的查询只能实现基础、简单的查询,所以在真正的项目当中,一般情况下都是使用自己开发的客户化查询,开发客户化查询的一般步骤如下:
1. 建立页面PG,修改Region
| ID | PageLayoutRN |
| Region Style | PageLayout |
| AM Definition | RootAM |
| Window Title | xxx |
| Title | xxx |
2. 在PageLayoutRN下建立Region,属性如下:
| ID | MessageComponentLayoutRN |
| Region Style | MessageComponentLayout |
| Width | 100% |
| Rows | 2 |
| Columns | 6 |
3. 在MessageComponentLayoutRN下新建搜索项(lov形式)
| ID | SearchProject |
| Item Style | MessageLovInput |
| External LOV | XXX |
| Prompt | XXX |
这里的External LOV是来源于lov的region。
4.建立LOV的页面,建立一个listOfValues的region
| Region Style | ListOfValues |
| Scope | Public |
| AM Definition | LovAM |
5. 基于vo,建立resultTable,ProjectId项的属性
| ID | ProjectId |
| Item Style | Formvalue |
6. 在建立的lov组件下建立map映射
| ID | ProjectNameMap |
| LOV Region Item | ProjectName |
| Return Item | SearchProject |
| Criteria Item | SerachProject |
7.下拉框形式组件
| ID | SearchProjectPhase |
| Item Style | MessageChoice |
| Picklist View Definition | cux.oracle.apps.pa.lov.server.ProjectPhaseVO |
| Picklist Display Attribute | ProjectStatusName |
| Picklist Value Attribute | ProjectStatusName |
| Prmpt |
8. 建立ResultTable
| Width | 100% |
9. 在messageComponentLayout Components下添加footer,在region下添加query按钮
| ID | Query |
| Item Style | SubmitButton |
| Prompt | 搜索(&S) |
10.继续添加SpaceBean
| ID | SpacerBean |
| Item Style | Spacer |
| Width | 5 |
11. 继续添加cancel按钮
| ID | Cancel |
| Item Style | SubmitButton |
| Disable Client Side Validation | True |
| Prompt | 清除(&C) |
上面的步骤是建立好一个搜索面板,下面编写搜索逻辑代码。
首先在co中捕捉点击搜索按钮的事件:
[java] view plaincopy
- public void processFormRequest(OAPageContext pageContext,
- OAWebBean webBean) {
- super.processFormRequest(pageContext, webBean);
- OAApplicationModule am = pageContext.getApplicationModule(webBean);
- if (pageContext.getParameter(“Cancel”) != null) {
- String[] webBeanNames =
- { ”SearchProject”, ”SearchCustomer”, ”SearchAreaCode”,
- ”SearchWindCode”, ”SearchMachineModel”, ”SearchProjectPhase”,
- ”SearchReportStartDate”, ”SearchReportEndDate”,
- ”SearchProjectManager”, ”SearchProjectId”, ”SearchPartyId” };
- WebBeanUtil.resetWebBean(pageContext, webBean, webBeanNames);
- } else if (pageContext.getParameter(“Query”) != null) {
- String searchProjectId =
- pageContext.getParameter(“SearchProjectId”);
- String searchPartyId = pageContext.getParameter(“SearchPartyId”);
- String searchAreaCode = pageContext.getParameter(“SearchAreaCode”);
- String searchWindCode = pageContext.getParameter(“SearchWindCode”);
- String searchMachineModel =
- pageContext.getParameter(“SearchMachineModel”);
- String searchProjectPhase =
- pageContext.getParameter(“SearchProjectPhase”);
- Date searchReportStartDate =
- DateUtil.toDate(pageContext, pageContext.getParameter(“SearchReportStartDate”));
- Date searchReportEndDate =
- DateUtil.toDate(pageContext, pageContext.getParameter(“SearchReportEndDate”));
- String searchProjectManager =
- pageContext.getParameter(“SearchProjectManager”);
- Serializable[] params =
- { searchProjectId, searchPartyId, searchAreaCode, searchWindCode,
- searchMachineModel, searchProjectPhase, searchReportStartDate,
- searchReportEndDate, searchProjectManager };
- Class[] classes =
- { String.class, String.class, String.class, String.class,
- String.class, String.class, Date.class, Date.class,
- String.class };
- am.invokeMethod(“queryStatusReport”, params, classes);
- }
- }
搜索逻辑代码:
[java] view plaincopy
- public void queryStatusReport(String searchProjectId,
- String searchPartyId,
- String searchAreaCode,
- String searchWindCode,
- String searchMachineModel,
- String searchProjectPhase,
- Date searchReportStartDate,
- Date searchReportEndDate,
- String searchProjectManager)
- {
- StatusReportVOImpl vo = getStatusReportVO1();
- vo.setWhereClause(null);
- vo.setWhereClauseParams(null);
- int bindCount = 0;
- StringBuffer whereClause =new StringBuffer(400);
- whereClause.append(“ 1=1″);
- Vector params = new Vector(9);
- if (searchProjectId!=null && !(“”.equals(searchProjectId))){
- whereClause.append(“ AND project_id = :”);
- whereClause.append(++bindCount);
- params.addElement(searchProjectId);
- }
- if (searchPartyId!=null && !(“”.equals(searchPartyId))){
- whereClause.append(“ AND party_id = :”);
- whereClause.append(++bindCount);
- params.addElement(searchPartyId);
- }
- if (searchAreaCode!=null && !(“”.equals(searchAreaCode))){
- whereClause.append(“ AND area_code = :”);
- whereClause.append(++bindCount);
- params.addElement(searchAreaCode);
- }
- if (searchWindCode!=null && !(“”.equals(searchWindCode))){
- whereClause.append(“ AND wind_code = :”);
- whereClause.append(++bindCount);
- params.addElement(searchWindCode);
- }
- if (searchMachineModel!=null && !(“”.equals(searchMachineModel))){
- whereClause.append(“ AND cux_pa_util_pkg.get_pa_machine_model(project_id,:”);
- whereClause.append(++bindCount);
- whereClause.append(“) = ’Y'”);
- params.addElement(searchMachineModel);
- }
- if (searchProjectPhase!=null && !(“”.equals(searchProjectPhase))){
- whereClause.append(“ AND current_phase_name = :”);
- whereClause.append(++bindCount);
- params.addElement(searchProjectPhase);
- }
- if (searchReportStartDate!=null && !(“”.equals(searchReportStartDate))){
- whereClause.append(“ AND report_start_date >= :”);
- whereClause.append(++bindCount);
- params.addElement(searchReportStartDate);
- }
- if (searchReportEndDate!=null && !(“”.equals(searchReportEndDate))){
- whereClause.append(“ AND report_start_date <= :”);
- whereClause.append(++bindCount);
- params.addElement(searchReportEndDate);
- }
- if (searchProjectManager!=null && !(“”.equals(searchProjectManager))){
- whereClause.append(“ AND project_manager = :”);
- whereClause.append(++bindCount);
- params.addElement(searchProjectManager);
- }
- if (bindCount >0){
- vo.setWhereClause(whereClause.toString());
- Object[] bindParams = new Object[bindCount];
- params.copyInto(bindParams);
- vo.setWhereClauseParams(bindParams);
- }
- vo.executeQuery();
- }
结果如下