将业务逻辑添加到基于CDS的OData服务的OData更新

问题描述 投票:0回答:1

我在本地包中创建了一个自定义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视图并在transaction / IWFND / MAINT_SERVICE中公开生成的OData服务后,即使使用乐观锁定来处理并发更新,它也可以按预期工作。

此外,我的要求是添加更多业务逻辑,以便根据给定的规则集验证更新请求的有效负载。也就是说,如果更新的数据违反规则,则应拒绝更新请求并且应该通知客户端(例如,通过HTTP 500)。

我怎么能做到这一点?

我找不到像* DPC_EXT这样的生成类,我可以丰富业务逻辑。

我还在我的BOPF业务对象上创建了一个已注册更新的验证。但是,在通过OData更新实体时,不会调用此验证。

odata sap abap gateway cds
1个回答
1
投票

您通过注释@OData.publish: true创建了OData服务。这对于简单的服务很方便,但这种便利性带来了灵活性的权衡。在您的情况下,我将在Gateway Builder(事务SEGW)中创建一个项目,并使用CDS视图作为引用数据源,这样您就可以利用CDS功能进行读取操作,并使用自定义逻辑。

看看this博客

© www.soinside.com 2019 - 2024. All rights reserved.