ABAP 보고서에서 선택 화면을 정의하는 것은 원하는 요소에 따라 데이터를 필터링할 수 있기 때문에, 비즈니스 사용자의 역량을 강화하는 데 필수적입니다.
선택 기준은 다음을 애플리케이션이 데이터베이스 레이어 에서 원치 않는 데이터를 필터링하여 데이터를 더 빠르게 처리할 수 있음을 보장합니다.
그러나 데이터를 필터링하려면 Parameter, SELECT-OPTIONS를 사용하여 선택 기준을 정의해야 합니다,
Parameter의 목적은 단일 값을 기준으로 레코드를 필터링하는 것이며, 반면에 SELECT-OPTIONS를 사용하면 복잡한 선택 기준을 정의하여 레코드를 필터링할 수 있습니다. 그런 다음 개발자는 이러한 선택 화면 요소를 Open SQL 문에서 직접 사용하여 데이터를 필터링할 수 있습니다. 그런 다음 이러한 선택 기준은 ABAP 어플리케이션 서버을 통해
SQL WHERE 조건으로 변환됩니다.
그러나 AMDP 프로시저에서 이러한 선택 화면 요소를 사용하고자 한다고 가정해 보겠습니다. 이 경우 AMDP 메서드에서 직접 Parameter를 사용할 수 있지만 이접근 방식은 SELECT-OPTIONS에서는 유효하지 않습니다. SELECT-OPTIONS를 AMDP 메서드에 직접 전달할 수 없으므로 AMDP를 사용할 때 이 제한 사항을 염두에 두어야 합니다. SELECT-OPTIONS를 AMDP 메서드로 전달하려면, 먼저 선택 기준을 필터 문자열로 변환한 다음, 이 문자열을 IMPORTING 매개 변수로 AMDP 메서드에 전달해야 합니다. SELECT-OPTIONS (선택 테이블 또는 범위 테이블)을 동적 SQL WHERE 절로 변환하려면 새로운 CL_SHDB_SELTAB 클래스의 Static 메서드인 메서드 COMBINE_SELTABS( )를 사용하면 됩니다.
이렇게 생성된 조건은 AMDP 메소드 구현에서 SQLScript function APPLY_FILTER를 사용해서 데이터 소스를 필터링하는 데 사용할 수 있습니다. 이 함수는 데이터베이스 테이블, 뷰 및 SAP HANA 뷰에 적용할 수 있지만 analytical 변수 또는 table 변수에는 사용할 수 없습니다. APPLY_FILTER 함수에는 두 개의 매개 변수가 필요합니다.
첫 번째 매개 변수는 적용하려는 데이터 소스이며, 두 번째 매개 변수는 필터를 적용하려는 생성된 WHERE 절로, 문자열 인수로 전달됩니다.
CL_SHDB_SELTAB 클래스는 SAP NetWeaver AS ABAP 7.4에서 사용할 수 없으며 SAP NOTE 2124672에 설명된 단계에 따라 가져와야 합니다. 이 노트를 적용하려면 SAP NetWeaver AS ABAP 7.4 SP08 또는 이상의 버젼이 이 필요합니다.
ABAP 보고서는 아래 코드에 표시된 것처럼 AMDP Method을 사용하여 데이터를 필터링할 수 있습니다. 매개변수를 통한 user selection에 따라 또는 SELECT-OPTION에 따라 특정 날짜 및 고객 카테고리별로 모든 항공사 코드에 대한 예약을 표시하기 위해 데이터를 필터링할 수 있습니다.
* Data declaration
DATA: gwa_sflight TYPE sflight.
* Selection screen
PARAMETERS: p_date TYPE s_date.
SELECT-OPTIONS: s_carrid FOR gwa_sflight-carrid,
s_connid FOR gwa_sflight-connid.
* Build dynamic where clause
TRY.
DATA(lv_where_clause) = cl_shdb_seltab=>combine_seltabs(
it_named_seltabs = VALUE #(
( name = 'CARRID' dref = REF #( s_carrid[] ) )
( name = 'CONNID' dref = REF #( s_connid[] ) ) )
iv_client_field = 'MANDT' ).
CATCH cx_shdb_exception INTO DATA(lref_shdb_exception).
DATA(lv_meesage) = lref_shdb_exception->get_text( ).
ENDTRY.
* AMDP Method call to summarize booking amount by flight, airline code, date, and customer type
zcl_amdp_sflight_details=>get_data(
EXPORTING
iv_client = sy-mandt
iv_date = p_date
iv_filters = lv_where_clause
IMPORTING
et_results = DATA(gt_results) ).
* Display results
cl_demo_output=>display_data(
EXPORTING
value = gt_results
name = 'Flight Booking information').
아래 코드에 표시된 AMDP 방법은 위 코드에 표시된 응용 프로그램에서 전달된 파라미터와 위 코드의 앞부분에 표시된 응용 프로그램에서 전달된 매개변수 및 선택 옵션을 기반으로 SQLScript 함수 APPLY_FILTER 를 사용하여 데이터를 필터링하는 것입니다.
CLASS zcl_amdp_sflight_details DEFINITION
PUBLIC
FINAL
CREATE PUBLIC.
PUBLIC SECTION.
* AMDP Marker Interface
INTERFACES: if_amdp_marker_hdb.
* Data declaration
TYPES: BEGIN OF d_sflight,
carrid TYPE s_carr_id,
connid TYPE s_conn_id,
fldate TYPE s_date,
type TYPE string,
total TYPE s_l_cur_pr,
END OF d_sflight,
tty_sflight TYPE STANDARD TABLE OF d_sflight.
* AMDP Method
CLASS-METHODS get_data
IMPORTING
VALUE(iv_client) TYPE sy-mandt
VALUE(iv_date) TYPE s_date
VALUE(iv_filters) TYPE string
EXPORTING
VALUE(et_results) TYPE tty_sflight.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS zcl_amdp_sflight_details IMPLEMENTATION.
METHOD get_data BY DATABASE PROCEDURE
FOR HDB
LANGUAGE SQLSCRIPT
OPTIONS READ-ONLY
USING sflight sbook.
ET_RESULTS = SELECT a.carrid,
a.connid,
b.fldate,
CASE b.custtype
WHEN 'B' then 'Business Customer'
WHEN 'P' then 'Private Customer'
ELSE 'Others'
END AS "TYPE",
SUM(b.loccuram) AS TOTAL
from sflight as a INNER JOIN
sbook as b on a.carrid = b.carrid
and a.connid = b.connid
WHERE a.mandt = :iv_client --Parameters
AND b.fldate = :iv_date --Parameters
GROUP BY a.carrid, a.connid, b.fldate, b.custtype ;
"Filter based on Selection screen (Select options)"
ET_RESULTS = APPLY_FILTER( :ET_RESULTS, :iv_filters );
ENDMETHOD.
ENDCLASS.
'AMDP > ADMP 기초' 카테고리의 다른 글
2.5 Feature Support Check Using Global Classes (0) | 2023.08.23 |
---|---|
2.3 Calling AMDP Methods in Applications (0) | 2023.08.22 |
2.2 Implementing AMDP Methods (0) | 2023.08.22 |
2.1 Prerequisites (0) | 2023.08.21 |
2. Creating AMDP Classes (0) | 2023.08.19 |