AM中用代码创建ViewCriteria进行查询
十二月 12, 2009 in Oracle 融合中间件
概述
本文主要描述如何在AM中使用代码动态为某VO的实例创建ViewCriteria并使用该ViewCriteria对该VO的实例进行查询以及该方法的查询结果的注意事项。
实现
1、基于HR Schema的Employees表创建Entity Object,View Object,并创建ApplicationModule,添加该刚创建成功的View Object的实例到AM的Data Model
2、为AM产生其实现类,添加如下代码到刚产生的AM的实现类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 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方法,输入相应参数进行测试,查看控制台打印输出的结果:
1 2 3 4 | 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对象。
详细代码请参考:howtorowiterator.rar
相关文章:
0 responses to AM中用代码创建ViewCriteria进行查询