SAP学习笔记 - 开发48 - RAP开发 Managed App BDL(Behavior Definition Language)

Python3.8

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

上一章讲了 Booking_M,BookSuppl_M 的Metadata,并着重说明了属性 additionalBinding。

SAP学习笔记 - 开发47 - RAP开发 Managed App Metadata Extension 3 - Booking_M,BookSuppl_M,additionalBinding-CSDN博客

本章继续讲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. 全局设置

2. Travel 实体行为定义

3. Booking 实体行为定义

4. Booking Supplement 实体行为定义

5. 关键概念说明

1-3,New Behavior Definition - Z04_PV_Travel_M

1-4,运行看效果

1),DevTools > Network

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 - 允许删除

  • 字段控制

    • TravelIdBookingId 字段设为只读

  • 关联

    • _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. 关键概念说明

  1. Managed Implementation:表示系统会自动处理标准操作(CRUD)的实现

  2. Lock/Authorization Dependency

    • 主实体独立控制锁定和授权

    • 依赖实体继承自主实体的锁定和授权

  3. Association:定义了实体间的关联关系及允许的操作

  4. Field Control:可以控制字段的读写权限

  5. 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顾问业务知识请点击下面目录链接或东京老树根的博客主页

https://blog.csdn.net/shi_ly/category_12216766.html

东京老树根-CSDN博客

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值