Добавление бизнес-логики в обновление OData службы OData на основе CDS - PullRequest
0 голосов
/ 15 марта 2019

Я создал собственное представление 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 эта проверка не вызывается.

1 Ответ

1 голос
/ 22 марта 2019

Вы создали службу OData с помощью аннотации @OData.publish: true Это удобно для простых служб, но это удобство приходит с компромиссом гибкости.В вашем случае я бы создал проект в Gateway Builder (Transaction SEGW) и использовал бы представление CDS в качестве источника данных, на который ссылаются, таким образом вы можете использовать возможности CDS для операций чтения, а также использовать собственную логику.

Взгляните на этот блог

...