是否重命名通过引用的CDS视图生成的OData服务的实体?

是否重命名通过引用的CDS视图生成的OData服务的实体?,odata,sapui5,cds,sap-gateway,Odata,Sapui5,Cds,Sap Gateway,我在SAP NETWEAVER 7.5 SP 19(2020年9月)系统上实现了一些关联的CD视图 我在SEGW事务中使用了“按数据源引用”功能,从CDS视图自动创建ODATA类型和关联,并将它们添加到现有的SEGW ODATA项目中 然后我在SAPUI5应用程序中使用ODATA服务 以下是我使用的指南之一: CD视图 CD视图的名称类似于/ID/view\u NAME\u CD 关联将重命名为,并在名称前加下划线。然后名称为\u association\u name。下划线似乎是SAP使导航属

我在SAP NETWEAVER 7.5 SP 19(2020年9月)系统上实现了一些关联的CD视图

我在SEGW事务中使用了“按数据源引用”功能,从CDS视图自动创建ODATA类型和关联,并将它们添加到现有的SEGW ODATA项目中

然后我在SAPUI5应用程序中使用ODATA服务

以下是我使用的指南之一:

CD视图

CD视图的名称类似于/ID/view\u NAME\u CD

关联将重命名为,并在名称前加下划线。然后名称为\u association\u name。下划线似乎是SAP使导航属性可读的惯例

结果

在SEGW项目中,向导使用名称创建一个实体类型:xidxview\u name\u cdsType 每个斜杠都将替换为x,并在末尾添加类型

导航属性的名称为至\u association\u name

该关联的名称类似于assoc\u 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
实体类型:XABCX系统\u结果\u cdsType

这是骆驼式和蛇式的混合。不太可读

导航属性:查看监视结果

可以,但我想有机会重新命名它

协会:协会0D6ADC4B279EADE543738376111F7216


不可读。只有单击它,您才能看到关联所属的两个实体。

您必须重新定义
定义
MPC_EXT
类的方法,即服务生成后的运行时工件:

 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' ).
之后,新名称将反映在服务$metadata中:


好的,这是一种可能性。SEGW事务中的名称不会更改,或者?在
“model->get_association('C_CFD_Assoc)”
行中,您忘记了一些字符
我仍然更喜欢注释。你知道怎么做吗?
SEGW事务中的名称不会改变,或者?
不,不在SEGW中,但对于UI5
你忘记了一些字符)应该没问题。
的确,我知道。更正,thxI在第一篇文章中对我的目标进行了澄清,但感谢您的回答。很高兴知道,也许其他开发者也需要它。