OA Framework使用Query Region来创建查询,可以创建简单的查询、高级查询和保存用户个性化的查询。query Region有三种构建方式:
1,resultsBasedSearch
OA Framework根据查询结果表格(或HGrid)中定义的可查询的Item自动生成查询面板。OA Framework在用户选择查询按钮后自动根据用户输入的值,生成Where子句,并执行查询。
2,autoCustomizationCriteria
OA Framework根据开发者定义的简单查询和高级查询Region生成查询面板。OA Framework在用户选择查询按钮后,根据用户输入的值,生成Where子句,并执行查询。
利用这种模式可以更改查询项的类型,比如使用LOV、Poplist等,还可以加入结果表(或HGrid)中不存在的查询项目。
3,None
OA Framework根据开发者定义的简单查询和高级查询Region生成查询面板。开发人员需要自己实现视图对象的查询逻辑。这种方式一般用于无法使用query Region所提供的功能的情况。
本文主要介绍在autoCustomizationCriteria模式下如何控制query的查询。比如对于日期的查询一般用区间范围进行查询,而默认情况下,OA Framework生成的Where子句做相等比较。
- 为query Region创建简单查询面板,创建各个查询Item,包括日期从和日期至。
- 为各个查询Item创建SearchMapping,除了日期从和日期至两个查询项。此时除了日期范围,其余项目的查询都已经可用。
- 在query Region所在的Controller类processFormRequest()方法中加入以下代码
OAQueryBean querybean = (OAQueryBean)webBean.findIndexedChildRecursive("QueryRN");
// 判断用户是否选择了查询按钮
if (pageContext.getParameter(querybean.getGoButtonName()) != null)
{
String dateFrom = pageContext.getParameter("SearchDateFrom");
String dateTo = pageContext.getParameter("SearchDateTo");
OAApplicationModule am = pageContext.getApplicationModule(webBean);
Serializable[] params = {dateFrom, dateTo};
am.invokeMethod("bindDateRangeWhereClause", params);
}
4.应用程序模块中方法如下:
public void bindDateRangeWhereClause(String dateFrom, String dateTo)
{
OAViewObject vo = getXxxVO1();
String clause = null;
String joinStr = "";
if (vo.getWhereClause() != null)
{
joinStr = "AND";
}
if ((dateFrom != null) && (!("".equals(dateFrom.trim()))))
{
clause = " RECEIPT_DATE >= :";
whereClause.append(++bindCount);
parameters.addElement(Date.valueOf(dateFrom));
clauseCount++;
}
// 条件:接收日期至
if ((dateTo != null) && (!("".equals(dateTo.trim()))))
{
if (clauseCount > 0)
{
whereClause.append(" AND ");
}
whereClause.append(" RECEIPT_DATE <= :");
whereClause.append(++bindCount);
parameters.addElement(Date.valueOf(dateTo));
clauseCount++;
}