OAF_EO系列5 - Update详解和实现(案例)
2014-06-14 Created By BaoXinjian
Initialize data(数据初始化):
用于新增记录对值Value的初始化
- 1.在Design time 时设定Page item的Default value.
- 2. 在Run time 时用编程方式设定, Default value的设定这里不说.留待后面”深入UI item”时再说.
用于在新增记录时,值的联动设定
- 1. 在页面时的联动,如果用户选择某个值,自动带出另外的控件的默认值,如两个list的联动,选择省份后自动带出城市
- 2. 在页面Commit时,根据用户输入的值,进行逻辑判断后,多某些其他相关栏位进行复制,这些栏位的默认值无法在一开始导入页面就决定,必须根据用户的输入的某些信息
用于新增记录对值WebBean控件属性的初始化
这里主要说说如何利用编程方式设定.
在建好EO后,如果你选择了生成JAVA文件及JAVA CLASS,我们在该EO下会发现有个<Your EO name>EOImpl.java 的节点,
双击打开后,里面已经有了一些方法了,主要有如下几类:
- DML Operation Class
- Set Attribute Value Class
- Get Attribute Value Class
- Validation Class
1. 那我们要初始化,很明显是要用到其中的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 类型。
2. 我们可以自已写个CLASS,把所有需要初始化的Attributes全部在里面设定好.如下:
public void setallAttribute(){
Number v_id = new Number(100);
setLineId(v_id);
String v_desc = new String(“ABCD”);
setItemDesc(v_desc);
}
3. 然后在其中的一个DML Operation class: create()中加入上述方法:
public void create(AttributeList attributeList){
super.create(attributeList);
setallAttribute();
}
这样,当你在Page上执行新增记录的动作时,你会发现有些字段就有了初始值了…
三、特殊的默认值设定
在初始值的定义中,有下面几个比较特殊的:
- Primary Key的初始化
- WHO字段的初始化
- 需要动态指定字段的初始化
1. 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字段上就有了一个初始值,即序列
取得的值,如果你不保存这条记录的话,就会出现跳号的情况,因此可把这个语句放在提交的方法里.
2. WHO字段的初始化
正常情况下,如果你的EO中包含了WHO字段的话,当你提交时,OAF会自动帮你初始化WHO字段,是不需要编写代码的,
如果你需要自已来获取WHO 信息的话, 仍可以利用OADBTransaction的方法来获取,主要有如下几个.
OADBTransaction transaction = getOADBTransaction();
transaction.getUserId()
transaction.getCurrentDBDate()
transaction.getResponsibilityApplicationId()
transaction.getResponsibilityId()
3. 需动态赋值字段的初始化
这种情况我们在做FORM时经常遇到,即根据某一种情况需实时从数据库中提取某一信息做为字段的值.
如果提取不出来,还要报出错误信息来并拒绝保存记录. 那么在OAF中如何实现呢?
我想了一下,可能的实现手段包括:
1. 利用VO 来实现(有时候,VO就相当于FORM中的Recordgroup),需动态的为VO定义WHERE条件,并获取VO的查询结果来实现.
2. 利用JDBC或SQLJ来实现,这两种模式均支持在JAVA中直接使用标准SQL语句.
4. 利用JDBC和Database交互获取默认值
但那仅限于DML语句,象Update, Delete, Insert等等.这里我们需要执行一个SQL查询,并有结果集返回.
然后把结果集中的某个字段赋给EO的某个Attribute. 我想,这个在以后OAF开发中是非常有用的.
经研究, 成功实现,伪码如下:
--------------------------------------------------------------------
public void create(AttributeList attributeList)
{
super.create(attributeList);
try
{
OracleConnection conn = (OracleConnection)transaction.getJdbcConnection(); //获取当前连接
OracleStatement stmt = (OracleStatement)conn.createStatement(); //生成语句
OracleResultSet rset = (OracleResultSet)stmt.executeQuery("select msi.segment1 from mtl_system_items_b msi"); //执行查询
while (rset.next()) //向前转移指针
{
setItemDesc(rset.getString(1)); //获取结果集中的第一个字段
break; //假定只取一条记录
}
rset.close(); //关闭结果集
} catch(SQLException ex) {}
//process exception
}
------------------------------------------------------------------------
注意, JDBC的方法往往要抛出异常,为java.sql.SQLException. 如果不进行捕获,OAF会报错.
1. 打开页面时,页面调用CO中的processRequest进行初始化
2. CO调用AM中的方法,新增VO Row
3. VO在新增Row时,系统会自动调用EO中的方法,在EO SetAttribute中进行所有值得初始化
4. 最后页面呈现的两个默认值被初始化
五、案例 - 页面保存时对页面某些栏位进行值判断并复制
1. 打开页面输入值后保存
2. 系统保存时,调用CO,后调用AM,AM中进行Commit时,系统会自动调用EO中的ValidateEntity,可以在这里进行值得组合
3. 查看数据库,查看comments通过页面值组合后得出
Thanks and Regards
参考: Tony Liu 深入EO系列
OAF_EO系列5 - Update详解和实现(案例)的更多相关文章
- OAF_EO系列3 - Initialize详解和实现(案例)
2014-06-14 Created By BaoXinjian
- OAF_EO系列6 - Delete详解和实现(案例)
2014-06-14 Created By BaoXinjian
- OAF_EO系列4 - Create详解和实现(案例)
2014-06-02 Created By BaoXinjian
- mongo 3.4分片集群系列之五:详解平衡器
这个系列大致想跟大家分享以下篇章: 1.mongo 3.4分片集群系列之一:浅谈分片集群 2.mongo 3.4分片集群系列之二:搭建分片集群--哈希分片 3.mongo 3.4分片集群系列之三:搭建 ...
- ThreeJS系列1_CinematicCameraJS插件详解
ThreeJS系列1_CinematicCameraJS插件详解 接着上篇 ThreeJS系列1_CinematicCameraJS插件介绍 看属性的来龙去脉 看方法作用 通过调整属性查看效果 总结 ...
- nginx高性能WEB服务器系列之四配置文件详解
nginx系列友情链接:nginx高性能WEB服务器系列之一简介及安装https://www.cnblogs.com/maxtgood/p/9597596.htmlnginx高性能WEB服务器系列之二 ...
- mongo 3.4分片集群系列之六:详解配置数据库
这个系列大致想跟大家分享以下篇章: 1.mongo 3.4分片集群系列之一:浅谈分片集群 2.mongo 3.4分片集群系列之二:搭建分片集群--哈希分片 3.mongo 3.4分片集群系列之三:搭建 ...
- Hexo系列(二) 配置文件详解
Hexo 是一款优秀的博客框架,在使用 Hexo 搭建一个属于自己的博客网站后,我们还需要对其进行配置,使得 Hexo 更能满足自己的需求 这里所说的配置文件,是位于站点根目录下的 _config.y ...
- css3系列之transform详解translate
translate translate这个参数的,是transform 身上的,那么它有什么用呢? 其实他的作用很简单,就是平移,参考自己的位置来平移 translate() translateX() ...
随机推荐
- 学号20145220 《Java程序设计》第5周学习总结
学号20145220 <Java程序设计>第5周学习总结 教材学习内容总结 语法与继承结构 8.1.1使用try.catch java中所有的错误都会被打包为对象,并提供了特有的语句进行处 ...
- UVALive-4329 Ping pong (树状数组)
题目大意:有n个数排成一列,问从中能找出几个三元组(ai,aj,ak)满足i<j<k并且这三个数严格单调. 题目分析:枚举中间的数字aj,如果aj前面有c(j)个数a(j)小,后面有d(j ...
- CodeForces 558A
Description Amr lives in Lala Land. Lala Land is a very beautiful country that is located on a coord ...
- 【BZOJ1011】【HNOI2008】遥远的行星
奇奇怪怪突然出戏的奇葩题 原题: 直线上N颗行星,X=i处有行星i,行星J受到行星I的作用力,当且仅当i<=AJ.此时J受到作用力的大小为 Fi->j=Mi*Mj/(j-i) 其中A为很小 ...
- CentOS 6 DEPRECATED
Created by YEISON CAMARGO, last modified by John Boteler on 2016.02.02 Go to start of metadata Abo ...
- Tensorflow 上手——手写数字识别
下面代码是Tensorflow入门教程中的代码,实现了一个softmax分类器. 第4行是将data文件夹下的mnist数据压缩包读取为tf使用的minibatch字典. 第6-11行定义了所用的变量 ...
- SVG 箭头线绘制
SVG并没有提供原生的Arrow标签,这就需要自己的组合了,通过marker标签和path标签可以完美的模仿出箭头线,无论需要多少个箭头线,只需引用同一个marker即可: <svg id=&q ...
- unity中的欧拉角
unity中欧拉角用的是heading - pitch -bank系统(zxy惯性空间旋转系统):当认为旋转顺序是zxy时,是相对于惯性坐标系旋转.当认为旋转顺序是yxz时,是相对于物体坐标系旋转. ...
- 【转】 C#程序以管理员权限运行
C#程序以管理员权限运行在Vista 和 Windows 7 及更新版本的操作系统,增加了 UAC(用户账户控制) 的安全机制,如果 UAC 被打开,用户即使以管理员权限登录,其应用程序默认情况下也无 ...
- IntelliJ IDEA中配置reportNG
找了好多资料,各种设置都是eclipse上面的.后来发现原来就在Run->Edit Configurations->TestNG->Configuration->Listenn ...