ADF-BC中的EO对象一般来说不需要写代码,但在实际开发中,有时需要增加一些额外的操作,这就需要写代码了。
这里把一些常用情景的代码贴出来,供大家参考。
增加EO涉及到主键的赋值问题,一般主键都是来自于Sequence。
下面分情况介绍。
1. 主键来自于Sequence,需要自己获取并在插入时赋值。
1.1 实现方法一:把Sequence设置在Custom Properties中,然后重写EO的create方法,获取SequenceNumber。
(1)首先为Department表,创建Sequence。
CREATE SEQUENCE "HR"."DEPARTMENTS_SEQ" MINVALUE 1 MAXVALUE 9990 INCREMENT BY 10 START WITH 280 NOCACHE NOORDER NOCYCLE ;
(2)双击EO,选择生成EO的实现类,注意勾上Create Method。
(3)选择Refresh on Insert
(4)在Custom Properties中,增加一个属性
Name:SequenceName。
Value:DEPARTMENTS_SEQ。该名称即是数据库中的Sequence的名称。
(5)Override EO的Create方法。
/** * Add attribute defaulting logic in this method. * @param attributeList list of attribute names/values to initialize the row */ protected void create(AttributeList attributeList) { super.create(attributeList); for (AttributeDef def : getEntityDef().getAttributeDefs()) { String sequenceName = (String)def.getProperty("SequenceName"); if (sequenceName != null) { SequenceImpl seq = new SequenceImpl(sequenceName, getDBTransaction()); //setAttribute(def.getIndex(), seq.getSequenceNumber()); setAttribute(def.getIndex(), Integer.valueOf(seq.getSequenceNumber().intValue())); } } } 以上代码说明了获取定义在Attribute上的Customer Properties。
(6)创建页面,拖放生成Form,拖放CreateInsert Operation。
点击Create或CreateInsert,会发现DepartmentId自动获取到了下一个Sequence值。
(7)如果要定制创建EO的代码,比如返回新建对象的ID值,我们可以在AM中增加方法
public int createDepartment(String name, int managerId) { EntityDefImpl deptDef = DepartmentsImpl.getDefinitionObject(); DepartmentsImpl newDepartment = (DepartmentsImpl)deptDef.createInstance2(getDBTransaction(), null); newDepartment.setDepartmentName(name); newDepartment.setManagerId(Integer.valueOf(managerId)); try { getTransaction().commit(); } catch (JboException ex) { getTransaction().rollback(); throw ex; } return newDepartment.getDepartmentId().intValue(); }
(7)运行AM,测试createDepartment
Project 下载:ADF_BC_EO(3).7z
1.2 实现方法二:使用Groovy Expresssion设置DepartmentId的默认值。
(1)注释掉DepartmentsImpl.java中的create方法。
(2)使用Groovy Expresssion设置DepartmentId的默认值。
(new oracle.jbo.server.SequenceImpl("DEPARTMENTS_SEQ",object.getDBTransaction())).getSequenceNumber()
(3)运行页面,效果和实现方法一一样。
(4)运行AM,测试createDepartment,效果和实现方法一一样。
这种方式显然比方法一要好,不用设置Custom Properties,不用重写create方法。
Project 下载:ADF_BC_EO(4).7z
参考文献:
1. http://oracleseeker.com/2008/11/11/how_to_create_new_entity/
没有评论:
发表评论