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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 5273|回复: 44

[OAF] OAF 查询问题

  [复制链接]
发表于 2010/8/26 11:21:49 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 tchen 于 2010/8/26 13:56 编辑

123.JPG
如图:
现有MASTER 页面和DETAIL 页面. 如图是DETAIL 页面. MASTER 页面和DETAI 页面通过SHIP_HEADER_ID 关联,并也建立了LINK,
因此当再MASTER页面输入一条记录,然后点NEXT 时候进入DETAIL 页面 时SHIP_HEADER_ID 值会被带到DETAIL 页面
图中DETAIL页面的上下两个REGION 基于同一个E0( 上面是用于输入DETAIL 记录,每输一笔, 点"ADD Line item to Shipping request" 时
会执行SAVE 动作并且执行查询从 DETAIL 表将当前是SHIP_HEADER_ID 的值记录全部显示再下面.
例如:上面REGION 是VO1 ,下面是VO2
现在的情况是一条记录查不出来, 请帮忙看看,多谢了 (图中的查询结果是不是根据代码查询出来的), 现在领导要求用代码实现)..
---------------------
Process request:
    String id = pageContext.getParameter("ShipHeaderId");
    Serializable[] parameters = { id };
    am.invokeMethod("initQueryDetails", parameters);

vo2imp1 class:
   public void initQuery(String Headerid)
  {
    if ((Headerid != null) &&
         (!("".equals(Headerid.trim()))))
     {

       // Do the following conversion for type consistency.
       Number id = null;
   
       try
       {
         id = new Number(Headerid);
       }
       catch(Exception e)
       {
         throw new OAException("AK", "FWK_TBX_INVALID_EMP_NUMBER");
       }
     //  setWhereClause("SHIP_HEADER_ID = :1");
       setWhereClauseParams(null); // Always reset
       setWhereClauseParam(0, id);
       executeQuery();
   
     }
  }

Am Class:
public void initQueryDetails(String Headerid)
{
  SummaryLineQueryImpl vo =getSummaryLineQuery1();

  vo.initQuery(Headerid);
  } // end initQueryDetails()



发表于 2010/8/26 11:33:02 | 显示全部楼层
QA:
1、“并也建立了LINK”,什么意思?
2、“点ADD Line item to Shipping request 时”,虽然页面上面没有显示数据,
    但是,请确认DB中该数据,是否已经被保存了。
3、请确认VO中的“executeQuery();”是否运行到了。
 楼主| 发表于 2010/8/26 11:44:30 | 显示全部楼层
本帖最后由 tchen 于 2010/8/26 12:28 编辑

再次谢谢SUMURY的热心帮助.
1) 建立是LINK 意思是 对MASTER EO 和 DETAIL EO 建立了VIEW LIKE 通过JDEVELOPER
2) DB 中有数据
3) 如何确认..VO中的“executeQuery();”是否运行..
-------------
在我的VO2 查询中有下列条件..  
  AND SeaoeMsaShipLines.SHIP_HEADER_ID = :1
 楼主| 发表于 2010/8/26 11:47:18 | 显示全部楼层
贴上我的 DETAIL PAGE 的 processFormRequest 代码
public void processFormRequest(OAPageContext pageContext, OAWebBean webBean)
  {
    super.processFormRequest(pageContext, webBean);
    OAApplicationModule am = pageContext.getApplicationModule(webBean);
  if (pageContext.getParameter("Addline") != null)
  {
  //Get sequence id start
    OAViewObject vo1= (OAViewObject)am.findViewObject("CreateSummaryLineVO1");
    OADBTransaction transaction = (OADBTransaction)am.getOADBTransaction();
    Number ShipLinId = transaction.getSequenceValue("SEAMSA_MSA_SHIP_LINES_S");
    vo1.getCurrentRow().setAttribute("ShipLineId",ShipLinId);
  //Get sequence id end  

  //commit data to db
    am.invokeMethod("addline");

  pageContext.forwardImmediately("OA.jsp?page=/seagate/oracle/apps/seaoe/msa/webui/MsaShipCreateLinePG",
                              null,
                              OAWebBeanConstants.KEEP_MENU_CONTEXT,
                              null,
                              null,
                              true, // retain AM
                              OAWebBeanConstants.ADD_BREAD_CRUMB_NO);  
  }
}
发表于 2010/8/26 12:40:20 | 显示全部楼层
最后,为什么要使用pageContext.forwardImmediately?
直接am.invokeMethod("initQueryDetails", parameters);不就可以了吗?
尽量不要使用pageContext.forwardImmediately,否则以后的麻烦会很多的。
发表于 2010/8/26 12:41:34 | 显示全部楼层
直接运行VO2中的SQL(拼接上AND SeaoeMsaShipLines.SHIP_HEADER_ID = :1),有数据吗?
发表于 2010/8/26 12:45:10 | 显示全部楼层
detail页面上调用的am.invokeMethod("initQueryDetails", parameters);

这个方法查询的是主VO还是子VO?
 楼主| 发表于 2010/8/26 13:03:44 | 显示全部楼层
本帖最后由 tchen 于 2010/8/26 13:05 编辑

最后,为什么要使用pageContext.forwardImmediately?
-----因为需求是点"ADD Line item to Shipping request" 保存并且可以新增一条新纪录. 以前用了你的方法CREATE_ROW, 没问题, 之所以换了就是因为这次新增的查询代码,最初我是放
am.invokeMethod("initQueryDetails", parameters)在processFormRequest的, 但是没起作用, 后查了网上资料都是放在processRequest里面的, 所以把代码移到了processRequest. 同时也用pageContext.forwardImmediatelY 替代了CREATE_ROW,因为这样当执行.forwardImmediatelY 后会执行到processRequest 中的 查询 代码

 楼主| 发表于 2010/8/26 13:08:10 | 显示全部楼层
直接运行VO2中的SQL(拼接上AND SeaoeMsaShipLines.SHIP_HEADER_ID = :1),有数据吗?
在SQLPLUS 中,用我插入DB中的SHIP_HEADER_ID 替换:1 是有数据返回的.
发表于 2010/8/26 13:08:18 | 显示全部楼层
我只能劝你,以后尽量不要使用forwardImmediatelY,

否则,以后做到复杂的页面,页面的处理逻辑会很混乱,就有你苦头吃了。

另外,两个问题,请回复一下。
 楼主| 发表于 2010/8/26 13:09:08 | 显示全部楼层
detail页面上调用的am.invokeMethod("initQueryDetails", parameters);

这个方法查询的是主VO还是子VO?
-----------
查询的是子VO, 就是DETAIL 页面的下面个REGRION VO2
发表于 2010/8/26 13:12:26 | 显示全部楼层
问题,应该结了,

直接查询主VO(而不是子VO),Detail页面就会有数据显示出来了。(虽然detail页面关联的是子VO)
 楼主| 发表于 2010/8/26 13:14:05 | 显示全部楼层
String id = pageContext.getParameter("ShipHeaderId");
这句代码能拿到当前SHIP_HEADER_ID 值吗?  有点疑惑..我如果把SHIP_HEADER_ID 显示在DETAIL 页面上面REGION , 看到是有值的.只是我的这句代码能否拿到?
    Serializable[] parameters = { id };
    am.invokeMethod("initQueryDetails", parameters);
---------------
发表于 2010/8/26 13:16:05 | 显示全部楼层
当然得不到!

把值放在TransactionTransientValue不就结了。
 楼主| 发表于 2010/8/26 13:37:24 | 显示全部楼层
本帖最后由 tchen 于 2010/8/26 13:45 编辑

问题,应该结了,

直接查询主VO(而不是子VO),Detail页面就会有数据显示出来了。(虽然detail页面关联的是子VO)
-----当前DETAIL 页面上下两个VO(VO1 上 和VO2 下)  不存在主和子的关系, 只是基于同一个EO, 没有建立关系. 上面提供输入,下面用于显示输入的记录.
你的意思说应该查询VO1而不是VO2?? 然后查询出来的结果会显示在下面REGION?

发表于 2010/8/26 13:45:05 | 显示全部楼层
我的理解是,你detail页下方的VO与master页面的VO,通过VL,建立的一对多的链接关系。

如果是这样的话,要显示detail下方的VO(子VO),则要查询master页面的VO(主VO)
 楼主| 发表于 2010/8/26 13:55:09 | 显示全部楼层
本帖最后由 tchen 于 2010/8/26 13:57 编辑

谢谢您的耐心指导.
我的MASTER 页面(是另外的一个页面)主VO 是和DETAIL页的上面的VO1 建立关系, 没有和VO2 建立关系.不好意思,可能没表述清楚. 让你误会了..
我要查询的是VO2 里面的内容, 因为VO2的QUERY 被自定义了 关联了一个其它的表.
发表于 2010/8/26 13:57:10 | 显示全部楼层
“VO2的QUERY 被自定义了 关联了一个其它的表”

请解释一下。
 楼主| 发表于 2010/8/26 13:59:27 | 显示全部楼层
本帖最后由 tchen 于 2010/8/26 14:03 编辑

这个是VO2的, 虽然基于EO,但是QUERY 有点改变, 如下红色部分
SELECT SeaoeMsaShipLines.SHIP_HEADER_ID,
       SeaoeMsaShipLines.SHIP_LINE_ID,
       SeaoeMsaShipLines.PART_NUMBER,
       (SELECT DESCRIPTION
           FROM APPS.MTL_SYSTEM_ITEMS_B
          WHERE SeaoeMsaShipLines.PART_NUMBER = SEGMENT1
            AND ROWNUM = 1) PART_DESC,            
       SeaoeMsaShipLines.UNIT_OF_MEASURE,
       SeaoeMsaShipLines.ADDITIONAL_PART_DESC,
       SeaoeMsaShipLines.QUANTITY,
       SeaoeMsaShipLines.UNIT_PRICE,
       SeaoeMsaShipLines.COUNTRY_OF_ORIGIN,
       SeaoeMsaShipLines.CREDIT_ACCOUNT_NUMBER,
       SeaoeMsaShipLines.PURCHASE_ORDER_NUMBER,
       SeaoeMsaShipLines.RMA_NUMBER,
       SeaoeMsaShipLines.REUSED_PACKAGING_MATERIALS,
       SeaoeMsaShipLines.USED_EQUIP_OR_SPARE_PARTS,
       SeaoeMsaShipLines.HAZARDOUS_MATERIAL,
       SeaoeMsaShipLines.EXTENDED_AMOUNT,
        'N' SELECT_FLAG,
        'Ok_Delete' Delete_Flag,
        0 Viewline
  
FROM SEAMSA_MSA_SHIP_LINES SeaoeMsaShipLines
WHERE SeaoeMsaShipLines.SHIP_HEADER_ID = :1
发表于 2010/8/26 14:06:48 | 显示全部楼层
页面下方的table中,又没有可输入的内容。

那么,这个VO为什么要基于EO来建立呢?

解释一下。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

GMT+8, 2025/11/29 03:00 , Processed in 0.020680 second(s), 15 queries , File On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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