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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1937|回复: 14

[OAF] OAF MASTER 和DETIL PAGE ITEM 如何传值..

  [复制链接]
发表于 2010/8/20 13:27:33 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 tchen 于 2010/8/20 15:46 编辑

不好意思, 又来麻烦各位帮忙了,
关系如下
1) MASTER PAGE
2) DETAIL PAGE
MASTER 和DETAIL PAGE之间建TRAIN 并且建立了关系
现MASTER PAGE 有两个ITEM(A,B), DETAIL PAGE 也有同样的两个ITEM(A,B)
现要求在MASTER PAGE 输入完毕之后点,NEXT 到DETAIL PAGE 时,将A, B 两个值分别赋予DETAIL PAGE A,B两值,

怎么实现,谢谢

发表于 2010/8/20 14:13:14 | 显示全部楼层
本帖最后由 sumury 于 2010/8/20 14:46 编辑

假设你在两个页面上的需要传递ITEM的名字都叫paramA(我只模拟传递了一个参数)

在你footRN的CO中加入以下代码:
  private static final String PARAM_A = "paramA";
  public void processRequest(OAPageContext pageContext, OAWebBean webBean)
  {
    ...
    String strParamA = (String)pageContext.getTransactionTransientValue(PARAM_A);
    if (strParamA != null && !"".equals(strParamA.trim()))
    {
      pageContext.removeTransactionTransientValue(PARAM_A);
      try
      {
        ((OAMessageTextInputBean)webBean.findChildRecursive(PARAM_A)).setValue(pageContext, strParamA);
      }
      catch (OAException oe)
      {
      }
    }
  }

  public void processFormRequest(OAPageContext pageContext, OAWebBean webBean)
  {
    ......
    if (GOTO_EVENT.equals(pageContext.getParameter(EVENT_PARAM)))
    {
      String strParamA = pageContext.getParameter(PARAM_A);
      if (strParamA != null && !"".equals(strParamA.trim()))
      {
        pageContext.putTransactionTransientValue(PARAM_A, strParamA);
      }
    }
  }


发表于 2010/8/20 14:47:43 | 显示全部楼层
如果不想写代码,直接将两个item绑定同一个VO中的一个属性,就可以了。

更简单。
 楼主| 发表于 2010/8/20 15:33:06 | 显示全部楼层
本帖最后由 tchen 于 2010/8/20 15:57 编辑

谢谢sumury, 真的帮了我不少忙. 让我学会了不少东西..
1) 试了你的代码.OK
2) 捆绑同一个VO,显示没问题, 只是SAVE 到DETAIL 表的是空值.
123.JPG
发表于 2010/8/20 15:42:48 | 显示全部楼层
这个要你具体的描述一下了。
 楼主| 发表于 2010/8/20 15:56:06 | 显示全部楼层

123.JPG


看我上面贴的图是DETAIL 页面
上面的REGION 是基于DETAIL TABLE 的
当新增一笔LINE 后会点"ADD Line item to Shipping Request" 动作是SAVE HEAER 页面和LINE 页面资料到数据库同时显示LINE 在下面的REGION. 下面REGION 是基于不同的VO
---
由于第2种方法是ITEM(Credit Account Number)绑定同一VO. 所以显示没有问题, 但是没有值赋予DETIAL 页面的ITEM. 所以后台看到的是空值.
发表于 2010/8/20 16:16:32 | 显示全部楼层
本帖最后由 sumury 于 2010/8/20 16:17 编辑

对你以上的描述,我的理解是

页面分成两块
1、页面上半部分可输入的区域
2、页面下半部分table区域。
并且,这两个区域绑定的是不同的VO。

因为你Master页面和detail页面的Credit Account Number都是同一个VO的一个字段,
所以当从Master迁移到detail页面的时候,detail的上半部分Credit Account Number是有值的。

而table中的Credit Account Number是没有值的,因为和页面上半部分是不同的VO
所以当你点击ADD Line item to Shipping Request这个button的时候,
你需要做一件事情(假设上半部分的VO名字是VO1,下半部分的VO名字是VO2)
将VO1中这个属性的值负给VO2新增加的这行的这个属性。
代码如下:
VO2.getCurrentRow().setAttribute(“Credit Account Number”, VO1.getCurrentRow().getAttribute(“Credit Account Number”));

不知道,我的理解对不对,
我的表达,你是否能够理解。
 楼主| 发表于 2010/8/20 16:30:42 | 显示全部楼层
本帖最后由 tchen 于 2010/8/20 16:36 编辑

当点ADD Line item to Shipping Request这个button的时候,是SAVE HEAER 页面和LINE 页面资料到数据库的HEADER表和LINE表, 同时会 查询刚刚SAVE 到DETAIL 表里的数据并且显示在VO2 REGION
由于Credit Account Number 没有值, 因为不是同一个VO(HEAER VO3 和DETIL VO1) 所以以查询出来的也是空值(在VO3 种显示的是空值)
---
刚刚忘了说了VO2 查询的TABLE 和VO1 的对应的TABLE 的是同一个TABLE

由于有事, 先下线,回家在看帖子.. 周末愉快. 谢谢
发表于 2010/8/20 16:47:54 | 显示全部楼层
你的意思是不是说,

从Master页面迁移到detail页面的时候,在页面上的“Credit Account Number”值是保存着的。

但是点击“ADD Line item to Shipping Request”这个button的时候,

页面上“Credit Account Number”的值并没有保存到DB中。

如果是这样的话,你只要在VO中对应的这个属性绑定EO中的一个字段
(这个字段对应DB中一个表的一个字段)

这样在提交commit,请求的时候,就可以将页面上的值保存到DB中。
 楼主| 发表于 2010/8/23 13:22:47 | 显示全部楼层
谢谢! 你的理解是对的.
如果是这样的话,你只要在VO中对应的这个属性绑定EO中的一个字段----------------------> 如何绑定?  还有哪个地方可以绑定, 请赐教!
当前在我的DETAIL 页面ITEM属性里面VIEW INSTANCE 和 VIEW attribute 设置的是MASTER 页面VO 和对应的ITEM. 以至于值能Master页面迁移到detail页面.

发表于 2010/8/23 13:36:46 | 显示全部楼层
VO属性绑定EO属性(创建基于EO的VO)

这个比较难表述。

参见:OA Framework ToolBox Tutorial >  Drilldown to Details Page > Task 1: Create the Details Page View Object
 楼主| 发表于 2010/8/23 14:25:26 | 显示全部楼层
我的 DETAIL PAGE VO 就是基于EO 创建的.    谢谢, 我再看看你提供的例子

 楼主| 发表于 2010/8/23 15:03:00 | 显示全部楼层
Sumury,
当前DETAIL PAGE 中有个"Clear Line Item Details'  这个BUTTON 是用于清除当前页面中的ITEM. 然后用户可以新增一条新记录, 我用的pageContext.forwardImmediately 初始化页面,  但是这样会清除从MASTER 页面传入到DETAIL页面的"Credit Account Number" 值, 有没有方法可以保留Credit Account Number值. 谢谢!!
发表于 2010/8/23 15:20:32 | 显示全部楼层
本帖最后由 sumury 于 2010/8/23 15:22 编辑

你在Detail页面中的item,是不是都与VO中的属性关联的?

如果是关联的,那么,点击‘Clear Line Item Details’这个button的时候,

不需要做清除的动作,只需要直接调用createRow(),就可以了。

也不需要使用pageContext.forwardImmediately()方法,

至于保存Credit Account Number的值,你在调用createRow()之前,

先调用方法getCurrentRow.getAttribute("Credit Account Number"),取得原来的值,

再在createRow之后,调用setAttribute("Credit Account Number", "<之前取得的那个值>")

就可以了。你看,能理解吗?
 楼主| 发表于 2010/8/23 18:10:29 | 显示全部楼层
本帖最后由 tchen 于 2010/8/23 18:18 编辑

能理解, 按照你的方法 做了, Thanks!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

GMT+8, 2025/11/30 06:38 , Processed in 0.022015 second(s), 15 queries , File On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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