OAF_VO系列4 - Row Imp的分析(概念)

简介: 20150706 Created By BaoXinjian 一、摘要 如果使用过OAF(客户化或标准EBS页面)的人可能会发现这样两个问题:    1、当在表单上输入内容,点确定按钮出错后,页面显示错误信息,此时不做任何修改,再点确定按钮就不会再执行底层实体对象的验证。

20150706 Created By BaoXinjian

一、摘要


如果使用过OAF(客户化或标准EBS页面)的人可能会发现这样两个问题:

   1、当在表单上输入内容,点确定按钮出错后,页面显示错误信息,此时不做任何修改,再点确定按钮就不会再执行底层实体对象的验证。

   2、当你输入了内容,提交触发实体对象验证失败后,你所输入的数据可能无法保留,而显示原先的内容或者是默认的值。

第一个问题的原因是在于触发过实体对象验证,用户不修改任何值,不会引起实体对象的再次验证;

第二个问题的原因是在控制器的processFormData方法中,将页面中的值写入视图对象时,触发了实体对象的验证,造成无法把页面中的值写入视图对象属性,而保留原先的值或默认值。

 

二、方案


Step1. 在控制器中覆盖OAControllerImpl的processFormData方法,设置ROW的状态为STATUS_INITIALIZED

if ("Y".equals(pageContext.getTransactionValue("ErrorExist"))) //如果EO验证失败,设置该Transaction值
{
  RowSetIterator it = vo.createRowSetIterator("initIt");
  
  int rowCount = vo.getFetchedRowCount();
  it.setRangeStart(0);
  it.setRangeSize(rowCount);
  
  try
  {
     for (int i=0;i   
{    Row row
= it.getRowAtRangeIndex(i);    row.setNewRowState(Row.STATUS_INITIALIZED); // 将不执行实体对象的验证    }   }   finally   {    it.closeRowSetIterator();   }  }    super.processFormData(pageContext, webBean);

 

Step2. 然后在processFormRequest中强制执行Row的验证

if ((pageContext.getParameter("Submit") != null) && ("Y".equals(pageContext.getTransactionValue("ErrorExist"))))
{
   RowSetIterator it = vo.createRowSetIterator("checkIt");
  
   ArrayList exptList = new ArrayList();
  
   int rowCount = vo.getFetchedRowCount();
   it.setRangeStart(0);
   it.setRangeSize(rowCount);
  
   try
   {
      for (int i=0;i   {
      try
      {
        Row row = it.getRowAtRangeIndex(i);
  
      if (...) // 判断记录是否是新建的记录
      {
         row.setNewRowState(Row.STATUS_NEW); // 对于新建的记录,必须设置STATUS_NEW状态,才会触发实体验证
      }
      row.validate();
      }
      catch(Exception e)
      {
         exptList.add(e);
      }
     }
    }
    finally
  {
     it.closeRowSetIterator();
  }
  
  if (exptList.size() > 0)
  {
   OAException.raiseBundledOAExcetion(exptList);
  }
  
   pageContext.removeTransactionValue("ErrorExist");
}

 

Thanks and Regards

ERP技术讨论群: 288307890
技术交流,技术讨论,欢迎加入
Technology Blog Created By Oracle ERP - 鲍新建
相关文章
|
Android开发
【Android 逆向】IDA 工具使用 ( 十六进制视图 Hex View-1 | 结构体视图 Structures | 枚举视图 Enums | 导入视图 Import | 导出视图 )
【Android 逆向】IDA 工具使用 ( 十六进制视图 Hex View-1 | 结构体视图 Structures | 枚举视图 Enums | 导入视图 Import | 导出视图 )
595 0
【Android 逆向】IDA 工具使用 ( 十六进制视图 Hex View-1 | 结构体视图 Structures | 枚举视图 Enums | 导入视图 Import | 导出视图 )
|
7月前
最全三大框架整合(使用映射)——Dept.java
最全三大框架整合(使用映射)——Dept.java
|
前端开发 Java API
深度解读JAVA中的DO、BO、VO、DTO、AO、PO、DO、AO各自的含义
在刚接触一些比较规范代码的时候就遇到了这些,用于描述对象的不同类型,每个模块都是相互依赖的,所以在这里进行一个详细系统的总结。
1324 0
在powerdesigner中,一个table,怎么在diagram中创建多个symbol(多个模块都和同一个表相关联)
在powerdesigner中,一个table,怎么在diagram中创建多个symbol(多个模块都和同一个表相关联)
166 0
在powerdesigner中,一个table,怎么在diagram中创建多个symbol(多个模块都和同一个表相关联)
重构——29以数据类取代记录(Replace Record with Data Class)
以数据类取代记录(Replace Record with Data Class):你需要面对传统编程环境中的记录结构;为该记录创建一个“哑”数据对象
1566 0
|
JavaScript 数据格式 JSON
对select组件的封装
引言: 在我们平时开发过程中,可能都会使用到下拉框这个组件,里面的值要么是动态的,要么是静态的,但是方便日后的维护,大多数都会将他配置成代码项封装成集合,通过遍历,生成动态的数据,这个数据都是从跳转的控制器以集合的形式带过来,这会导致每写一个select都要从后台把这个集合带过来吗,然后再去遍历,这从代码的设计角度来看,非常的臃肿,很难实现低耦合,除非下拉框里面的数据是业务中产生的数据,不得不这样做。
1449 0
重构——16引入外加函数(Introduce Foreign Method)
引入外加函数(Introduce Foreign Method):你需要为提供服务的类增加一个函数,但你无法修改这个类;在客户端建立一个函数,并以第一参数形式传入一个服务类实例
1646 0