一个实际的例子学习 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 时都应调用该方法。
相关文章
- Java字节码浅析(—)
- java中getBytes方法可能使图片文件产生的问题
- Java实现 LeetCode 814 二叉树剪枝 (遍历树)
- Java实现 蓝桥杯 算法提高 套正方形(暴力)
- Java实现 LeetCode 382 链表随机节点
- Java实现蓝桥杯VIP算法训练 二元函数
- Java实现 LeetCode 174 地下城游戏
- Java实现 蓝桥杯VIP 算法训练 阶乘末尾
- 【JAVA】 03-Java中的异常和包的使用
- Java面向对象编程篇5——枚举
- 61. 如何使用 Java 程序通过 SAP Java Connector 调用 ABAP 系统的函数
- 如何使用 Java 程序通过 SAP Java Connector 调用 ABAP 系统的函数试读版
- SAP ABAP和Java跨域请求问题的解决方案
- 一段使用Java程序和JCO(Java connector)连接SAP ABAP Netweaver系统的代码
- Jerry文章《浅谈Java和SAP ABAP的静态代理和动态代理,以及ABAP面向切面编程的尝试一文的源代码》
- 如何用Java代码在SAP Marketing Cloud里创建contact数据
- 使用Java代码连接SAP ABAP Netweaver服务器
- 如何在 SAP BTP Java 应用里使用 SAP HANA 数据库
- 使用Eclipse开发Java应用并部署到SAP云平台SCP上去
- 使用Java+SAP云平台+SAP Cloud Connector调用ABAP On-Premise系统里的函数
- 使用Java程序消费SAP Leonardo的机器学习API
- 华为OD机试 - 计算疫情扩散时间(Java & JS & Python)
- 【华为OD机试 2023】组合出合法最小数(C++ Java JS Python)
- 【项目实战】使用Java Keytool工具生成的CSR给第三方云平台签名
- 【java基础】输入/输出流基本介绍