AM中用代码创建ViewCriteria进行查询

 

概述 
    本文主要描述如何在AM中使用代码动态为某VO的实例创建ViewCriteria并使用该ViewCriteria对该VO的实例进行查询以及该方法的查询结果的注意事项。

实现 
1、基于HR Schema的Employees表创建Entity Object,View Object,并创建ApplicationModule,添加该刚创建成功的View Object的实例到AM的Data Model 
2、为AM产生其实现类,添加如下代码到刚产生的AM的实现类

private RowIterator findRowIteratorByViewCriteria(ViewObject viewObject, ViewCriteria viewCriteria) { RowIterator rowIterator = viewObject.findByViewCriteria(viewCriteria, -1, ViewObject.QUERY_MODE_SCAN_DATABASE_TABLES); if (rowIterator.first() != null) { return rowIterator; } else { return null; } } public Row findEmployeeByEmailCriteria(String email) { ViewObjectImpl employeesViewImpl = this.getEmployeesView1(); ViewCriteria viewCriteria = employeesViewImpl.createViewCriteria(); ViewCriteriaRow viewCriteriaRow = viewCriteria.createViewCriteriaRow(); viewCriteriaRow.setAttribute("Email", "=" + email); viewCriteria.add(viewCriteriaRow); employeesViewImpl.applyViewCriteria(viewCriteria); RowIterator rowIterator = this.findRowIteratorByViewCriteria(employeesViewImpl, viewCriteria); Row row = null; while (rowIterator.hasNext()) { System.out.println("rowIterator hasNext"); row = rowIterator.next(); } if ((rowIterator.getAllRowsInRange()).length != 0) { System.out.println(rowIterator.first().getAttribute("EmployeeId")); } return row; } 

 

3、添加findEmployeeByEmailCriteria到Cilent Interface

 

4、运行AM,使用业务组件浏览器进行进行测试

5、选择刚发布到Client Interface的findEmployeeByEmailCriteria方法,输入相应参数进行测试,查看控制台打印输出的结果:

Diagnostics: (Properties (re)loaded) Routing diagnostics to standard output (use -Djbo.debugoutput=silent to remove) 2009-12-12 16:33:25 oracle.jbo.jbotester.MainFrame main 信息: BC4J Tester started. 100 

注:通过上面的结果可以看到,并未输出“rowIterator hasNext”字符串,但取到的rowIterator中Row的元素个数却为1,经过多次验证发现,使用该方法查询得到的viewIterator已经执行过一次viewIterator.next(),即若对该viewIterator调用.next()方法时,实际上是取的该 viewIterator的第二个Row对象。

 

本文转自Oracle Seeker:http://oracleseeker.com/2009/12/12/adf_am_viewcriteria_rowiterator/

 

 

 

你可能感兴趣的:(object,properties,null,email,interface,Diagnostics)