2013年5月29日星期三

[ADF技术-010] VO的ID字段自动获取Sequence

获取Sequence有两种不同的方法

1.Groovy表达式获取

  该方法是view的iterator中创建一行的时候就通过groovy表达式获取Seq中的值并赋值到id字段中,该方法有个缺点:如果事务回滚了或者创建的行没保存,就会造成Seq跳值

  1.1.选中需要获取Seq的EO中的字段

 1.2.Default Value中选择Expression(表达式)
     并填入(new oracle.jbo.server.SequenceImpl(SEQ名称,adf.object.getDBTransaction())).getSequenceNumber()


2.提交事务时候之前获取

  该方法是通过在提交事务之前手工获取对应的seq值并赋值到id字段中,是第一个方法很好的补充

  2.1.生成EO对应的java类,并勾上Data Manipulation Methods

  2.2.找到java类中的doDML方法,并重写
     
代码如下
     /**
      * Custom DML update/insert/delete logic here.
      * @param operation the operation type
      * @param e the transaction event
      */
     protected void doDML(int operation, TransactionEvent e) {
         if (operation == DML_INSERT) {
             if(this.getCompanyId()==null){
                 this.setCompanyId((new oracle.jbo.server.SequenceImpl(SEQ名称, this.getDBTransaction())).getSequenceNumber().intValue());
             }
         }
         super.doDML(operation, e);
     }

没有评论 :

发表评论