【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)](https://blogs.sap.com/2018/07/16/sap-list-viewer-with-integrated-data-access-alv-with-ida/)
[ABAP Development: Work with Core Data Services (CDS)](https://developers.sap.com/group.abap-cds.html)

CDS Viewではなく、テーブルデータを出力する方法についてはこちら
[統合データアクセス(IDA)を備えたALVでテーブルデータを表示する(CL_SALV_GUI_TABLE_IDA)](https://qiita.com/mahko2/items/491fb336878cf67ec6a9)

#実行結果
※CDS Viewのデータを表示。
###CDS Viewの定義
※テーブルEKKOとEKPOを結合しただけ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22526/d307dcd0-d891-87ab-d60a-e0dd952be8b3.png)

```ABAP: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
    }
```

###選択画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22526/06fa3c3c-6449-19bb-8864-70206b1b6f6f.png)

###ALV画面(CDS Viewのデータ)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22526/23116953-6784-c562-0347-fd7cc392f50e.png)

#ソースコード
```ABAP: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オプションが設定されている場合、エラーとなる。。。