You are browsing the archive for OA Framework.

Oracle EBS环境下查找数据源(OAF篇)

八月 12, 2009 in Oracle EBS二次开发

在OAF页面的查找后台的数据源相对于在Form中显得更加麻烦,同时也无法像Form中那样能够较为准确的定位,但是也能够查找出大部分的内容。

本文介绍如何使用OAF提供的诊断功能来快速查找OAF页面对应的数据库对象:

  1. 关于本页功能(About this Page)
  2. SQL Trace功能

 

Read the rest of this entry →

解析OAF页面元数据结构

八月 11, 2009 in Oracle EBS二次开发

在 Oracle E-Business Suite的二次开发中,基于OAF的开发在JDeveloper OA Extension中进行,完成后使用XMLImporter工具导入页面定义到数据库中,

之后上传相关的Java Class文件到JAVA_TOP下便可以使用OAF应用了,下面我们来看看OAF的页面导入数据库中发生了什么?

下面以采购订单类型定义页面为例来进行剖析。

Read the rest of this entry →

重新编译EBS R12的JSP页面

八月 5, 2009 in Oracle EBS二次开发

Oracle EBS 12应用中的所有JSP页面都预先编译到$OAD_TOP/_pages目录下,如果需要清除Cache的JSP,则需要删除此目录下的文件,然后从新进行编译。 

cd $FND_TOP/patch/115/bin
./ojspCompile.pl –compile –flush -p 2

下面是一个系统编译的日志

[appl02@ebs001 bin]$ ./ojspCompile.pl –compile –flush -p 2
logfile set: /d02/inst/apps/VIS02_ebs006/logs/appl/rgf/ojsp/ojspc_error.log
starting…(compiling all)
using 10i internal ojsp ver: 10
synchronizing dependency file:
  loading deplist…8048
  enumerating jsps…8048
  updating dependency…0
initializing compilation:
  eliminating children…5979 (-2069)
translating and compiling:
  translating jsps…5979/5979 in 3m42s                 
  compiling jsps…5979/5979 in 5m53s                
Finished!

 

OAF中如何更改query的默认查询

十二月 20, 2008 in Oracle EBS二次开发

 

 

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子句做相等比较。

  1. 为query Region创建简单查询面板,创建各个查询Item,包括日期从和日期至。
  2. 为各个查询Item创建SearchMapping,除了日期从和日期至两个查询项。此时除了日期范围,其余项目的查询都已经可用。
  3. 在query Region所在的Controller类processFormRequest()方法中加入以下代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    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. 应用程序模块中方法如下:
    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
    
    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++;
    }

 

 

OAF中如何新开一个窗口

十二月 20, 2008 in Oracle EBS二次开发

 

 

OAF页面要新开窗口,可以在带有导航功能的Item,如link和button(非提交按钮),指定Target Frame属性为”_blank“,就可以新开窗口打开Destination URI属性指定的路径。

如果用户希望新开的窗口能隐藏地址栏、工具栏、菜单栏或者想控制窗口大小,那么在上面所说的Destination URI属性中使用

javascript:window.open(‘OA.jsp?page=XXX’,'<windowName>’, ‘<params>’)

 

注意:在对按钮的Destination URI属性使用Javascript的新开窗口时,需要在首选项中设置可访问功能为标准可访问性,否则Javascript将无法执行。

虽然以上的方法能够实现新开窗口,但还有很多的限制,比如如果在新开窗口前需要执行某些特定操作、或者新开窗口的URL是需要通过执行某些逻辑才能得到的,那么上面的方法就无法实现了。

在OAF中,Oracle不建议在OAF中使用Javascript,但是OAF还是提供了API用于执行Javascript:

1
2
3
4
OAPageContext.putJavascriptFunction(String name, String function)
OAPageContext.removeJavascriptFunction(String name)
OAPageContext.putJavascriptLibrary(String name, String library)
OAPageContext.removeJavascriptLibrary(String name)

 

 

假设用户提交了请求(点击链接、提交按钮等等触发事件的情况)需要新开窗口,在processFormRequest方法中,按一下步骤进行:

1、首先执行pageContext.removeJavascripFunction()

这是非常重要的一点,因为一旦Javascript注册到OAPageContext之后,就一直存在于OAPageContext中,这样会导致每次页面的刷新时都会执行Javascript。

 

2、在特定的事件中,执行程序逻辑,注册Javascript到OAPageContext对象中

1
2
3
4
5
6
7
8
9
if (pageContext.getParameter("Open") != null)
{
  // 执行其它处理
  ...
 
  // 定义Javascript
  String jScript = "window.open('OA.jsp?page=XXX')";
  pageContext.putJavascriptFunction("FunctionName", jScript)
}

 

注意:在调用putJavascriptFunction()时,必须指定Name参数,只有这样才可以调用removeJavascriptFunction()。

 

 

–