ABAP CDS视图-使用类方法 [英] ABAP CDS View - use a class method

查看:20
本文介绍了ABAP CDS视图-使用类方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想从现有CDS视图中的类调用一个方法来获取某些数据,这些数据只能由该方法调用。所以我想从CDS视图调用一个方法。

执行此操作的最简单方法是什么?

我会很高兴看到一个包含代码的示例。

推荐答案

注意:只有当cds视图由处理批注的对象(即公开为Odata服务,而不是在Transaction SE16N或Eclipse中的预览中)使用时,才会执行您的ABAP逻辑。 实际上有两种方式。 第一个选项:

@AbapCatalog.sqlViewName: 'ZV_TEST_ABAP'
@AbapCatalog.compiler.compareFilter: true
@AbapCatalog.preserveKey: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: 'ABAP code in cds'
@OData.publish: true
define view YCDS_WITH_ABAP as select from sflight
{

  //sflight
  key carrid,
  key connid,
  key fldate,
      seatsocc_f,
      @ObjectModel.readOnly: true
      @ObjectModel.virtualElement: true 
      @ObjectModel.virtualElementCalculatedBy: 'ABAP:YCL_CDS_FUNCTION' //ycl_cds_function 
      cast( '' as abap.char(255)) as text
    
}where connid = '0017'

您的ABAP类:

CLASS ycl_cds_function DEFINITION
  PUBLIC
  FINAL
  CREATE PUBLIC .



  PUBLIC SECTION.
    INTERFACES: if_sadl_exit_calc_element_read.
  PROTECTED SECTION.
  PRIVATE SECTION.
ENDCLASS.



CLASS ycl_cds_function IMPLEMENTATION.

 METHOD if_sadl_exit_calc_element_read~calculate.

    DATA:
      lt_calculated_data TYPE STANDARD TABLE OF ZV_TEST_ABAP .

    " it_original_data -> data that comes from cds
    " lt_calculated_data -> data that you will manipulate
    MOVE-CORRESPONDING it_original_data TO lt_calculated_data.

    " do your extra logic and append/update your cds view data
    LOOP AT lt_calculated_data ASSIGNING FIELD-SYMBOL(<fs_data>).
        <fs_data>-text = 'hello from abap!'.
    ENDLOOP.

    MOVE-CORRESPONDING lt_calculated_data TO ct_calculated_data.

  ENDMETHOD.

  METHOD if_sadl_exit_calc_element_read~get_calculation_info.

  ENDMETHOD.

ENDCLASS.
在Eclipse中查看: 在ODATA中查看:

  ...,{
                "__metadata": {
                    "id": "lalala')",
                    "uri": "blablabla')",
                    "type": "YCDS_WITH_ABAP_CDS.YCDS_WITH_ABAPType"
                },
                "carrid": "AA",
                "connid": "0017",
                "fldate": "/Date(1535068800000)/",
                "seatsocc_f": 20,
                "text": "hello from abap!"
   },...

第二个选项:

第二种方法是使用您的自定义类更改服务的DPC类,它继承此标准类并在这些重新定义的方法中执行您的自定义逻辑。 就我个人而言,我会选择第二种选择。我还没有试过,但我有一种感觉,表演会更好。:)

有关详细信息,请查看:https://blogs.sap.com/2020/05/11/abap-code-exits-in-cds-views/

这篇关于ABAP CDS视图-使用类方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆