ABAP

SAP CDS View 에 대한 초보적인 실수 (3) - Null 고려.

공사중 2021. 4. 28. 17:42

CDS View 에 @AbapCatalog.sqlViewName 의 Annotation 에 의해 ABAP Dictionary 객체를 만들어 주는 부분은 

ABAP 개발자한테 매우 유용합니다. 

 

보통 ALV Report 개발할때, Display Structure 만들어 Fieldcatalog 를 지정하고, 모델링한 쿼리문으로 데이터를 가져와서 화면에 출력을 하게 되는데요.

CDS View 하나 잘 만들면 Display Structure 까지 한번에 만들어서 진행할 수 있습니다. 

 

더불어, HANA ALV ( ALV with IDA ) 방식의 레포트를 만드는경우에는 이런 작업이 필수라고 생각됩니다.

 

안녕하세요.

공사중 입니다.

 

SAP CDS View 만드실때 종종 격는 세번째 실수편.

( 3 ) Null 값을 고려해서 CDS View 를 만들어야 합니다. 

 

정확한 예시일지는 모르지만, 참고만 해보세요~~^^;;

define view YTEST_CDS_DEV01_002
  as select from    vbak                          as _Header
    inner join      vbap                          as _Item on _Header.vbeln = _Item.vbeln
    left outer join I_SalesDocumentRjcnReasonText as _TVAG on  _Item.abgru    = _TVAG.SalesDocumentRjcnReason
                                                           and _TVAG.Language = $session.system_language
{
  key _Header.vbeln,
  key _Item.posnr,
      _Item.abgru,
      _TVAG.SalesDocumentRjcnReasonName
}

Sales Order 의 거부사유(ABGRU) 의 Text 를 보여주는 코드 입니다. 

< CDS View Contents >

이렇게 보면 아무 문제가 없어보이지만,

SAP 특성상 SE16 혹은 해당 필드를 참조해서 만든 Selection Screen 에서는 Null 검색이 지원되지 않습니다.

 

< 비어있는 레코드를 검색하려 Equal 을 지정한 화면 >

혹시나 위와 같은 방법으로 검색시, 

당연하게도 Null 과 Space 는 다르기 때문에, 검색이 되지 않습니다. 

 

그러다보니 CDS View 를 만들때 Left Outer Join 혹은 그에 준하는 Association 된 필드를 노출하신다면, 

Null 을 Space 로 전환하는 Function 처리를 하시는게 좋습니다. 

 

define view YTEST_CDS_DEV01_002
  as select from    vbak                          as _Header
    inner join      vbap                          as _Item on _Header.vbeln = _Item.vbeln
    left outer join I_SalesDocumentRjcnReasonText as _TVAG on  _Item.abgru    = _TVAG.SalesDocumentRjcnReason
                                                           and _TVAG.Language = $session.system_language
{
  key _Header.vbeln,
  key _Item.posnr,
      _Item.abgru,
      cast( coalesce( _TVAG.SalesDocumentRjcnReasonName, '' ) as bezei40 ) as SalesDocumentRjcnReasonName
}

 

Coalesce( Arg1, Arg2 ) 펑션 입니다. ( Arg1 이 null 이면, Arg2 의 값으로 지정함 ). 

※ 참조 URL : help.sap.com/doc/abapdocu_751_index_htm/7.51/en-us/abencds_f1_coalesce_expression.htm

 

ABAP CDS - coalesce - ABAP Keyword Documentation

SAP NetWeaver AS ABAP Release 751, ©Copyright 2017 SAP AG. All rights reserved.   ABAP - Keyword Documentation →  ABAP - Dictionary →  ABAP CDS in ABAP Dictionary →  ABAP CDS - Data Definitions →  ABAP CDS - DDL for Data Definitions →

help.sap.com

다시 .. 결과를 보면. 

< CDS View 에 Null 을 Space 로 치환한 결과 화면 >

= Space 조건으로 정상 조회가 되는것을 확인하실수 있습니다. 

 

이제.. 해당 CDS View 를 사용하는 Report 에 해당 필드를 Selection Screen 에 넣어도 오류가 발생하지 않습니다.

 

끝.

 

 

[ABAP] - SAP CDS View 에 대한 초보적인 실수 (1) - Key Field Setting

 

SAP CDS View 에 대한 초보적인 실수 (1) - Key Field Setting

안녕하세요. 공사중 입니다. 이번에는 CDS View 를 만들면서 제가 했던 실수들에 대해서 공유해 보겠습니다. 혹시 CDS View 에 대한 경험이 많치 않은 분들에게 도움이 되셨으면 좋겠습니다. 이번 시

gongsajung.tistory.com

[ABAP] - SAP CDS View 에 대한 초보적인 실수 (2) - 수량/금액 필드

 

SAP CDS View 에 대한 초보적인 실수 (2) - 수량/금액 필드

CDS View 에 @AbapCatalog.sqlViewName 의 Annotation 에 의해 ABAP Dictionary 객체를 만들어 주는 부분은 ABAP 개발자한테 매우 유용합니다. 보통 ALV Report 개발할때, Display Structure 만들어 Fieldcatalog..

gongsajung.tistory.com