Переименовать объект для службы 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