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

相关文章:

  1. 通过Accessor来取得相关的实体
  2. 在ADF中使用AlternateKey进行查询
  3. 在Groovy中调用ViewImpl与ViewRowImpl的方法
  4. 为Backingbean创建基类

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

Leave a reply

You must be logged in to post a comment.