Переименовать объект для службы OData, созданный с помощью представлений CDS, на которые имеются ссылки?

Я реализовал некоторые представления CDS с ассоциациями в системе SAP NETWEAVER 7.5 SP 19 (09/2020).

Я использовал в транзакции SEGW функцию ссылки по источнику данных для автоматического создания типов и ассоциаций ODATA из представлений CDS и добавления их в существующий проект SEGW ODATA.

Затем я использую эту службу ODATA в приложении SAPUI5.

Вот одно из руководств, которые я использовал: https://www.saplearners.com/create-odata-service-abap-cds-views-segw/

Просмотр CDS

Вид CDS называется / ID / VIEW_NAME_CDS.

Ассоциации переименовываются с помощью as и перед именем получают подчеркивание. Тогда имя будет _assication_name. Подчеркивание, кажется, является соглашением SAP, чтобы сделать свойство навигации читаемым.

Результат

В проекте SEGW мастер создает тип объекта с именем: x idxview_name_cdsType Каждая косая черта будет заменена на x, а в конце будет добавлен тип.

Свойство навигации называется to_assication_name.

Ассоциация получает имя вида assoc_0D6ADC4B279EADE543738376111F7216.

Цель

Я хочу изменить имя типов сущностей, ассоциаций и свойств навигации, потому что мне нужны читаемые имена в приложении sapui5

Уточнение 2020/11/30: имя также должно быть изменено в самой транзакции SEGW, чтобы они были одинаковыми в SEGW и SAPUI5, потому что через несколько месяцев другой разработчик не подумает, что я изменил имена в классе MPC_EXT. По крайней мере, я бы об этом не подумал.:-)

Возможно ли это с аннотациями в представлении CDS? Или любым другим способом?

пример

@AbapCatalog.sqlViewName: 'ZTEST'
@AbapCatalog.compiler.compareFilter: true
@AbapCatalog.preserveKey: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: 'A test'
define view /ABC/SYSTEM_RESULT_CDS as
  select from system                        as system
  association [1..*] to /abc/s_mon_result   as _monitoring_results on _monitoring_results.system_id    = $projection.system_id
{
    key system.system_id,
        system.name,
        _monitoring_results
}
group by system.system_id

Тип объекта: xabcxsystem_result_cdsType

Это сочетание верблюжьего стиля и змеиного футляра. Не очень читабельно.

Свойства навигации: to_monitoring_results

Это нормально, но я хотел бы иметь возможность переименовать его.

Ассоциация: assoc_0D6ADC4B279EADE543738376111F7216

Не читается. Только если вы нажмете на нее, вы увидите 2 объекта, которым принадлежит ассоциация.

1 ответ

Вы должны переопределить DEFINE метод MPC_EXT class, артефакт времени выполнения после создания службы:

        super->define( ).

 DATA: lo_entity_type TYPE REF TO /iwbep/if_mgw_odata_entity_typ,
       lo_entity_set   TYPE REF TO /iwbep/if_mgw_odata_entity_set,
       lo_property    TYPE REF TO /iwbep/if_mgw_odata_property.

 " for entity type
 lo_entity_type = model->get_entity_type( 'C_Cfd_UsageType' ).
 lo_entity_type->set_name( iv_name = 'CFDUsage' ).

 " for association
 lo_entity_type = model->get_association( 'C_CFD_Assoc' ).
 lo_entity_set->set_name( iv_name = 'CFDAssociation' ).

 " for entity set
 lo_entity_set = model->get_entity_set( 'C_Cfd_Usage' ).
 lo_entity_set->set_name( iv_name = 'CFD' ).

После этого новые имена будут отражены в метаданных сервиса $:

https://st ackru.com/images/de0fdf665beb6c637c31815309b981289297e9cf.png

Другие вопросы по тегам