odata - 为基于 CDS 的 OData 服务的 OData 更新添加业务逻辑
问题描述
我在本地包中创建了一个自定义 CDS 视图,如下所示:
@AbapCatalog.sqlViewName: 'ZMD_C_PUR_REQ3'
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Consumption View Purchase Requisition'
@ObjectModel.semanticKey: 'banfn'
@ObjectModel.transactionalProcessingDelegated: true
@ObjectModel.createEnabled: true
@ObjectModel.deleteEnabled: true
@ObjectModel.updateEnabled: true
@ObjectModel.entityChangeStateId: 'last_change'
@OData.publish: true
define view ZMD_C_PUR_REQ_03 as select from ZMD_I_PURCHASE_REQUISTION {
key banfn,
status,
@Semantics.systemDateTime.lastChangedAt: true
last_change
}
在激活此 CDS 视图并在事务 /IWFND/MAINT_SERVICE 中公开生成的 OData 服务后,它确实可以按预期工作,即使使用乐观锁定来处理并发更新也是如此。
此外,我的要求是添加进一步的业务逻辑,以便根据给定的规则集验证更新请求的有效负载。也就是说,如果更新的数据违反了规则,则更新请求将被拒绝并通知客户端(例如,通过 HTTP 500)。
我怎样才能做到这一点?
我找不到像 *DPC_EXT 这样可以丰富业务逻辑的生成类。
我还确实在注册更新的 BOPF 业务对象上创建了一个验证。但是,在通过 OData 更新实体时,不会调用此验证。
解决方案
您通过注解创建了 OData 服务@OData.publish: true
这对于简单的服务来说很方便,但这种方便伴随着灵活性的折衷。在您的情况下,我将在 Gateway Builder (Transaction SEGW) 中创建一个项目并将 CDS 视图用作引用的数据源,这样您就可以利用 CDS 功能进行读取操作,并使用自定义逻辑。
看看这个博客
推荐阅读
- javascript - 分页没有出现数据表
- c++ - 在一个命令中使用 2 个重载运算符会导致错误
- css - 使用 flex 构建表格,使用固定列构建 div
- python-2.7 - 使用 python-plotly 在按钮单击时打开 html 文件
- c# - SQL Server 表值参数。类型是“对象”
- codeblocks - 在代码块中调试时如何查看向量的内容?
- php - php中的Mongo DB聚合查询
- python - 在 opencv 中使用 2 个摄像头实时捕获
- powerquery - 遍历 Power Query 中列中的每个单元格
- php - 如何在 db 中存储输入类型的可用选项:选择菜单、单选按钮和复选框?