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 的节点,

双击打开后,里面已经有了一些方法了,主要有如下几类:

  1. DML Operation Class
  2. Set Attribute Value Class
  3. Get Attribute Value Class
  4. 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详解和实现(案例)的更多相关文章

  1. OAF_EO系列3 - Initialize详解和实现(案例)

    2014-06-14 Created By BaoXinjian

  2. OAF_EO系列6 - Delete详解和实现(案例)

    2014-06-14 Created By BaoXinjian

  3. OAF_EO系列4 - Create详解和实现(案例)

    2014-06-02 Created By BaoXinjian

  4. mongo 3.4分片集群系列之五:详解平衡器

    这个系列大致想跟大家分享以下篇章: 1.mongo 3.4分片集群系列之一:浅谈分片集群 2.mongo 3.4分片集群系列之二:搭建分片集群--哈希分片 3.mongo 3.4分片集群系列之三:搭建 ...

  5. ThreeJS系列1_CinematicCameraJS插件详解

    ThreeJS系列1_CinematicCameraJS插件详解 接着上篇 ThreeJS系列1_CinematicCameraJS插件介绍 看属性的来龙去脉 看方法作用 通过调整属性查看效果 总结 ...

  6. nginx高性能WEB服务器系列之四配置文件详解

    nginx系列友情链接:nginx高性能WEB服务器系列之一简介及安装https://www.cnblogs.com/maxtgood/p/9597596.htmlnginx高性能WEB服务器系列之二 ...

  7. mongo 3.4分片集群系列之六:详解配置数据库

    这个系列大致想跟大家分享以下篇章: 1.mongo 3.4分片集群系列之一:浅谈分片集群 2.mongo 3.4分片集群系列之二:搭建分片集群--哈希分片 3.mongo 3.4分片集群系列之三:搭建 ...

  8. Hexo系列(二) 配置文件详解

    Hexo 是一款优秀的博客框架,在使用 Hexo 搭建一个属于自己的博客网站后,我们还需要对其进行配置,使得 Hexo 更能满足自己的需求 这里所说的配置文件,是位于站点根目录下的 _config.y ...

  9. css3系列之transform详解translate

    translate translate这个参数的,是transform 身上的,那么它有什么用呢? 其实他的作用很简单,就是平移,参考自己的位置来平移 translate() translateX() ...

随机推荐

  1. Understanding Delegates in C#

    要学东西,还是得看第一手资料,看二.三手资料难免误会... http://www.codeproject.com/Articles/11657/Understanding-Delegates-in-C

  2. jsonp跨域js

    http://www.cnblogs.com/yuzhongwusan/archive/2012/12/11/2812849.html window.opener用法 http://www.cnblo ...

  3. 采用PHP函数uniqid生成一个唯一的ID

    http://www.daimajiayuan.com/sitejs-17815-1.html

  4. Linux perf tools

    http://techblog.netflix.com/2015/08/netflix-at-velocity-2015-linux.html

  5. HttpWebRequest's Timeout and ReadWriteTimeout — What do these mean for the underlying TCP connection?

    http://stackoverflow.com/questions/7250983/httpwebrequests-timeout-and-readwritetimeout-what-do-thes ...

  6. Oracle 12c RAC 搭建手册

    1  共享设备配置 1.1            设备划分说明 冗余策略 卷划分及大小说明 OCRVOTING Ocrvoting01 8G Ocrvoting02 8G Ocrvoting03 8G ...

  7. LINQ及EntityFramework何时从数据库返回数据,备忘

    Generally speaking, LINQ queries are executed when the application code processes data (for instance ...

  8. 如何处理ABBYY中出现错误代码142和55的问题

    在使用ABBYY FineReader 12OCR文字识别软件创建PDF文件时,有时会出现以下错误提示:内部程序错误..\Src\SpecialFontFactory.cpp,142和内部程序错误.. ...

  9. Unable to determine the principal end of an association between the types '***. The principal end of this association must be explicitly configured using either the relationship fluent API or data annotations.

    MVC中数据库表如果是一对一的主键关系时要加[Required]不然会出错Unable to determine the principal end of an association between ...

  10. javascript语法体系

    5 代表此属性ECMAScript 5(一般IE9+)才支持. 图解:-- 图解:      undefined,null,NaN Infinity ECMAScript 5禁止修改     每个函数 ...