Rap框架练习

参加学校跟公司办得java订单班差不多有两个月了,准确的说应该只有一个月,因为前一个月的时间大部分是学校的老师介绍SSH框架,而后一个月的时间才是公司的项目经理给我们讲企业真正需要用得东西。前一阵子仍然在为学习公司自己的Rap框架做准备,呵呵,项目经理貌似只告诉我们需要学什么,而真正讲也没有,他要我们掌握好JS,freemarker,xml等技术,还就此布置了一个简单的小项目,差不多让我们花了一周的时间来完成。

这个星期开始真正学习Rap框架了,星期一主要就是平台的搭建,星期二自己跑了个小例子,星期三在星期二做得例子上加了几个小应用,星期四给我们讲了下该框架下常用的类的用法,而今天除了上午继续给我们介绍里下常用类的用法,下午就给我们个练习,让我们利用周末完成!以下为贴出原题(题是项目经理临时想的,所以简单跟我们交流了下,可能字面上看的不是太明白):

XXX学院学生信息管理系统

一、 功能需求

1、 学生基本信息管理,要求对学生的基本信息进行管理。字段信息有:学号(唯一)、姓名、年龄、籍贯、身份证号、所属班级、专业名称、家庭地址、联系方式、学员相片、备注说明。

2、 学生高考信息管理,要求对学生的高考各科目的详细信息。字段信息有:语文、数学、英语、化学、物理、政治、体育等。(具体字段内容可以根据高考时的科目)

3、 学生成绩信息管理,要求对船舶学院每学期学生的详细考试成绩信息进行管理。字段信息有:学期编号(如110101)、各考试科目(具体科目参考你们在学院里的考试科目)、考试总分(页面自动计算)分数不及格的用红色字体显示。

二、 注意事项

1、 注意三个表之间的关系,如何通过主外键进行关联。

2、 三块业务功能里面的查询功能所需要提供的查询条件自行考虑。

3、 三个功能里提到的字段信息只是我要求的基本显示信息,可以自行添加字段。但是主要设计那些是必填项。

<----待续,等该题完成后更新>

先把平台贴出来看看:


 


### 虚拟数据模型在 RAP 框架中的实现方法 SAP Fiori 的 ABAP 编程模型为开发者提供了构建虚拟数据模型的能力,允许开发人员定义不绑定到实际数据库表的数据结构,并通过 OData 服务对外暴露这些数据[^1]。这种机制特别适用于需要动态生成数据或集成外部系统数据的场景。 #### 定义虚拟实体 在 RAP 框架中,虚拟数据模型通常通过接口(Interface)来定义,而不是直接基于数据库表。开发者可以使用 `@ObjectModel.readOnly` 注解标识该实体为只读,尽管其本身并不涉及持久化操作: ```abap @AccessControl.authorizationCheck: #NOT_REQUIRED @EndUserText.label: 'Virtual Entity for Sample Data' define interface ZI_MyVirtualEntity { @Semantics.key: true key ID : String(36); @Semantics.text: true Description : String(100); } ``` 此接口定义了虚拟实体的基本字段,如主键 `ID` 和描述文本 `Description`,并通过注解增强了语义信息,使其更符合 OData 服务的需求。 #### 实现行为逻辑 虚拟数据模型的行为逻辑需在行为实现类中完成。开发者可以通过继承 `cl_abap_behavior_handler` 并重写 `get` 方法来提供数据获取功能。在该方法中,开发者可以构造内存中的数据集,并根据请求上下文应用分页、排序等操作: ```abap class ZCL_MyVirtualEntity_Handler definition public final create public. public section. interfaces: if_abap_beh_handler, zif_myvirtualentity_handler. endclass. class ZCL_MyVirtualEntity_Handler implementation. method IF_ABAP_BEH_HANDLER~GET. data: lt_data type table of zi_myvirtuallentity. " 构造虚拟数据 lt_data = value #( ( id = '1' description = 'First Entry' ) ( id = '2' description = 'Second Entry' ) ( id = '3' description = 'Third Entry' ) ). " 设置返回数据 io_request->set_data( lt_data ). endmethod. endclass. ``` 上述代码展示了如何在行为实现类中构造一个简单的虚拟数据集,并将其作为响应返回。该方法支持客户端通过 OData 协议访问这些数据。 #### 集成 OData 服务 RAP 框架通过服务绑定机制将虚拟数据模型与 OData 服务集成。开发者可以在 CDS 视图中引用已定义的接口,并通过服务定义文件(`.dsc`)将该视图绑定到相应的 OData 服务中: ```cds @OData.publish: true define service ZMyVirtualService { expose ZI_MyVirtualEntity as VirtualEntity; } ``` 该服务定义文件指示 RAP 框架将 `ZI_MyVirtualEntity` 接口作为 OData 服务的一部分进行发布,从而允许客户端通过标准的 RESTful API 访问虚拟数据[^1]。 #### 扩展功能:分页与排序 虽然虚拟数据模型本身不依赖于数据库查询,但 RAP 框架仍然支持对内存数据进行分页和排序处理。开发者可以通过 `IO_REQUEST` 接口获取 `$top`、`$skip` 和 `$orderby` 等查询参数,并在行为实现类中手动应用这些条件: ```abap method IF_ABAP_BEH_HANDLER~GET. data: lt_data type table of zi_myvirtuallentity, ls_paging type /bobf/s_paging_info. " 构造原始数据 lt_data = value #( ( id = '1' description = 'Apple' ) ( id = '2' description = 'Banana' ) ( id = '3' description = 'Cherry' ) ). " 获取分页信息 io_request->get_paging( importing es_paging = ls_paging ). " 应用分页 delete lt_data where table_line < ls_paging-skip + 1. if ls_paging-top is not initial. delete lt_data where table_line > ls_paging-top. endif. " 获取排序条件 data(lt_sort_fields) = io_request->get_sorting( ). " 默认排序字段 if lt_sort_fields is initial. lt_sort_fields = value #( ( field = 'Description' order = if_rap_bus_srt_constants=>gc_order-descending ) ). endif. " 应用排序 sort lt_data by (lt_sort_fields). " 返回结果 io_request->set_data( lt_data ). endmethod. ``` 以上代码展示了如何在行为实现类中解析并应用分页和排序逻辑,确保虚拟数据模型能够响应标准的 OData 查询参数[^1]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值