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. HDU-4521 小明系列问题――小明序列(线段树)

    题目大意:求LIS,但是要求LIS中相邻的两个元素之间的距离要大于d. 题目分析:线段树.节点(l,r)保存信息为LIS的最后一个元素落在[l,r]之间的最大长度.从第d+2个元素开始查询更新操作,但 ...

  2. [hdu 4416]Good Article Good sentence

    最近几天一直在做有关后缀自动机的题目 感觉似乎对后缀自动机越来越了解了呢!喵~ 这题还是让我受益颇多的,首先搞一个后缀自动机是妥妥的了 可是搞完之后呢? 我们来观察 step 这个变量,每个节点的 s ...

  3. 论文笔记之:Attention For Fine-Grained Categorization

    Attention For Fine-Grained Categorization Google ICLR 2015 本文说是将Ba et al. 的基于RNN 的attention model 拓展 ...

  4. curl网站开发指南

    我一向以为,curl只是一个编程用的函数库. 最近才发现,这个命令本身,就是一个无比有用的网站开发工具,请看我整理的它的用法. =================================== ...

  5. kmeans算法

    # coding:utf-8 import numpy as np import matplotlib.pyplot as plt def dis(x, y): #计算距离 return np.sum ...

  6. QQ登入(3)QQ空间分享-无需登入

    public void myclick2(View v){ //QZone分享, SHARE_TO_QQ_TYPE_DEFAULT 图文,SHARE_TO_QQ_TYPE_IMAGE 纯图 ,SHAR ...

  7. Linux文件普通权限

    1.文件所有者,所属用户组,其他用户1)文件所有者:创建文件的用户2)所属用户组:文件属于哪个用户组3)其他用户:不是文件所有者,不属于文件所属用户组的用户,称为其他用户 2.Linux文件权限我们切 ...

  8. JavaScript对SVG进行操作的相关技术

    原文地址:http://www.ibm.com/developerworks/cn/xml/x-svgscript/   本文主要介绍在 SVG 中通过编程实现动态操作 SVG 图像的知识. SVG ...

  9. unity, ugui input field

    ugui Input Field,获取输入的字符串. 错误方法: string content=inputField.FindChild("Text").text; 这样得到的是输 ...

  10. python之路之正则表达式

    匹配格式^ 匹配字符串的开头$ 匹配字符串的结尾. 除了换行符外的所有字符[...] 用来表示一组字符,,单独列出:[amk]匹配'a','m'或'k'[^..] 不在[]中的字符:[^abc]匹配除 ...