写点什么

一个实际的例子学习 SAP BTP Java 应用的 @Before 注解使用方式

作者:Jerry Wang
  • 2022-10-15
    四川
  • 本文字数:1146 字

    阅读完需:约 1 分钟

一个实际的例子学习 SAP BTP Java 应用的 @Before 注解使用方式

我们可以使用了 On 注释,它替换了 CAP Java 运行时提供的事件的默认处理,以此来注册自定义事件处理程序,从而处理实体的 READ 或 CREATE 事件。


如果想增加默认处理,我们将使用 @Before 和 @After 注释。 使用 @Before 注释注册的事件处理程序旨在执行输入实体数据的验证。 这使得在创建订单之前验证特定书籍的可用库存成为可能。 相比之下,使用 @After 注释注册的事件处理程序可以对返回的实体进行后处理。 这对于在从数据库中读取订单或其项目后计算总和净金额元素很有用。


假设我们开发了一套图书管理系统,其中图书模型定义如下:



entity Products : cuid, managed {        title    : localized String(111);        descr    : localized String(1111);        stock    : Integer;        price    : Decimal(9,2);        currency : Currency;        category : Association to Categories;    }
复制代码


每本书有一个 stock 字段维护库存。


另一个项目 bookstore,设计了 orders 和 orderItems 行项目模型:



我们期望下单时,对应图书的 stock 字段会被 OrderItems 里的 amount 字段扣减。


新建一个 handlers 文件夹,里面放置一个文件 OrdersService.java


package com.sap.cap.bookstore.handlers;
import com.sap.cds.services.handler.EventHandler;import com.sap.cds.services.handler.annotations.ServiceName;
import org.springframework.stereotype.Component;
@Component@ServiceName("OrdersService")public class OrdersService implements EventHandler {
}
复制代码


首先根据 orderItem 里包含的 book ID,从数据库里读取对应的图书模型,获取其库存,同订单行项目的 quantity 字段比较,如果购买的数量小于库存,说明能够下单。



创建一个新的 Configuration:



选择 bookstore:



点击 Run module:



创建一个新的订单,guid 和 currency 都选择的硬编码:


curl -X POST http://localhost:8080/odata/v4/OrdersService/Orders

-H "Content-Type: application/json"

-d '{"ID": "50425a69-48b9-45f1-b6d2-687d55355e03", "currency_code": "USD"}'



创建一个新的 order item,买了两本书:amount = 2


curl -X POST http://localhost:8080/odata/v4/OrdersService/OrderItems

-H "Content-Type: application/json"

-d '{"parent_ID": "50425a69-48b9-45f1-b6d2-687d55355e03", "book_ID": "abed2f7a-c50e-4bc5-89fd-9a00a54b4b16", "amount": 2}'


4b16 结尾的 entity 对应的 book:



初始库存为 12:



实际库存为 10:



使用如下命令可以使数据库回到初始状态:


cds deploy --to sqlite


方法 calculateNetAmount 是使用 @After 注释注册的。 这意味着在从数据库中读取 OrderItems 实体之后调用该方法。 注释还指定,每当读取或创建实体 OrderItems 时都应调用该方法。

发布于: 刚刚阅读数: 3
用户头像

Jerry Wang

关注

🏆InfoQ写作平台-签约作者🏆 2017-12-03 加入

SAP成都研究院开发专家,SAP社区导师,SAP中国技术大使。2007 年从电子科技大学计算机专业硕士毕业后加入 SAP 成都研究院工作至今。工作中使用 ABAP, Java, JavaScript 和 TypeScript 进行开发。

评论

发布
暂无评论
一个实际的例子学习 SAP BTP Java 应用的 @Before 注解使用方式_Java_Jerry Wang_InfoQ写作社区