OAF_架构MVC系列4 - Control的概述(概念)
2014-06-18 Created By BaoXinjian
Control层位于Model层和View层的中间,连接了Model层和View层,
主要存在两个功能
- 操作/初始化UI和数据
- 接受和处理页面上的用户的各种事件,并进行分发
本文的基本结构
- Designand Create an OA Controller - 基本概念和建立
- Handling an HTTP GET - 如何处理HTTP GET请求
- Data层面 - 进行初始化
- WebBean层面
- WebBean层面 - 动态修改WebBean的属性
- WebBean层面 - 动态创建WebBean
- Handing an HTTP POST - 如何处理HTTP POST请求
- processFormData( )
- processFormRequest( )
- Model Interaction - Contorl层和Model层的整合
- 在CO中通过pageContext.getRootApplicationModule()获取AM
- 查询 - 在CO中调用AM的Search方法
- 新增 - 在CO中调用AM的Create方法
- 删除 - 在CO中调用AM的Delete方法
- 提交 - 在CO中调用AM的Commit方法
OAF构成原件中Contorller的位置
二、具体解析
1. Designand Create an OA Controller - 基本概念和建立
选中PageRN,右击Set New Controller or Edit Contorller
系统会自动产生HTTP Get方法(processRequset)和HTTP Post方法(processFormRequest)
2. Handling an HTTP GET - 如何处理HTTP GET请求
2.1 修改WebBean的属性
比如动态修改TableText
processRequest(OAPageContext pageContext, OAWebBean webBean)
{
// Always call this before adding your own code. super.processRequest(pageContext, webBean);
OATableBean table = (OATableBean)webBean.findIndexedChildRecursive("OrdersTable");
if (table == null)
{
MessageToken[] tokens = { new MessageToken("OBJECT_NAME", "OrdersTable")};
throw new OAException("ICX", "FWK_TBX_OBJECT_NOT_FOUND", tokens);
}
// Set the purchase-order specific "control bar" select text:
// "Select Purchase Order(s) and..."
String selectPOText = pageContext.getMessage("ICX", "FWK_TBX_T_SELECT_PO", null);
table.setTableSelectionText(selectPOText);
}
2.2 创建WebBean
比如动态新增Table Row
OATableLayoutBean tableLayout = (OATableLayoutBean)findIndexedChildRecursive("tableLayout");
// Create a row layout and give it the unique ID "topRow"
OARowLayoutBean row = (OARowLayoutBean)createWebBean(pageContext,
OAWebBeanConstants.ROW_LAYOUT_BEAN,
null, // no need to specify a data type
"topRow");
// Create a row layout and give it the unique ID "bottomRow"
OARowLayoutBean anotherRow = (OARowLayoutBean)createWebBean(pageContext,
OAWebBeanConstants.ROW_LAYOUT_BEAN,
null, // no need to specify a data type
"bottomRow");
// Always check to see if a web bean exists.
if (tableLayout != null)
{
// Add the two row layout beans to the table so the "topRow" renders above
// the "bottomRow"
tableLayout.addIndexedChild(row);
tableLayout.addIndexedChild(anotherRow);
}
3. Handing an HTTP POST - 如何处理HTTP POST请求
public void processFormRequest(OAPageContext pageContext, OAWebBean webBean)
{
// Always call this before adding your code
super.processFormRequest(pageContext, webBean);
// Pressing the Go button causes the search to be executed. If (pageContext.getParameter("Go") != null)
{
String orderNumber = pageContext.getParameter("SearchOrder");
String created = pageContext.getParameter("Created");
String showMyOrders = pageContext.getParameter("MyOrders");
OAApplicationModule am = pageContext.getApplicationModule(webBean);
// All parameters passed using invokeMethod() must be serializable.
Serializable[] parameters = { orderNumber, created, showMyOrders };
am.invokeMethod("search", parameters);
// Now forward back to this page so we can implement UI changes as a
// consequence of the query in processRequest(). NEVER make UI changes in
// processFormRequest().
pageContext.setForwardURLToCurrentPage(null, // no parameters to pass
true, // retain the AM
OAWebBeanConstants.ADD_BREAD_CRUMB_NO,
OAWebBeanConstants.IGNORE_MESSAGES);
}
} // end processFormRequest();
4. Model Interaction - Contorl层和Model层的整合
4.1 在Am中调用Search方法,具体如何Search则定义在AM中
processFormRequest(OAPageContext pageContext, OAWebBean webBean)
{
// Check to see if the "Go" button was pressed...
if (pageContext.getParameter("gButton") != null)
{
// Get the search criteria
String orderNumber = pageContext.getParameter("SearchOrder");
String created = pageContext.getParameter("Created");
String showMyOrders = pageContext.getParameter("MyOrders");
OAApplicationModule am = pageContext.getApplicationModule(webBean);
// All parameters passed using invokeMethod() must be serializable. Serializable[] parameters = { orderNumber, created, showMyOrders };
am.invokeMethod("search", parameters);
}
}
4.2 在Am中调用Create方法,具体如何Create则定义在AM中
processFormRequest(OAPageContext pageContext, OAWebBean webBean)
{
OAApplicationModule am = pageContext.getApplicationModule(webBean);
am.invokeMethod("create", null);
}
4.3 在Am中调用Delete方法,具体如何Delete则定义在AM中
processFormRequest(OAPageContext pageContext, OAWebBean webBean)
{
if (pageContext.getParameter("DeleteYesButton") != null)
{
// User has confirmed that she wants to delete this purchase order.
// Invoke a method on the AM to set the current row in the VO and
// call remove() on this row.
String poHeaderId = pageContext.getParameter("poHeaderId");
Serializable[] parameters = { poHeaderId };
OAApplicationModule am = pageContext.getApplicationModule(webBean); am.invokeMethod("delete", parameters);
}
4.4 在Am中调用Commit方法,具体如何Commit则定义在AM中
processFormRequest(OAPageContext pageContext, OAWebBean webBean)
{
if (pageContext.getParameter("Approve") != null)
{
OAApplicationModule am = pageContext.getApplicationModule(webBean);
am.invokeMethod("Apply");
}
}
Thanks and Regards
OAF_架构MVC系列4 - Control的概述(概念)的更多相关文章
- OAF_架构MVC系列3 - View的概述(概念)
2014-06-18 Created By BaoXinjian
- OAF_架构MVC系列2 - Model的概述(概念)
2014-06-22 Created By BaoXinjian
- OAF_架构MVC系列1 - MVC的概述(概念)
2015-04-03 Created By BaoXinjian
- mvc项目架构分享系列之架构搭建初步
mvc项目架构分享系列之架构搭建初步 Contents 系列一[架构概览] 0.项目简介 1.项目解决方案分层方案 2.所用到的技术 3.项目引用关系 系列二[架构搭建初步] 4.项目架构各部分解析 ...
- Asp.net mvc项目架构分享系列之架构概览
Asp.net mvc项目架构分享系列之架构概览 Contents 系列一[架构概览] 0.项目简介 1.项目解决方案分层方案 2.所用到的技术 3.项目引用关系 系列二[架构搭建初步] 4.项目架构 ...
- Asp.net mvc项目架构分享系列之架构搭建初步
copy to:http://www.cnblogs.com/ben121011/p/5014795.html 项目架构各部分解析 Core Models IDAL MSSQLDAL IBLL BLL ...
- 【ASP.NET MVC系列】浅谈ASP.NET MVC八大类扩展(上篇)
lASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操 ...
- 【ASP.NET MVC系列】浅谈ASP.NET MVC运行过程
ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...
- 【ASP.NET MVC系列】浅谈Google Chrome浏览器(操作篇)(下)
ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...
随机推荐
- 工作中遇到的问题--JPA 一对多查询
/** * order by gs.updateDate desc * SELECT gs FROM GoodStatus gs WHERE gs IN( * @ ...
- DELPHI相应鼠标滚轮
在鼠标的MouseWheel事件里写入以下内容 if WheelDelta < 0 then SendMessage(scrollBox1.Handle, WM_VSCROLL, SB_L ...
- Linux系统编程@进程通信(一)
进程间通信概述 需要进程通信的原因: 数据传输 资源共享 通知事件 进程控制 Linux进程间通信(IPC)发展由来 Unix进程间通信 基于System V进程间通信(System V:UNIX系统 ...
- Docker基础技术
http://coolshell.cn/articles/17200.html http://coolshell.cn/articles/17061.html http://coolshell.cn/ ...
- 【Unity3D插件】在Unity中读写文件数据:LitJSON快速教程
作者:王选易,出处:http://www.cnblogs.com/neverdie/ 欢迎转载,也请保留这段声明.如果你喜欢这篇文章,请点[推荐].谢谢! 介绍 JSON是一个简单的,但功能强大的序列 ...
- PostgreSQL: Query for location of global tablespace?
Q: I have been trying to make our database clients pro-active about not filling up the partition on ...
- vb6异步ADO操作
Private withevents M_Conn as adodb.connection Private CmdFinished as boolean sub somesub AdoCmd.Exec ...
- 1.Nexus安装与配置
1.Nexus下载下载地址:http://www.sonatype.org/nexus/go/下载后的文件:nexus-2.11.4-01-bundle.zip安装:直接解压到某个目录即可解压后,会有 ...
- OpenJudge计算概论-中位数
/*============================================================== 中位数 总时间限制: 2000ms 内存限制: 65536kB 描述 ...
- Linux- Bond
---------------check NIC----------------- ①mii-tool 命令 ②ethtool 命令 -i 参数,显示网卡的驱动信息, -S 参数,底层工作状态信息③d ...