上一章讲了 Booking_M,BookSuppl_M 的Metadata,并着重说明了属性 additionalBinding。
本章继续讲RAP开发的知识。
- BDL(Behavior Definition Language)
- Interface层:Behavior Definition for BO Structure
- Consumption层:Behavior Definition for Projection
- BDL只需在 Root Entity上做,里面包含了子,孙
- 排错的方法
目录
1,BDL(Behavior Definition Language)
1-1,New Behavior Definition - Z04_DV_Travel_M
1-2,RAP Behavior Definition 代码解析
1-3,New Behavior Definition - Z04_PV_Travel_M
2),Eclipse > Windows > Other > Feed Reader
下面是详细内容。
1,BDL(Behavior Definition Language)
有两种:
- Behavior Definition for BO Structure
- Behavior Definition for Projection

1-1,New Behavior Definition - Z04_DV_Travel_M
BO( Business Object), 它的组成如下图所示
咱们说的BDL,指的是Behavior 那个框 Behavior Definition for BO Structure,
它能做 CRUD,Actions,Functions,Locks,eTag,Authorization,Feature Control,Draft等
SAP学习笔记 - 开发36 - RAP开发 RAP架构图,RAP的优势/特点,RAP的组成结构,开发方法,开发工具,开发流程 等概念_sap rap draft-CSDN博客

下面来看看该怎么建这个 Behavior Definition:
咱们这里有3个 Data Definition View(Interface),但是Behavior Definition 是要建在root 上面的
所以,咱们这里只能建在 Z04_DV_Triavel_M 上面。
右键 Z04_DV_Triavel_M > New Behavior Definition

Name 和 Data Definition View是一样的,也不能改,看来它们之间是靠名称来Mapping的
输入 Description,
Implementation Type - Managed,保持默认选项,点Next

选TR,点Finish

这样就建好了,也不需要选模板,估计就一个被默认选了

在Deepseek里面看一下代码解析:
仔细看了一下,这里默认生成了 3个 Entity的代码,这也是为啥要在root上面做 Behavior的原因
Travel (父),Booking (子),BookSuppl (孙)
1-2,RAP Behavior Definition 代码解析
这段代码是ABAP RESTful Application Programming (RAP)模型中的Behavior Definition(行为定义),用于定义业务对象的行为特性。以下是对代码的详细说明:
1. 全局设置
abap
managed implementation in class zbp_04_dv_travel_m unique;
strict ( 2 );
-
managed implementation指定行为实现类为zbp_04_dv_travel_m -
unique表示该实现类是唯一的 -
strict ( 2 )表示使用严格模式级别2(检查更严格):所谓的严格,比较有用的是一些过时的语法检查,会由Warning 变为Error,这样可以避免将来保守的麻烦
2. Travel 实体行为定义
abap
define behavior for Z04_DV_Travel_M
persistent table zt04_travel_m
lock master
authorization master ( instance )
{
create ( authorization : global );
update;
delete;
field ( readonly ) TravelId;
association _Booking { create; }
}
-
持久化表:
zt04_travel_m -
锁定:
lock master表示这是锁定主实体 -
授权:
authorization master (instance)表示这是实例级授权主实体 -
操作:
-
create- 允许创建,需要全局授权 -
update- 允许更新 -
delete- 允许删除
-
-
字段控制:
-
TravelId字段设为只读
-
-
关联:
-
_Booking关联允许创建操作
-
3. Booking 实体行为定义
abap
define behavior for Z04_DV_Booking_M
persistent table zt04_booking_m
lock dependent by _Travel
authorization dependent by _Travel
{
update;
delete;
field ( readonly ) TravelId, BookingId;
association _Travel;
association _BookingSupplement { create; }
}
-
持久化表:
zt04_booking_m -
锁定:
lock dependent by _Travel表示锁定依赖于Travel实体 -
授权:
authorization dependent by _Travel表示授权依赖于Travel实体 -
操作:
-
update- 允许更新 -
delete- 允许删除
-
-
字段控制:
-
TravelId和BookingId字段设为只读
-
-
关联:
-
_Travel关联 -
_BookingSupplement关联允许创建操作
-
4. Booking Supplement 实体行为定义
abap
define behavior for Z04_DV_BookSuppl_M
persistent table zt04_booksuppl_m
lock dependent by _Travel
authorization dependent by _Travel
{
update;
delete;
field ( readonly ) TravelId, BookingId, BookingSupplementId;
association _Travel;
association _Booking;
}
-
持久化表:
zt04_booksuppl_m -
锁定:
lock dependent by _Travel表示锁定依赖于Travel实体 -
授权:
authorization dependent by _Travel表示授权依赖于Travel实体 -
操作:
-
update- 允许更新 -
delete- 允许删除
-
-
字段控制:
-
TravelId,BookingId,BookingSupplementId字段设为只读
-
-
关联:
-
_Travel关联 -
_Booking关联
-
5. 关键概念说明
-
Managed Implementation:表示系统会自动处理标准操作(CRUD)的实现
-
Lock/Authorization Dependency:
-
主实体独立控制锁定和授权
-
依赖实体继承自主实体的锁定和授权
-
-
Association:定义了实体间的关联关系及允许的操作
-
Field Control:可以控制字段的读写权限
-
ETag(注释掉的):用于乐观锁控制,可以通过指定字段来实现
这种结构定义了一个典型的旅行预订系统,包含Travel(旅行)、Booking(预订)和Booking Supplement(预订补充项)三个实体,形成了主-从-从的层次关系。
下面来做Behavior Definition for Projection
1-3,New Behavior Definition - Z04_PV_Travel_M
右键 Z04_PV_Travel_M > New Behavior Definition

Name 和 Projection View 同名,无法修改
Implementition Type:Projection,
修改一下 Description,点Next

提示一个错误,说上面建的那个Behavior(Interface层)没激活

激活一下再试试,这回就OK了,点Finish

默认生成了一些代码,按Ctrl+F3 激活

1-4,运行看效果
点开始按钮,出了个错误:
ABAP Runtime error 'RAISE_SHORTDUMP‘

那具体到底是什么错误呢?
可以用以下几种方法来看。
1),DevTools > Network
这里能看到Status Code:500 Internal Server Error

2),Eclipse > Windows > Other > Feed Reader

然后选 ABAP > Feed Reader

打开 Runtime Error 那一项,可以看到错误
>The current program has intentionally triggered a termination with a short dump.

Handler not implemented; Method: INSTANCE_AUTHORIZATION, Involved Entities: Z04_PV_TRAVEL_M
虽然指明了 Z04_PV_TRAVEL_M,但是Z04_DV_Travel_M 里才有
authorization master ( instance )

要怎么解决这个问题呢?
a),Behavior Definition - Z04_DV_Travel_M
先把 implementation in class zbp_04_dv_travel_m unique; 给注释掉
然后给Travel(旅行)、Booking(预订)和Booking Supplement(预订补充项)三个实体,分别加上 implementation in class
比如,zcl_bp_04_dv_travel_m

点左侧的Warning图标,然后点 Create behavior implementation class zcl_bp_04_dv_travel_m

基本上啥都不用改,点 Next

选TR,点Finish

这就建好了

子,孙 的 zcl_bp_04_dv_booking_m / zcl_bp_04_dv_booksuppl_m 就先不搞了
再回到页面,刷新,然后带你 开始,这样就可以查出来数据了

点进入看,也可以的
TODO: 这里为啥只有消除按钮?之前也发生了相同的问题,后面看看能不能解决

以上就是本篇的全部内容。
更多SAP顾问业务知识请点击下面目录链接或东京老树根的博客主页
1万+

被折叠的 条评论
为什么被折叠?



