CDS注释和参考数据源问题

2020-08-27 16:22发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

我有以下问题。 我创建一个CDS视图,并在此基础上使用参考数据源方法创建一个OData服务。 这是CDS视图的摘录:

/* VDM视图类型的定义*/
 @ VDM.viewType:#CONSUMPTION

/* BOPF对象模型*/
 @ObjectModel:{
     modelCategory:#BUSINESS_OBJECT,
     compositionRoot:正确,
    
   /*转发事务处理*/
     transactionalProcessingDelegated:true,
    
     语义关键字:['PurchaseOrderID'],
    
     createEnabled:是的,
     updateEnabled:是,
     deleteEnabled:true
 }

 定义视图ZC_PurchaseOrderHeaderTP
     从ZI_PurchaseOrderHeaderTP中选择
   /*与其他BOPF节点的关联*/
     将[0 .. *]与_Items关联到ZC_PurchaseOrderItemTP
     在$ projection.PurchaseOrderHeaderKey = _Items.PurchaseOrderHeaderKey上
 {
         @ UI.hidden:是
     键PurchaseOrderHeaderKey,
        
         @ UI.lineItem.position:10
         @ UI.identification.position:10
         PurchaseOrderID,
        
         @ UI.hidden:是
         SupplyerKey,
        
         @ UI.hidden:是
         NoteKey,
         CurrencyCode,

在使用Gateway Service Builder创建OData服务之后,我还在模型提供程序扩展类中实现了扩展。 该扩展名如下所示。 它基本上只是重命名OData服务中的实体。

 CLASS zcl_z_erp_impl_ws19_mpc_ext实施。
   方法定义。

     super-> define()。

     数据:lo_entity_type类型参考/iwbep/if_mgw_odata_entity_typ,
           lo_entity_set类型参考/iwbep/if_mgw_odata_entity_set,
           lo_property类型参考/iwbep/if_mgw_odata_property。


     lo_entity_type =模型-> get_entity_type('ZC_PurchaseOrderHeaderTPType')。
     lo_entity_type-> set_name(iv_name ='PurchaseOrderHeader')。

     lo_entity_set =模型-> get_entity_set('ZC_PurchaseOrderHeaderTP')。
     lo_entity_set-> set_name(iv_name ='PurchaseOrderHeaders')。

         lo_entity_type =模型-> get_entity_type('ZC_PurchaseOrderItemTPType')。
     lo_entity_type-> set_name(iv_name ='PurchaseOrderItem')。

     lo_entity_set =模型-> get_entity_set('ZC_PurchaseOrderItemTP')。
     lo_entity_set-> set_name(iv_name ='PurchaseOrderItems')。

   终结法。

 ENDCLASS。

最后,我基于此服务使用列表报告模板创建了一个基于Fiori Elements的应用程序。 我现在面临的问题如下。 只要在模型提供程序扩展类中有define方法的实现,就不会将CDS视图中的UI注释转移到Fiori Elements应用程序中。 所以 在列表视图的表中没有字段可见。 一旦删除了define方法的实现,一切都会按预期进行。

有人知道如何解决这个问题吗? 我是否在模型提供的扩展类的实现中缺少某些东西?

基督徒

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

我有以下问题。 我创建一个CDS视图,并在此基础上使用参考数据源方法创建一个OData服务。 这是CDS视图的摘录:

/* VDM视图类型的定义*/
 @ VDM.viewType:#CONSUMPTION

/* BOPF对象模型*/
 @ObjectModel:{
     modelCategory:#BUSINESS_OBJECT,
     compositionRoot:正确,
    
   /*转发事务处理*/
     transactionalProcessingDelegated:true,
    
     语义关键字:['PurchaseOrderID'],
    
     createEnabled:是的,
     updateEnabled:是,
     deleteEnabled:true
 }

 定义视图ZC_PurchaseOrderHeaderTP
     从ZI_PurchaseOrderHeaderTP中选择
   /*与其他BOPF节点的关联*/
     将[0 .. *]与_Items关联到ZC_PurchaseOrderItemTP
     在$ projection.PurchaseOrderHeaderKey = _Items.PurchaseOrderHeaderKey上
 {
         @ UI.hidden:是
     键PurchaseOrderHeaderKey,
        
         @ UI.lineItem.position:10
         @ UI.identification.position:10
         PurchaseOrderID,
        
         @ UI.hidden:是
         SupplyerKey,
        
         @ UI.hidden:是
         NoteKey,
         CurrencyCode,

在使用Gateway Service Builder创建OData服务之后,我还在模型提供程序扩展类中实现了扩展。 该扩展名如下所示。 它基本上只是重命名OData服务中的实体。

 CLASS zcl_z_erp_impl_ws19_mpc_ext实施。
   方法定义。

     super-> define()。

     数据:lo_entity_type类型参考/iwbep/if_mgw_odata_entity_typ,
           lo_entity_set类型参考/iwbep/if_mgw_odata_entity_set,
           lo_property类型参考/iwbep/if_mgw_odata_property。


     lo_entity_type =模型-> get_entity_type('ZC_PurchaseOrderHeaderTPType')。
     lo_entity_type-> set_name(iv_name ='PurchaseOrderHeader')。

     lo_entity_set =模型-> get_entity_set('ZC_PurchaseOrderHeaderTP')。
     lo_entity_set-> set_name(iv_name ='PurchaseOrderHeaders')。

         lo_entity_type =模型-> get_entity_type('ZC_PurchaseOrderItemTPType')。
     lo_entity_type-> set_name(iv_name ='PurchaseOrderItem')。

     lo_entity_set =模型-> get_entity_set('ZC_PurchaseOrderItemTP')。
     lo_entity_set-> set_name(iv_name ='PurchaseOrderItems')。

   终结法。

 ENDCLASS。

最后,我基于此服务使用列表报告模板创建了一个基于Fiori Elements的应用程序。 我现在面临的问题如下。 只要在模型提供程序扩展类中有define方法的实现,就不会将CDS视图中的UI注释转移到Fiori Elements应用程序中。 所以 在列表视图的表中没有字段可见。 一旦删除了define方法的实现,一切都会按预期进行。

有人知道如何解决这个问题吗? 我是否在模型提供的扩展类的实现中缺少某些东西?

基督徒

付费偷看设置
发送
2条回答
SC_Yao
1楼 · 2020-08-27 17:09.采纳回答

经过更多调试后,我自己找到了答案。

使用以下请求加载注释:

 sap/opu/odata/IWFND/CATALOGSERVICE; v = 2/Annotations(TechnicalName ='Z_ERP_IMPL_WS19_ANNO_MDL',Version ='0001'  )/$ value 

这是返回的XML文件的例外:

 <?xml version =" 1.0" encoding =" utf-8"?>
 
     ...
     
         
             
                 
                 
             
             
                 
                 
             
             
                 
                 
             

 ... 

使用OData实体的类型标识注释目标。 例如

 Z_ERP_IMPL_WS19_SRV.ZC_PurchaseOrderHeaderTPType/PurchaseOrderHeaderKey 

因此,问题的根本原因是,我也重命名了元数据扩展类中的实体类型。 使用元数据扩展类的以下实现,所有内容均按预期工作:

 CLASS zcl_z_erp_impl_ws19_mpc_ext IMPLEMENTATION。
   方法定义。

     super-> define()。

     数据:lo_entity_set类型参考/iwbep/if_mgw_odata_entity_set,
           lo_property类型参考/iwbep/if_mgw_odata_property。


     lo_entity_set =模型-> get_entity_set('ZC_PurchaseOrderHeaderTP')。
     lo_entity_set-> set_name(iv_name ='PurchaseOrderHeaders')。

     lo_entity_set =模型-> get_entity_set('ZC_PurchaseOrderItemTP')。
     lo_entity_set-> set_name(iv_name ='PurchaseOrderItems')。

   终结法。

 ENDCLASS。

基督教

天桥码农
2楼-- · 2020-08-27 17:01

您可以尝试使用注释 @ OData.entitySet。 名称

重命名实体集。

一周热门 更多>