1.思想
明确的MVC模式,把所有的方法声明代码实现都写在componentcontroller里,在view里声明方法去调就可以了。
2.节点及类和方法的实现flightinfo(sflight类型):
carrid
connid
flighttab(sflight类型):
carrid
connid
fldate
planetype
seatmax
seatsocc
isreadonly:
isread(boolean)
issave(boolean)
两个内表:(通过se11定义)
zit_bookings zit_flighttab
***************** 类zcl_net310_flightmodel: *************************************************************************
Attributes:
ty_flights static type sflight 航班
zit_outtab static type ty_sflight table of flights
zit_outbook static type zit_bookings 航班订票
methods:
方法名称 参数 参数类型 说明
read_flights i_carrid importing type sflight-carrid 航运承运人id 读取航班信息表
i_connid importing type sflight-connid 航班连接id
e_flights exporting type zit_flighttab 航班
read_bookings i_carrid importing type sflight-carrid 航运承运人id 读取某一航班的具体信息
i_connid importing type sflight-connid 航班连接id
i_fldate importing type sflight-fldate 航班日期
e_bookings exporting type zit_bookings 航班订票
insert_flights i_flights importing type zit_flighttab inter table 插入一条航班记录
delete sel_carrid importing type sflight-carrid 航运承运人id 删除一条航班记录
sel_connid importing type sflight-connid 航班连接id
modify_flights i_flights importing type zit_flighttab inter table 通过内表更新航班记录
所有方法均定义成static public
***************************************************************************************************************************
方法的具体实现:
method READ_FLIGHTS.
data i_lines type i.
if i_carrid = '' or i_connid = ''.
select * from sflight into table zit_outtab.
else.
select * from sflight into table zit_outtab where carrid = i_carrid and connid = i_connid.
endif.
e_flights = zit_outtab.
describe table e_flights lines i_lines.
if i_lines <= 0.
return.
endif.
endmethod.
method READ_BOOKINGS.
select * from sbook into table zit_outbook where carrid = i_carrid and connid = i_connid and fldate = i_fldate.
*select * from sbook into table zit_outbook.
e_bookings = zit_outbook.
endmethod.
method INSERT_FLIGHTS.
insert sflight from table i_flights ACCEPTING DUPLICATE KEYS.
endmethod.
method DELETE.
delete from sflight where carrid = sel_carrid and connid = sel_connid.
endmethod.
method MODIFY_FLIGHTS.
*update,不可以改变关键字段的值,但可以改变非主关键字段的值。
*modify覆盖具有主关键字的数据条目,找不到已存在相同主关键字的条目就将新行添加到数*据库表中。
update sflight from table i_flights.
endmethod.
3.get_user_input
method GET_USER_INPUT .
data: lr_node_flightinfo type ref to if_wd_context_node,
lr_elem_flightinfo type ref to if_wd_context_element,
ls_flightinfo type if_componentcontroller=>element_flightinfo.
* get user input
lr_node_flightinfo = wd_context->get_child_node(
name = if_componentcontroller=>wdctx_flightinfo
).
lr_elem_flightinfo = lr_node_flightinfo->get_element( ).
lr_elem_flightinfo->get_static_attributes(
importing
static_attributes = es_flightinfo
).
endmethod.
4.get_flights
method GET_FLIGHTS .
data: ls_flightinfo type sflight,
lt_flighttab type zit_flighttab,
lr_node_flighttab type ref to if_wd_context_node.
* get flightinfo key from context
wd_this->get_user_input(
importing
es_flightinfo = ls_flightinfo
).
* get related flighttab
CALL METHOD zcl_net310_flightmodel=>read_flights
exporting
i_carrid = ls_flightinfo-carrid
i_connid = ls_flightinfo-connid
importing
e_flights = lt_flighttab.
*store flighttab in context
lr_node_flighttab = wd_context->get_child_node(
name = if_componentcontroller=>wdctx_flighttab
).
lr_node_flighttab->bind_table( lt_flighttab ).
endmethod.
5.handle_from_inputview
在inputview的outbound里定义了一个参数actiontype,这里也要定义一个相同类型的参数actiontype接收,以区别是显示还是修改,实现页面的共用。
method HANDLEFROM_INPUT_VIEW .
data lo_nd_isreadonly type ref to if_wd_context_node.
data lo_el_isreadonly type ref to if_wd_context_element.
data ls_isreadonly type wd_this->element_isreadonly.
DATA lo_COMPONENTCONTROLLER TYPE REF TO IG_COMPONENTCONTROLLER .
lo_COMPONENTCONTROLLER = wd_this->get_componentcontroller_ctr( ).
lo_componentcontroller->get_flights(
).
* set the isreadonly
lo_nd_isreadonly = wd_context->get_child_node(
name = wd_this->wdctx_isreadonly
).
lo_el_isreadonly = lo_nd_isreadonly->get_element( ).
*lo_el_isreadonly->get_static_attributes(
* importing
* static_attributes = ls_isreadonly
*).
case actiontype.
when 'V'.
ls_isreadonly-isread = 'X'.
ls_isreadonly-issave = ''.
lo_el_isreadonly->set_static_attributes(
exporting
static_attributes = ls_isreadonly
).
when 'U'.
ls_isreadonly-isread = ''.
ls_isreadonly-issave = 'X'.
lo_el_isreadonly->set_static_attributes(
exporting
static_attributes = ls_isreadonly
).
endmethod.
6.store_data
method STORE_DATA .
data: lo_nd_flighttab type ref to if_wd_context_node,
lo_el_flighttab type ref to if_wd_context_element,
lt_flighttab type wd_this->elements_flighttab.
* get context node
lo_nd_flighttab = wd_context->get_child_node( name = wd_this->wdctx_flighttab ).
*
lo_nd_flighttab->get_static_attributes_table(
importing
table = lt_flighttab
).
* call the method <insert_flights>
call method zcl_net310_flightmodel=>insert_flights
exporting
i_flights = lt_flighttab.
endmethod.
7.create_view_wddoinit
method WDDOINIT .
DATA lo_nd_flighttab TYPE REF TO if_wd_context_node.
DATA lo_el_flighttab TYPE REF TO if_wd_context_element.
DATA ls_flighttab TYPE wd_this->element_flighttab.
data lt_flighttab type zit_flighttab.
* navigate from <CONTEXT> to <FLIGHTTAB> via lead selection
lo_nd_flighttab = wd_context->get_child_node( name = wd_this->wdctx_flighttab ).
lo_nd_flighttab->invalidate( ).
free lt_flighttab.
* @TODO handle not set lead selection
IF lo_nd_flighttab IS INITIAL.
ENDIF.
* get element via lead selection
lo_el_flighttab = lo_nd_flighttab->get_element( ).
* set attributes
do 5 times.
ls_flighttab-carrid = ''.
ls_flighttab-connid = ''.
ls_flighttab-fldate = ''.
ls_flighttab-planetype = ''.
ls_flighttab-seatsmax = ''.
ls_flighttab-seatsocc = ''.
append ls_flighttab to lt_flighttab.
enddo.
* @TODO handle not set lead selection
IF lo_el_flighttab IS not INITIAL.
lo_nd_flighttab->invalidate( ).
ENDIF.
* alternative access via index
* lo_el_flighttab = lo_nd_flighttab->get_element( index = 1 ).
* @TODO handle non existant child
* IF lo_el_flighttab IS INITIAL.
* ENDIF.
lo_nd_flighttab->bind_table( lt_flighttab ).
endmethod.
8.delete_data
method DELETE_DATA.
data: lo_nd_flighttab type ref to if_wd_context_node,
* lt_flighttab type wd_this->elements_flighttab,
lo_el_flighttab type ref to if_wd_context_element,
ls_flighttab type wd_this->element_flighttab.
lo_nd_flighttab = wd_context->get_child_node(
name = if_componentcontroller=>wdctx_flighttab
).
*lo_nd_flighttab->get_static_attributes_table(
* importing
* table = lt_flighttab
*).
lo_el_flighttab = lo_nd_flighttab->get_element( ) .
lo_el_flighttab->get_static_attributes(
importing
static_attributes = ls_flighttab
).
* calling the method delete in the class zcl_net310_flightmodel
call method zcl_net310_flightmodel=>delete
exporting
sel_carrid = ls_flighttab-carrid
sel_connid = ls_flighttab-connid.
endmethod.
9.modify_flights
method MODIFY_FLIGHTS .
data: lo_nd_flighttab type ref to if_wd_context_node,
lt_flighttab type wd_this->elements_flighttab.
* get the context node
lo_nd_flighttab = wd_context->get_child_node(
name = if_componentcontroller=>wdctx_flighttab
).
lo_nd_flighttab->get_static_attributes_table(
importing
table = lt_flighttab
).
call method zcl_net310_flightmodel=>modify_flights
exporting
i_flights = lt_flighttab.
endmethod.
分享到:
相关推荐
在这个"学生管理系统"的例子中,我们主要探讨以下几个关键知识点: 1. **C#编程语言**:作为开发语言,C#是微软公司推出的一种面向对象的编程语言,它支持.NET框架,具有高效、安全、可扩展性等特点。在学生管理...
总结来说,这个 Django CRUD 完整版例子是一个基础的 Web 应用,展示了如何使用 Django 来创建、读取、更新和删除数据。对于初学者来说,它是理解 Django 工作原理和掌握 CRUD 基础操作的好起点。通过深入研究这个...
在这个"Maven+SSM CRUD例子"中,开发者提供了一个全面的示例,它演示了如何在Java后端使用Spring、SpringMVC和MyBatis框架来实现这些基本操作。下面我们将深入探讨这些关键知识点。 1. Maven: Maven是Java项目...
在本示例中,我们探讨的是一个基于Spring 3.2和Hibernate 4的完整CRUD(创建、读取、更新、删除)操作演示。这个压缩包文件包含了实现这一功能所需的全部资源,让我们深入理解如何将这两个强大的Java框架集成到实际...
本教程将通过一个具体的CRUD(Create、Read、Update、Delete)例子来深入理解JPA的工作原理和用法。** ### 创建(Create) 在JPA中,创建新记录通常涉及以下步骤: 1. **定义实体类**:首先,我们需要创建一个...
Flex CRUD例子是一个全面的教程,演示了如何使用Flex和Java技术构建一个完整的Web应用。它涵盖了客户端的用户交互、数据验证,以及服务器端的数据操作和业务逻辑。对于学习和理解Flex与Java之间的集成,以及如何实现...
在本教程中,我们将深入探讨如何使用Apache Ant工具来完成一个完整的用户管理系统的开发,实现基本的创建(Create)、读取(Read)、更新(Update)和删除(Delete)操作,也就是常说的CRUD功能。Apache Ant是Java...
本文将深入探讨这些概念,并结合实际例子,帮助你理解如何在不同的数据库系统中执行完整的CRUD操作。 一、创建(Create) 创建操作用于在数据库中添加新的记录。这通常通过SQL的INSERT语句完成。例如,如果我们有...
通过学习这个小例子,开发者可以了解到如何将这些技术融合在一起,创建一个完整的、具备前端交互和后端数据管理的Web应用。这有助于提升开发者在实际项目中的综合技能,特别是在处理复杂业务逻辑和数据操作时。
Spring MVC 是一个基于 Spring 框架的轻量级 Web 开发框架,它为构建模型-视图-控制器(MVC)结构的应用程序提供了强大的支持。在这个完整的Spring MVC CRUD操作实例中,我们将深入探讨如何使用Spring MVC实现创建...
**使用Hibernate的一个完整例子** Hibernate 是一个开源的对象关系映射(ORM)框架,它简化了Java应用程序对数据库的操作。在本教程中,我们将探讨如何在实际项目中使用Hibernate进行数据库操作,通过一个完整的...
通过这个项目,你可以学习到如何使用JSP创建动态页面,如何利用Servlet处理业务逻辑,以及如何设计和实现一个完整的Web应用程序。同时,还可以探索数据库交互、MVC模式的应用,以及Web项目的部署和配置。
通过这种方式,可以快速构建一个具有完整CRUD功能的Web应用。 在`ssh2demo`这个压缩包中,包含了整个项目的源代码和配置文件。开发者可以查看Action类(如`AddAction`、`DeleteAction`等),了解如何根据用户请求...
在这个“NHibernate 一个完整的例子代码”中,我们可以深入理解如何使用NHibernate进行数据访问。 首先,让我们来理解一下ORM的概念。ORM允许程序员用对象模型来描述数据库,通过自动映射,实现了对象与数据库记录...
在本项目中,我们主要探讨的是使用`.NET Core`框架,配合`Dapper`轻量级ORM库,以及前端的`Bootstrap`和`Ajax`技术,实现一个完整的CRUD(创建、读取、更新和删除)操作应用。下面将详细阐述这些技术及其在项目中的...
**标题解析:**“hibernate的第一个例子”表明这是一个关于Hibernate框架的基础教程,主要目标是展示如何使用Hibernate进行数据持久化操作。 **描述分析:**描述提到这是一个超级简单的例子,包含一个持久化对象...
本教程将通过一个名为“symblog”的实例,深入探讨如何利用Symfony2搭建一个完整的博客平台。 ### 1. 安装Symfony2 首先,你需要在本地环境中安装Symfony2。这通常涉及到下载Composer,它是PHP的依赖管理工具。...
LINQ (Language Integrated Query) 是.NET框架中引入的一项强大技术,它允许开发人员在C#或Visual Basic等语言中直接编写查询,使代码更...这个例子是一个很好的起点,可以帮助你开始使用LINQ to SQL进行数据库开发。
通过这个例子,初学者可以学习到如何配置SSH框架,如何设计和实现CRUD操作,以及如何将它们整合到一起形成一个完整的应用。同时,了解数据库的设计、SQL的编写以及如何利用ORM进行数据操作也是重要的学习内容。