壹佰网|ERP100 - 企业信息化知识门户

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1871|回复: 9

[OAF] resultsBasedSearch 出现的问题

  [复制链接]
发表于 2010/7/22 16:15:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。如果您注册时有任何问题请联系客服QQ: 83569622  。

您需要 登录 才可以下载或查看,没有帐号?注册

x
大家好! 我是OAF新人,有个问题想请教一下。我在做  resultsBasedSearch 时,查询页面只有一个字段  employee_number,但点击Go按钮时,后台执行的sql如下
SELECT * FROM (select  ppf.employee_number  
  from   per_people_f ppf
          , per_assignments_f paf
where ppf.person_id = paf.person_id
  ) QRSLT  WHERE ((EMPLOYEE_NUMBER = :1) AND ( UPPER(EMPLOYEE_NUMBER)  like  :2 AND (EMPLOYEE_NUMBER  like  :3 OR EMPLOYEE_NUMBER  like  :4 OR EMPLOYEE_NUMBER  like  :5 OR EMPLOYEE_NUMBER  like  :6))) ORDER BY EMPLOYEE_NUMBER ASC,
本来的sql如下:
select  ppf.employee_number  
  from   per_people_f ppf
          , per_assignments_f paf
where ppf.person_id = paf.person_id
这里我就有点不明白,本来只有一个参数,怎么跑出来的sql却有5个变量。

我试着加了debug语句:
Object[] objParam = getWhereClauseParams();
      for (int i = 0; i < objParam.length; i++)
      {
        System.out.println((i + 1) + " value:["+objParam[i]+ "]");
       }
结果当 employee_number输入值为  0030568时,显示信息如下

1 value:[0311190%]
2 value:[03%]
3 value:[03%]
4 value:[03%]
5 value:[03%]
6 value:[03%]

请高手们帮忙解决一下,谢谢!

发表于 2010/7/23 09:59:31 | 显示全部楼层
本帖最后由 sumury 于 2010/7/23 10:24 编辑

这个是OAF的标准功能,(模糊查询)
你想要实现什么样的功能?
说来听听?

另外,若是你不想修改基于结果的查询的话,
还有一种方向,你可以试试看。
因为per_people_f表的EMPLOYEE_NUMBER是VARCHAR2(30)
同时,你在页面上相关item的dataType设置的也是varchar2的,
所以才会在进行EMPLOYEE_NUMBER查询的时候使用like的模糊查询,
如果是item的dataType设置成NUMBER,应该就不会拼接like了。
不过,这个是基于你的业务逻辑中EMPLOYEE_NUMBER
这个字段存放的都是数字的情况。
发表于 2010/7/23 11:42:36 | 显示全部楼层
本帖最后由 rkzhou2010 于 2010/7/23 11:50 编辑

回复 sumury 的帖子


         很感谢您的答复。我的目的只是学习一下OAF而已,但现在根据 文档做resultsBasedSearch 时,页面跑不出结果,但我在查询字段输入  0311190,那根据后台sql

SELECT * FROM (select  ppf.employee_number  
  from   per_people_f ppf
       , per_assignments_f paf
where ppf.person_id = paf.person_id
   and paf.position_id = pos.position_id
   ) QRSLT  WHERE (( UPPER(EMPLOYEE_NUMBER)  like  :1 AND (EMPLOYEE_NUMBER  like  :2 OR EMPLOYEE_NUMBER  like  :3 OR EMPLOYEE_NUMBER  like  :4 OR EMPLOYEE_NUMBER  like  :5))) ORDER BY EMPLOYEE_NUMBER ASC

和debug跑出来的结果代入,sql应该是
SELECT * FROM (select  ppf.employee_number  
  from   per_people_f ppf
       , per_assignments_f paf
where ppf.person_id = paf.person_id
   and paf.position_id = pos.position_id
   ) QRSLT  WHERE (( UPPER(EMPLOYEE_NUMBER)  like '0311190%' AND (EMPLOYEE_NUMBER  like  '03%' OR EMPLOYEE_NUMBER  like   '03%' OR EMPLOYEE_NUMBER  like  '03%' OR EMPLOYEE_NUMBER  like  '03%'))) ORDER BY EMPLOYEE_NUMBER ASC

也能搜出数据啊,但现在是跑不出结果。请你再帮忙解决一下

另外,我后台老是报这个错
java.lang.IllegalArgumentException: Unknown signal: ALRM
at sun.misc.Signal.<init>(Signal.java:126)
at oracle.apps.fnd.framework.AppsDiagnosticsHandler.install(AppsDiagnosticsHandler.java:50)
at oracle.apps.fnd.framework.server.OAApplicationModuleImpl.initializeSignalHandler(OAApplicationModuleImpl.java:473)
at oracle.apps.fnd.framework.server.OAApplicationModuleImpl.<clinit>(OAApplicationModuleImpl.java:463)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:219)
at oracle.jbo.common.java2.JDK2ClassLoader.loadClassForName(JDK2ClassLoader.java:37)
at oracle.jbo.common.JBOClass.forName(JBOClass.java:141)
at oracle.jbo.common.JBOClass.findCustomClass(JBOClass.java:153)
at oracle.jbo.server.ApplicationModuleDefImpl.loadFromXML(ApplicationModuleDefImpl.java:828)
at oracle.jbo.server.ApplicationModuleDefImpl.loadFromXML(ApplicationModuleDefImpl.java:771)
at oracle.jbo.server.MetaObjectManager.loadFromXML(MetaObjectManager.java:517)
at oracle.jbo.mom.DefinitionManager.loadLazyDefinitionObject(DefinitionManager.java:456)
at oracle.jbo.mom.DefinitionManager.findDefinitionObject(DefinitionManager.java:313)
at oracle.jbo.mom.DefinitionManager.findDefinitionObject(DefinitionManager.java:269)
at oracle.jbo.server.MetaObjectManager.findMetaObject(MetaObjectManager.java:649)
at oracle.jbo.server.ApplicationModuleDefImpl.findDefObject(ApplicationModuleDefImpl.java:232)
at oracle.jbo.server.ApplicationModuleImpl.createRootApplicationModule(ApplicationModuleImpl.java:359)
at oracle.jbo.server.ApplicationModuleHomeImpl.create(ApplicationModuleHomeImpl.java:91)
at oracle.apps.fnd.framework.webui.OAJSPApplicationRegistry.createStaticAKApplicationModule(OAJSPApplicationRegistry.java:369)
at oracle.apps.fnd.framework.webui.OAJSPApplicationRegistry.getStaticAKApplicationModuleSync(OAJSPApplicationRegistry.java:344)
at oracle.apps.fnd.framework.webui.OAJSPApplicationRegistry.getStaticAKApplicationModule(OAJSPApplicationRegistry.java:333)
at oracle.apps.fnd.framework.webui.OAPageBean.preparePage(OAPageBean.java:861)
at oracle.apps.fnd.framework.webui.OAPageBean.preparePage(OAPageBean.java:508)
at oracle.apps.fnd.framework.webui.OAPageBean.preparePage(OAPageBean.java:429)
at _OA._jspService(OA.jsp:34)
at com.orionserver.http.OrionHttpJspPage.service(OrionHttpJspPage.java:56)
at oracle.jsp.runtimev2.JspPageTable.service(JspPageTable.java:317)
at oracle.jsp.runtimev2.JspServlet.internalService(JspServlet.java:465)
at oracle.jsp.runtimev2.JspServlet.service(JspServlet.java:379)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at com.evermind.server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:727)
at com.evermind.server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:306)
at com.evermind.server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:767)
at com.evermind.server.http.HttpRequestHandler.run(HttpRequestHandler.java:259)
at com.evermind.server.http.HttpRequestHandler.run(HttpRequestHandler.java:106)
at EDU.oswego.cs.dl.util.concurrent.PooledExecutor$Worker.run(PooledExecutor.java:803)
at java.lang.Thread.run(Thread.java:534)
但又不影响程序run,请问这是什么回事呢?这个跟搜不出结果应该没关系吧
发表于 2010/7/23 12:16:03 | 显示全部楼层
在JDeveloper中,双击工程
将Project Settings/Common/Oracle Applications/Run Option
中的OADiagnostic从右边的多选框中移除掉。
发表于 2010/7/23 13:43:43 | 显示全部楼层
回复 sumury 的帖子


        OADiagnostic 的作用是:使诊断(Diagnostics)链接有效。选中它是不是会检查页面链接?可否稍微解释一下。还有  resultsBasedSearch 搜索还是没有数据?是不是 属性设置错了  还是 数据库 链接有问题,能不能给个debug的方法。非常感谢!
发表于 2010/7/23 13:59:59 | 显示全部楼层
本帖最后由 sumury 于 2010/7/23 14:05 编辑

resultsBasedSearch是OAF标准的功能,无法debug。
出现这个错误的另一个原因是你的Jdeveloper的版本和EBS的版本不匹配。

还有一种因素会发生这种错误,
就是你用的链接是VPN的。

请你检查一下。
发表于 2010/7/23 14:25:44 | 显示全部楼层
另外,我发现你的SQL中有
POS.POSITION_ID
在from中没有叫这个别名的表。

请你检查一下SQL。
发表于 2010/7/23 15:03:28 | 显示全部楼层
回复 sumury 的帖子


        OAF的下载版本 ,我是通过  访问页面:http://host:port/OA_HTML/OAInfo.jsp 得到的,应该没错。另外,sql 我在database跑过,是有结果的,sql出现 POS,是因为sql本来是没有那么短的,我删了一些,结果发给你时一些没删到,把你搞混了,不好意思。还有,我用的链接也不是VPN的。真的不知为什么跑不出结果啊
发表于 2010/7/23 15:25:12 | 显示全部楼层
本帖最后由 sumury 于 2010/7/23 15:26 编辑

看下来,你的环境应该是没有问题了。
还是运行不出结果,应该是你页面做的有问题。
有2种解决的办法;
1、参考OAF Tutorial中search部分,比较一下与标准的做法有什么不一样的地方。
2、不用OAF标准的方法,自己手工写代码,进行查询。

备注:
我推荐使用第2种方法,原因如下:
1、OAF标准的Query,存在许多的bug。
2、自己写查询代码,也不见得复杂多少,而且来龙去脉可以变得更清晰。
3、可以实现自己需要的查询方式
4、凡是高级查询,都是通过手工写代码来实现的。
5、。。。。。。
千言万语,还是相信自己写的代码。
所以,还是自己手工写代码吧,不要用query region。
如果中间遇到问题,再贴到到论坛上来。

万事开头难,不要灰心。 :>

发表于 2010/7/23 15:38:43 | 显示全部楼层
回复 sumury 的帖子


    好的,Thank you very much!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|手机版|壹佰网 ERP100 ( 京ICP备19053597号-2 )

Copyright © 2005-2012 北京海之大网络技术有限责任公司 服务器托管由互联互通
手机:13911575376
网站技术点击发送消息给对方83569622   广告&合作 点击发送消息给对方27675401   点击发送消息给对方634043306   咨询及人才点击发送消息给对方138011526

GMT+8, 2025/11/29 15:25 , Processed in 0.023110 second(s), 16 queries , File On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表