`
loky
  • 浏览: 181002 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

一个完整的CRUD例子

阅读更多
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完整版

    总结来说,这个 Django CRUD 完整版例子是一个基础的 Web 应用,展示了如何使用 Django 来创建、读取、更新和删除数据。对于初学者来说,它是理解 Django 工作原理和掌握 CRUD 基础操作的好起点。通过深入研究这个...

    crud例子(maven+ssm)可在多种ide上运行

    在这个"Maven+SSM CRUD例子"中,开发者提供了一个全面的示例,它演示了如何在Java后端使用Spring、SpringMVC和MyBatis框架来实现这些基本操作。下面我们将深入探讨这些关键知识点。 1. Maven: Maven是Java项目...

    spring3.2 hibernate4 demo CRUD 完整例子

    在本示例中,我们探讨的是一个基于Spring 3.2和Hibernate 4的完整CRUD(创建、读取、更新、删除)操作演示。这个压缩包文件包含了实现这一功能所需的全部资源,让我们深入理解如何将这两个强大的Java框架集成到实际...

    jpa的crud例子。

    本教程将通过一个具体的CRUD(Create、Read、Update、Delete)例子来深入理解JPA的工作原理和用法。** ### 创建(Create) 在JPA中,创建新记录通常涉及以下步骤: 1. **定义实体类**:首先,我们需要创建一个...

    flex crud例子

    Flex CRUD例子是一个全面的教程,演示了如何使用Flex和Java技术构建一个完整的Web应用。它涵盖了客户端的用户交互、数据验证,以及服务器端的数据操作和业务逻辑。对于学习和理解Flex与Java之间的集成,以及如何实现...

    18_ant_完整操作一个用户管理的小例子_实现基本的CRUD

    在本教程中,我们将深入探讨如何使用Apache Ant工具来完成一个完整的用户管理系统的开发,实现基本的创建(Create)、读取(Read)、更新(Update)和删除(Delete)操作,也就是常说的CRUD功能。Apache Ant是Java...

    完整的CRUD数据库操作

    本文将深入探讨这些概念,并结合实际例子,帮助你理解如何在不同的数据库系统中执行完整的CRUD操作。 一、创建(Create) 创建操作用于在数据库中添加新的记录。这通常通过SQL的INSERT语句完成。例如,如果我们有...

    Struts2 Spring Jpa Ajax Dojo crud小例子

    通过学习这个小例子,开发者可以了解到如何将这些技术融合在一起,创建一个完整的、具备前端交互和后端数据管理的Web应用。这有助于提升开发者在实际项目中的综合技能,特别是在处理复杂业务逻辑和数据操作时。

    一个完整的Spring MVC的CRUD操作实例

    Spring MVC 是一个基于 Spring 框架的轻量级 Web 开发框架,它为构建模型-视图-控制器(MVC)结构的应用程序提供了强大的支持。在这个完整的Spring MVC CRUD操作实例中,我们将深入探讨如何使用Spring MVC实现创建...

    使用Hibernate的一个完整例子

    **使用Hibernate的一个完整例子** Hibernate 是一个开源的对象关系映射(ORM)框架,它简化了Java应用程序对数据库的操作。在本教程中,我们将探讨如何在实际项目中使用Hibernate进行数据库操作,通过一个完整的...

    ATAshop 一个完整的例子

    通过这个项目,你可以学习到如何使用JSP创建动态页面,如何利用Servlet处理业务逻辑,以及如何设计和实现一个完整的Web应用程序。同时,还可以探索数据库交互、MVC模式的应用,以及Web项目的部署和配置。

    Java SSH2框架的CRUD经典例子

    通过这种方式,可以快速构建一个具有完整CRUD功能的Web应用。 在`ssh2demo`这个压缩包中,包含了整个项目的源代码和配置文件。开发者可以查看Action类(如`AddAction`、`DeleteAction`等),了解如何根据用户请求...

    NHibernate 一个完整的例子代码

    在这个“NHibernate 一个完整的例子代码”中,我们可以深入理解如何使用NHibernate进行数据访问。 首先,让我们来理解一下ORM的概念。ORM允许程序员用对象模型来描述数据库,通过自动映射,实现了对象与数据库记录...

    .net core dapper CRUD例子(前段用bootstrap+ajax).zip

    在本项目中,我们主要探讨的是使用`.NET Core`框架,配合`Dapper`轻量级ORM库,以及前端的`Bootstrap`和`Ajax`技术,实现一个完整的CRUD(创建、读取、更新和删除)操作应用。下面将详细阐述这些技术及其在项目中的...

    hibernate的第一个例子

    **标题解析:**“hibernate的第一个例子”表明这是一个关于Hibernate框架的基础教程,主要目标是展示如何使用Hibernate进行数据持久化操作。 **描述分析:**描述提到这是一个超级简单的例子,包含一个持久化对象...

    symfony2建立一个完整blog的例子

    本教程将通过一个名为“symblog”的实例,深入探讨如何利用Symfony2搭建一个完整的博客平台。 ### 1. 安装Symfony2 首先,你需要在本地环境中安装Symfony2。这通常涉及到下载Composer,它是PHP的依赖管理工具。...

    一个简单的linq to sql例子

    LINQ (Language Integrated Query) 是.NET框架中引入的一项强大技术,它允许开发人员在C#或Visual Basic等语言中直接编写查询,使代码更...这个例子是一个很好的起点,可以帮助你开始使用LINQ to SQL进行数据库开发。

    SSH整合例子KTV简单实现crud功能

    通过这个例子,初学者可以学习到如何配置SSH框架,如何设计和实现CRUD操作,以及如何将它们整合到一起形成一个完整的应用。同时,了解数据库的设计、SQL的编写以及如何利用ORM进行数据操作也是重要的学习内容。

Global site tag (gtag.js) - Google Analytics