OAF 系列教程 四 新增CREATE
本节教程将会通过一个简单的新增功能,概要了解下基本的数据是如何通过前台录入并且保存到数据库中的。 主要包含以下几个方面的内容: 新增页面的开发; 新增页面对应的CO开发; AM中对应的业务逻辑处理 通过以上几个步骤基本就可以完成一个简单的新增功能的开发。 1.新增页面的开发创建CREATE页面在webui节点上点击鼠标右键,选择“NEW”
然后在弹出的窗口中选择“OA Components”中的“PAGE”即可
接着输入页面的相关信息即可: 名字:CreatePG 对应的路径:cux.oracle.apps.ak.oaflessons.webui
创建完成之后修改页面的顶层REGION的Id属性为creatRN,同时设定页面的AM为当前工程中的AM信息和页面标题等等信息: 创建页面组件创建页面上主要是为了让用户录入数据的,因此还需要创建相关的数据录入的组件信息。 说明:页面上的组件类型较多,此处过多介绍,后期准备有专门的章节进行讲解。 选中createRN节点,点击鼠标右键,选择“NEW”中的Region Using Wizard来创建页面上的组件及布局信息:
第一步,选择创建页面需要引用的AM中注册的VO信息,此处选择之前在VM中注册的EmpVO2
第二步,设置新建的REGION的Id信息及类型信息,此处创建的是TABLELAYOUT类型的RN,是页面组件的容器,用于布局组件信息 第三步,选择页面上需要显示的字段信息,此处根据实际需要来选择,后边也可以进行添加和修改 第四部,设置创建页面控件的属性信息,主要包括控件类型,提示信息等等 到此就基本完成了页面上的组件信息的创建,此处只是简单的做了一个表格布局,添加了控件,再添加控件步骤与此类似 此时便可以运行页面,看看实际的页面布局效果了:
目前只是展示页面,可以录入数据,但是还不能保存数据,还需进行对应的业务逻辑的处理,及CO和AM的开发,然后才能完成数据的保存操作。 2. AM中业务逻辑处理OAF中的业务逻辑处理主要包含两个方面: AM中的业务逻辑,主要包括相关的VO初始化及数据的保存操作; CO中的业务逻辑,主要包括获取用户输入信息以及调用AM中对应的方法响应用户的请求,向用户展示数据信息等等; AM中的逻辑说明AM是OAF程序中的业务层组件,主要用于注册VO及获取数据库连接等等,主要目的就是为了获取展示数据及同步数据的操作,一般包括VO的初始化、查询、保存、修改、删除等等操作,基本涉及到与数据库的操作都需要在AM中完成。 1. 新增初始化操作: /** * 新增初始化方法 * */ public void initCreate() { OAViewObject vo =this.getEmpVO2(); //增加过滤条件1=2 避免全查询 if(!vo.isPreparedForExecution()) { vo.setWhereClause("1=2"); vo.executeQuery(); } Row row =vo.createRow(); row.setNewRowState(Row.STATUS_INITIALIZED); vo.insertRowAtRangeIndex(0,row); } 以上方法主要是用于新增页面的初始化操作,一般主要是新增一个行的实例,还可以在此时对新增的VO行中的某些属性赋值,例如主键、当前用户等等,后边用于CO中进行调用; 2. 保存操作,主要用于响应前台用户事件,进行数据存储到数据库的保存操作: /** *数据持久化操作,用于提交事务处理 */ publicvoid apply() { this.getTransaction().commit(); } 3. CO中业务逻辑处理CO中的业务逻辑,主要包括获取用户输入信息以及调用AM中对应的方法响应用户的请求,向用户展示数据信息等等; 创建CO选中创建页面的“creatRN”节点,右键选择“set new controler”,即可进行CO的创建。 在弹出的窗口中输入CO的相关信息即可,主要是名字和路径信息,一般CO是和页面在同一个路径下的: CO说明CO中主要包括两个方法:processRequest和processFormRequest,其中 processRequest 主要用于一些页面的初始化操作,即页面加载完成之前的操作; processFormRequest 是用于页面加载之后响应用户的操作,即页面加载完成之后页面发生的事件都应该在processFormRequest中进行处理。 调用初始化方法在CO中如果要调用AM中的方法,需要先获取AM信息,而获取AM的代码如下: OAApplicationModule am = pageContext.getApplicationModule(webBean); 此例中需要在CreateCO 中的processRequest中添加如下代码: OAApplicationModule am =pageContext.getApplicationModule(webBean); //初始化VO am.invokeMethod("initCreate"); 可以看到此处调用的正式之前在AM中建立的初始化方法initCreate。CO中调用AM中的方法,均是通过am.invokeMethod的形式进行调用。 页面添加按钮选中“creatRN”,创建一个类型为“pageButtonBar”类型的REGION,并修改其Id为“buttonRN”
选中“buttonRN”,右键选择“NEW”,“ITEM”,并修改生成的ITEM组件的Id为submit,类型为submitButton,propmt属性为“保存” CO中调用保存方法在CO的processFormRequest中添加如下代码: OAApplicationModule am =pageContext.getApplicationModule(webBean); //初始化VO am.invokeMethod("apply"); 到此基本页面和业务逻辑的处理基本完成,可以运行页面进行测试。 4. 运行测试运行CreatePG,可以看到页面结构基本完成 由于本例中没有进行新增初始化的VO属性的赋值操作,而是该为直接在页面录入,因此可以直接输入信息保存进行测试,是否可以完成数据的录入和保存操作:
可以看到保存的时候会出错,由于SCOTT用户下的EMP表没有以下几个字段: CREATED_BYNUMBER(15), CREATION_DATEDATE, LAST_UPDATED_BYNUMBER(15), LAST_UPDATE_DATEDATE, LAST_UPDATE_LOGIN NUMBER(15) 因此保存的时候会出错,此处有两种处理方式,修改EMP表,添加上这几个字段;或者在APPS用户下创建一个同名的表,添加上这几个字段; 第一种方式需要修改系统表,但是比较省事儿;第二种方式需要创建新表,修改新表,还需要修改对应的EO,我们此处选择方式一(实际中也可以自己创建测试表来进行操作,更方便) |
- c# – 从WebBrowser控件中加载的文档中获取标题
- c – 非递归(非递归)Automake
- swift – 从远程通知打开ViewController
- Cursor--- sqlite
- ruby-on-rails – 在Rails中开始使用byebug
- c# – OSX上的Mono:找不到gtksharpglue-2.dll
- ruby-on-rails – 如何在Rails / ActiveRecord中
- [ReactNative集成CodePush教程][一] 注册CodePus
- 2530示例程序hex格式提示超过flash size 解决方法
- Flash Builder 找不到所需的 Adobe Flash Player