본문 바로가기

CDS View(Core Data Service)/Core Data Service 기초

Consuming CDS View

CDS 뷰는 SAP Fiori, SAPUI5, SAP Analytics Cloud 및 SAP Analysis for Microsoft Office와 같은 여러 프론트엔드 애플리케이션에서 활용되어 혁신적인 보고용 애플리케이션을 제공하는 데 사용될 수 있습니다. 또한 CDS 뷰는 ABAP 애플리케이션에서도 활용될 수 있으며, 여러 CDS 내장 함수 및 표현식을 사용하여 코드 푸시다운(Code PushDown) 기능을 활용할 수 있습니다. 뷰를 사용하는 소비 기술은 주로 해당 뷰를 사용하는 애플리케이션에 따라 다를 수 있으며, 아래 표에서 요약된 것과 같이 애플리케이션 유형에 따라 다를 수 있습니다.

해당 블로그에서는 첫 두 가지 애플리케이션 유형만을 다루고 있습니다.

Application Type Consumption Technique
ABAP other objects enhanced SQL로 앞서서 알려진 ABAP SQL을 사용
ABAP reports integrated data access와 함께 SAP list viewer를 사용
SAPUI5 By creating OData to consume the CDS view or by defining a CDS view that is published using an OData annotation
SAP Fiori By creating OData to consume the CDS view or by defining a CDS view that is published using an OData annotation
Embedded analytics By creating virtual data models such as CDS consumption views

Using ABAP SQL


CDS 뷰는 ABAP 환경에 완전히 통합되어 있으므로 AS ABAP 7.52 이후의 릴리스부터 ABAP SQL로 알려진 Enhanced SQL을 사용하여 ABAP 애플리케이션에서 CDS 뷰를 호출하거나 소비할 수 있습니다. CDS 뷰에서 데이터를 선택하려면 SQL 문의 FROM 절에서 CDS 엔티티를 참조하면 됩니다. FROM 절에 CDS 엔티티 이름이 포함된 경우, 뷰에서 데이터를 검색하기 위해 새로운 SQL 구문을 사용해야 합니다.


데이터를 검색하기 위해 SQL 뷰 이름을 사용할 수도 있지만, 이 접근 방식은 권장되지 않으며 AS ABAP 7.50의 릴리스와 함께 완전히 사용 중단되었습니다.


아래 코드는 ABAP SQL 문을 사용하여 ABAP 애플리케이션에서 소비되는 CDS 뷰의 간단한 정의를 보여줍니다.

@AbapCatalog.sqlViewName: 'ZCDS_EX_SQL01'
@AbapCatalog.compiler.compareFilter: true
@AbapCatalog.preserveKey: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: 'Demo CDS View'
define view ZCDS_Example_01
as select from sflight
{
@EndUserText.label: 'Carrier No'
carrid,
@EndUserText.label: 'Connection Flight No'
connid,
fldate
@<EndUserText.label: 'Connection Flight date'
}

아래 소스 코드는 ABAP SQL 구문을 사용하여 CDS 뷰를 사용하는 ABAP Application의 예시를 설명합니다. 프로그램의 결과는 아래 그림 1과 같습니다.

REPORT ZCDS_EXAMPLE_01.

DATA: gt_results TYPE STANDARD TABLE OF zcds_example_01.

SELECT CARRID,
       CONNID,
       FLDATE
  FROM zcds_example_01
  INTO TABLE @gt_results
  WHERE carrid EQ 'AA'.

IF sy-subrc EQ 0.
 LOOP AT gt_results ASSIGNING FIELD-SYMBOL(<lfs_results>).
  WRITE:/ <lfs_results>-carrid, <lfs_results>-connid, <lfs_results>-fldate.
 ENDLOOP.
ENDIF.

그림 1

 


Using SAP List Viewer with Integrated Data Access


SAP HANA는 대량의 데이터 처리에 대한 중요한 변화를 이끌어냈습니다. 이러한 변화로 인해 엔드 사용자에게 특히 처리, 분석 및 필요한 데이터를 빠르게 표시하여 효과적인 비즈니스 결정을 내릴 수 있는 이점이 생겼습니다.


이러한 장점을 보고용 비즈니스 애플리케이션에서 활용하기 위해 SAP는 특별한 버전의 목록 뷰어, the SAP list viewer with integrated data access 를 도입했습니다.

이 SAP 목록 뷰어의 버전은 전통적인 데이터베이스나 인메모리 데이터베이스에서 모두 사용할 수 있습니다. Code PushDown 기술의 이점을 누리기 위해 통합 데이터 액세스 프레임워크는 데이터베이스 테이블/뷰, 외부 뷰, 그리고 CDS 뷰를 소비하여 ALV(ABAP List Viewer) 목록을 생성하는 것을 지원합니다. 

이 SAP 목록 뷰어의 버전은 전통적인 데이터베이스나 인메모리 데이터베이스에서 모두 사용할 수 있습니다. Code PushDown 기술의 이점을 누리기 위해 통합 데이터 액세스 프레임워크는 데이터베이스 테이블/뷰, 외부 뷰 및 CDS 뷰를 소비하여 ALV(ABAP List Viewer) 목록을 생성하는 것을 지원합니다.

팩토리 클래스 CL_SALV_GUI_TABLE_IDA의 정적 메서드 CREATE_FOR_CDS_VIEW를 사용하면 Figure 8.55에 나와 있는 것과 같이 CDS 뷰를 소비하여 직접 ALV 목록을 생성할 수 있습니다.

아래 소스는 팩토리 클래스 cl_salv_gui_table_ida의 메서드 create_for_cds_view를 사용하여 CDS 뷰 ZCDS_EXAMPLE_01을 소비하는 ABAP 애플리케이션의 예제를 보여줍니다. 또한 이 보고서는 입력 기준에 따라 ALV를 필터링하는 SELECT 옵션도 구현합니다. 생성된 ALV 목록 출력은 그림 1에 나와 있습니다.

REPORT ZCDS_EXAMPLE_02.

* Select options
DATA: gv_carrid TYPE sflight-carrid.
SELECT-OPTIONS: s_carrid FOR gv_carrid.

* Reference variables
DATA: gref_salv TYPE REF TO if_salv_gui_table_ida,
         gref_dbcon TYPE REF TO cx_salv_db_connection,
         gref_tbnos TYPE REF TO cx_salv_db_table_not_supported,
         gref_covol TYPE REF TO cx_salv_ida_contract_violation,
         gref_fnnos TYPE REF TO cx_salv_function_not_supported,
         gref_range TYPE REF TO cl_salv_range_tab_collector,
         gref_disp TYPE REF TO if_salv_gui_fullscreen_ida.

* Internal tables
DATA: gt_range TYPE if_salv_service_types=>yt_named_ranges.

* Method call to create ALV instance using CDS view
TRY.
  gref_salv = cl_salv_gui_table_ida=>create_for_cds_view(
  iv_cds_view_name = 'zcds_example_01').
CATCH cx_salv_db_connection INTO gref_dbcon.
  DATA(lv_error) = gref_dbcon->get_text( ).
CATCH cx_salv_db_table_not_supported INTO gref_tbnos.
  lv_error = gref_tbnos->get_text( ).
CATCH cx_salv_ida_contract_violation INTO gref_covol.
  lv_error = gref_covol->get_text( ).
CATCH cx_salv_function_not_supported INTO gref_fnnos.
  lv_error = gref_fnnos->get_text( ).
  WRITE: /'Error generating ALV', lv_error.
  RETURN.
ENDTRY.

* Create range for Select options
CREATE OBJECT gref_range.

* Build ranges for Select options
CALL METHOD gref_range->add_ranges_for_name
  EXPORTING
    iv_name = 'CARRID'
    it_ranges = s_carrid[].

CALL METHOD gref_range->get_collected_ranges
  IMPORTING
    et_named_ranges = gt_range.

* Used to filter ALV based on Select options
CALL METHOD gref_salv->set_select_options
  EXPORTING
    it_ranges = gt_range.

* Generate ALV
gref_disp = gref_salv->fullscreen( ).
gref_disp->display( ).

그림 1

ALV with IDA는 모든 데이터베이스에서 사용할 수 있지만, 특정 SAP HANA 관련 함수는 CDS 뷰 내에서 사용할 경우 잘못된 결과 또는 프로그램 덤프를 유발할 수 있습니다. 따라서 이러한 프로그램 오류를 피하기 위해 CDS 뷰를 소비하기 전에 클래스 CL_SALV_GUI_TABLE_IDA의 정적 메서드 DB_CAPABILITIES를 사용하여 데이터베이스 기능을 확인하는 것이 좋습니다.

Static 메소드 DB_CAPABILITIES는 인터페이스 IF_SALV_IDA_CAPABILITY_SERVICE의 참조를 제공합니다. 이 인터페이스를 사용하여 특정 테이블/뷰가 ALV with IDA에서 표시될 수 있는지 확인할 수 있습니다.

*Read DB capabilities
data(g_is_text_search_supported) =
cl_salv_gui_table_ida=>db_capabilities( )->is_text_search_supported( ).

 

반응형

'CDS View(Core Data Service) > Core Data Service 기초' 카테고리의 다른 글

Authorization Concept  (0) 2023.07.22
Enhancement  (0) 2023.07.16
CDS View Association  (0) 2023.07.10
CDS View Annotations  (0) 2023.07.09
CDS View 내장 함수 & 표현식 5. Date and Time Function  (0) 2023.07.06