OAF开发通过EXCEL导入数据时,用户需要将可能存在重复的主键信息提示出来

2013-01-10(Thursday) 00:00

OAF开发通过EXCEL导入数据时,用户需要将可能存在重复的主键信息提示出来.

有以下两种主键冲突情况:

1, 表中不存在重复数据,即将导入的数据中存在重复数据。比如表中记录为空,导入的EXCEL中存在记录ID007,ID008,ID009,ID007,此时OAF页面需要将ID007提示出来;

2,表中存在重复数据。即表中原来已经存在一条记录ID007,此时导入的数据中也存在ID007,需要将ID007提示出来。

解决方案:

原本想通过查询数据库中ID007的记录是否存在再抛出OAException的做法来实现此需求,后来一想感觉好麻烦;便换种思路决定通过异常来判断。

情况1,在ViewObject对象CreateRow()之后,给创建的新Row.setAttribute("id",007)时,如果VO中存在两个007的新ROW,会抛出TooManyObjectsException,此时捕获该异常并返回此ID值。

情况2,难点也在这里,调用commit保存数据时,主键约束异常才会抛出来而且还不知道重复的ID值是多少。重写EO的doDML方法,在此方法中捕获DMLException异常,并且可以得到重复的ID值;

  public void doDML(int i,TransactionEvent e)
  {
    try{
    super.doDML(i,e);
    }catch(oracle.jbo.DMLException ex)
    {
        throw new OAException("ERROR:数据库中存在相同的VIN码["+this.getVin()+"],请检查上传文件",OAException.ERROR);
    }
  }

Category: ebs Tagged: oaf