OAF—Entity Object之Initialize data
Initialize data(数据初始化):
主要用于新增记录,方法主要由两个:
1. 在Design time时设定Page item的Default value.
2. 在Run time时用编程方式设定.
Default value的设定这里不说.留待后面”深入UI item”时再说.
这里主要说说如何利用编程方式设定.
在建好EO后,如果你选择了生成JAVA文件及JAVA CLASS,我们在该EO下会发现有个<Your EO name>EOImpl.java的节点,
双击打开后,里面已经有了一些方法了,主要有如下几类:
DML Operation Class
Set Attribute Value Class
Get Attribute Value Class
Validation Class
那我们要初始化,很明显是要用到其中的Set Attribute Value Class.这些方法名字都是set +<Attribute Name>.例如:
public void setHeaderId(Number value)
{
setAttributeInternal(HEADERID, value);
}
传入参数是value,然后利用setAttributeInternal方法把value赋给HEADERID(注意,
这个HEADERID是EO Attributes的别名.在EO中为Attribute赋值主要有如下两个方法:
setAttribute(int index, String lang , object val)
index代表Attribute在EO中的位置(注意,只在显示在Page上的Attribute中排序),也可用EO Attributes的别名代替.
val代表传入的值,lang代表语言,可省略。例如:
Number price = new Number(100);
setAttribute(5, price);
按照FORM的习惯,我们可能会写成 setAttribute(5,100),
请注意,这是错误的,因为JAVA会认为这个100是基本类型中int类型,而不是object类型。
setAttributeInternal(int index,Object val)
除了没有语言的区分外,与setAttribute一致.
这样,我们可以自已写个CLASS,把所有需要初始化的Attributes全部在里面设定好.如下:
public void setallAttribute()
{
Number v_id = new Number(100);
setLineId(v_id);
String v_desc = new String(“ABCD”);
setItemDesc(v_desc);
...
}
然后在其中的一个DML Operation class: create()中加入上述方法:
public void create(AttributeList attributeList)
{
super.create(attributeList);
setallAttribute();
}
这样,当你在Page上执行新增记录的动作时,你会发现有些字段就有了初始值了…
在初始值的定义中,有下面几个比较特殊的:
1. Primary Key的初始化
2. WHO字段的初始化
3. 需要动态指定字段的初始化
Primary Key的初始化
调用OADBTransaction来取得Sequence值,并通过SetAttribute( )方法赋予Primary Key即可.代码如下:
public void create(AttributeList attributeList)
{
super.create(attributeList);
OADBTransaction transaction = getOADBTransaction();
Number lineid = transaction.getSequenceValue("xx_order_line_s");
setLineId(lineid);
}
上面的代码是写在EO的 create( )方法里的,这样的话,当你新增一个空记录时,在lineid字段上就有了一个初始值,即序列
取得的值,如果你不保存这条记录的话,就会出现跳号的情况,因此可把这个语句放在提交的方法里.
WHO字段的初始化
正常情况下,如果你的EO中包含了WHO字段的话,当你提交时,OAF会自动帮你初始化WHO字段,是不需要编写代码的,
如果你需要自已来获取WHO信息的话,仍可以利用OADBTransaction的方法来获取,主要有如下几个.
OADBTransaction transaction = getOADBTransaction();
transaction.getUserId()
transaction.getCurrentDBDate()
transaction.getResponsibilityApplicationId()
transaction.getResponsibilityId()
需动态赋值字段的初始化
这种情况我们在做FORM时经常遇到,即根据某一种情况需实时从数据库中提取某一信息做为字段的值.
相关新闻>>
- 发表评论
-
- 最新评论 更多>>