• OAF中 遍历HGrid组件中的所有VO行


     在HGrid组件中有如下所示的HeaderVO和LineVO

    需要在头上的LOV中触发事件去更新行VO中的值,LOV事件的处理方法见 getLovParameter ,但是由于HGrid的特殊性,不能取到当前事件行,所以建议在VO中新增一个transection的变量,例如LovChangeFlag。

    选择LOV的事件后设置该值为Y

    public void setAccountItemId(Number value)
    {
    setAttributeInternal(ACCOUNTITEMID, value);
    setLovChangeFlag("Y");
    }

    PFR 中LOV事件处理

    else if (pageContext.isLovEvent()) {
    
    else if ("AccountItemCode".equalsIgnoreCase(lovInputSourceId)) {
    OAHGridBean hGridBean = 
    (OAHGridBean)webBean.findChildRecursive("AccountHgrid");
    OAHGridQueriedRowEnumerator hgridEnum = 
    new OAHGridQueriedRowEnumerator(pageContext, hGridBean);
    
    am.drAccountChangeFin(hgridEnum);
    }
    
    }

    am中事件处理

      public void drAccountChangeFin(OAHGridQueriedRowEnumerator hgridEnum)
      {
          
        while (hgridEnum.hasMoreElements())
        {
          Row rowToUpdate = (Row)hgridEnum.nextElement();
          if (rowToUpdate != null)
          {
            String lovChangeFlag = 
              (String)rowToUpdate.getAttribute("LovChangeFlag");
            if ("Y".equals(lovChangeFlag)) //得到触发LOV事件的行
            {
              rowToUpdate.setAttribute("LovChangeFlag", "N");  //得到后再将此值设为N
                        Number headerId= 
                (Number)rowToUpdate.getAttribute("HeaderId");
              //业务代码
              //...
                while (hgridEnum.hasMoreElements())
                    {
                      rowToUpdate = (Row)hgridEnum.nextElement();
                      Number currentHeaderId = 
                        (Number)rowToUpdate.getAttribute("HeaderId");
                        //此处判断遍历得到的row是否是LINEVO中的数据
                      if (headerId.equals(currentHeaderId))
                      {
                        rowToUpdate.setAttribute("XXX", value );
                      }
                    }
            }
          }
        }
      }    

    OAHGridQueriedRowEnumerator会将HGrid中所有的数据放入枚举中,并且会将HeaderVO中的所有数据放在前面,将LineVO中的所有数据放在后面,所以不用担心在遍历的时候会先遍历到LineVO中的数据。

  • 相关阅读:
    C# 多线程编程及其几种方式
    多态有几种表现形式
    闭包的理解
    C# 泛型类型约束 where
    HTML扩展--HTMLTestRuner HTML测试报告
    编写web自动化测试
    unittest单元测试框架之认识unittest
    自动化测试模型
    处理HTML5视频播放、滑动解锁
    操作Cookie调用JavaScript
  • 原文地址:https://www.cnblogs.com/huanghongbo/p/5997799.html
Copyright © 2020-2023  润新知