Я создал собственное представление 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 и предоставления сгенерированной службы OData в транзакции / IWFND / MAINT_SERVICE она работает, как и ожидалось,даже с оптимистической блокировкой для обработки одновременных обновлений.
Более того, мое требование состоит в том, чтобы добавить дополнительную бизнес-логику, чтобы полезная нагрузка запроса на обновление проверялась по заданному набору правил.То есть, если обновленные данные нарушают правила, запрос на обновление должен быть отклонен, а клиент должен быть уведомлен (например, по HTTP 500).
Как я могу это сделать?
Я не смог найти сгенерированные классы, такие как * DPC_EXT, где я мог бы обогатить бизнес-логику.
Я также создал проверку моего бизнес-объекта BOPF, который зарегистрирован для обновления.Однако после обновления сущности через OData эта проверка не вызывается.