【ABAP】統合データアクセス(IDA)を備えたALVでCDS Viewのデータを表示する(CL_SALV_GUI_TABLE_IDA)


やること

統合データアクセス(IDA)を備えたALVで、CDS Viewのデータを表示する。
CL_SALV_GUI_TABLE_IDAを使用。

参考:
SAP List Viewer with Integrated Data Access (ALV with IDA)
ABAP Development: Work with Core Data Services (CDS)

CDS Viewではなく、テーブルデータを出力する方法についてはこちら
統合データアクセス(IDA)を備えたALVでテーブルデータを表示する(CL_SALV_GUI_TABLE_IDA)

実行結果

※CDS Viewのデータを表示。

CDS Viewの定義

※テーブルEKKOとEKPOを結合しただけ

Y_PO_ITEM_01
@AbapCatalog.sqlViewName: 'Y_PO_ITEM'
@AbapCatalog.compiler.compareFilter: true
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'CDS View Demo'
define view Y_PO_ITEM_01 
  as select from ekko
  join ekpo
    on ekko.ebeln = ekpo.ebeln
    {
    ekko.lifnr, 
    ekko.ebeln,
    ekko.bsart,
    ekko.ekorg,
    ekko.ekgrp,
    ekpo.ebelp,
    ekpo.matnr
    }

選択画面

ALV画面(CDS Viewのデータ)

ソースコード

Y_CL_SALV_GUI_TABLE_IDA_CDS
*&---------------------------------------------------------------------*
*& Report Y_CL_SALV_GUI_TABLE_IDA_CDS
*&---------------------------------------------------------------------*
*& CDS ViewのデータをALV画面で出力
*&---------------------------------------------------------------------*
REPORT y_cl_salv_gui_table_ida_cds.

* 選択画面定義
DATA w_ebeln TYPE ekko-ebeln.

PARAMETERS p_lifnr TYPE ekko-lifnr.
SELECT-OPTIONS s_ebeln FOR w_ebeln.

*----------------------------------------------------------------------*
*       CLASS DEFINITION
*----------------------------------------------------------------------*
*----- メイン
CLASS lcl_main DEFINITION CREATE PRIVATE.

  PUBLIC SECTION.
    CLASS-METHODS run.
  PRIVATE SECTION.

ENDCLASS.
*----------------------------------------------------------------------*
*       CLASS IMPLEMENTATION
*----------------------------------------------------------------------*
*----- メイン
CLASS lcl_main IMPLEMENTATION.

  METHOD run.
* IDA作成
    DATA(o_ida) = cl_salv_gui_table_ida=>create_for_cds_view( 'Y_PO_ITEM_01' ).

* 抽出条件の設定
* PARAMETERSの場合
    DATA lr_lifnr TYPE RANGE OF ekko-lifnr.
    DATA(o_sel) = NEW cl_salv_range_tab_collector( ).
    IF p_lifnr IS NOT INITIAL.
      lr_lifnr = VALUE #(
        ( sign = 'I' option = 'EQ' low = p_lifnr )
      ).
      o_sel->add_ranges_for_name( iv_name = 'LIFNR' it_ranges = lr_lifnr[] ).
    ENDIF.
*  SELECT-OPTIONSの場合
    o_sel->add_ranges_for_name( iv_name = 'EBELN' it_ranges = s_ebeln[] ).

    o_sel->get_collected_ranges( IMPORTING et_named_ranges = DATA(lt_named_ranges) ).
    o_ida->set_select_options( it_ranges = lt_named_ranges ).

* ALV出力
    o_ida->fullscreen( )->display( ).
  ENDMETHOD.
ENDCLASS.
*----------------------------------------------------------------------*
*       START-OF-SELECTION
*----------------------------------------------------------------------*
START-OF-SELECTION.
  lcl_main=>run( ).

検証中の事象

CDS ViewにParameterオプションが設定されている場合、エラーとなる。。。