【ABAP】Code push down 실천편(메모)

6265 단어 ABAPCDSabapSAPHANA

취지



실무중에서 「이것은 Code push down 할 수 있을 것 같다」라고 생각한 재료를 구현합니다. (소재는 에센스만으로 실제 요구 사항과 다릅니다)
생각해 낸 베이스로 이 기사에 추가해 갑니다.

Code push down에 대한 이전 기사
【ABAP】Code push down을 실현하는 방법
【ABAP】Code push down 실장편

요구사항 1: EKKO와 EKPO를 결합, EKPO는 삭제되지 않은 1건만



주문 헤더(EKKO)와 품목(EKPO)을 결합한 데이터를 가져옵니다.
그러나 EKPO에서 원하는 것은 플랜트, 보관 장소 정보뿐입니다.
1 주문 내에서 플랜트, 보관 장소는 공통이라는 제약이 있으므로, EKPO의 삭제되지 않은 품목 중에서 최소의 품목을 취득하고 싶습니다.

생각한 것



① INNER JOIN의 조건에 최소의 품목 번호를 지정할 수 없는가?


SELECT EBELN, EKORG, EKGRP, EBELP, WERKS, LGORT
  FROM EKKO
  INNER JOIN EKPO
     ON EKKO~ebeln = EKPO~EBELN
    AND EKPO~ebelp = select min( ebelp ) from ekpo where ebeln = '4500000001' and loekz is initial.

신택스로서 ON의 조건에 SELECT를 쓸 수 없기 때문에 안 되었습니다.
그리고, 발주 번호가 파라미터등으로 지정되지 않으면 이 쓰는 방법에서는 무리.

오류 화면


② CDS 뷰를 2개 만들어 최소 품목 번호를 조건으로 취득할 수 없는가?



조금 번거롭지만 두 개의 CDS보기를 만들기로 결정했습니다.
1. EKPO에서 주문 번호와 삭제되지 않은 최소 품목 번호의 조합을 얻는 뷰
2. EKKO와 1.의 뷰를 결합하고 EKPO를 더한 뷰

보기 1
※어노테이션은 생략하고 있습니다
define view ZMOB58_I_MIN_PO as select from ekpo {

    key ebeln,
    key min( ebelp ) as ebelp

}where loekz is initial
group by ebeln

보기 2
define view ZMOB58_C_PO
  as select from ekko            as h
    inner join   ZMOB58_I_MIN_PO as min_i on h.ebeln = min_i.ebeln
  association [1] to ekpo as _ekpo on  min_i.ebeln = _ekpo.ebeln
                                   and min_i.ebelp = _ekpo.ebelp
{

  key h.ebeln,
  key ebelp,
      bukrs,
      bsart,
      lifnr,
      ekorg,
      ekgrp,
      waers,
      _ekpo.werks,
      _ekpo.lgort

}

뷰 2 실행 결과


보기 2를 ABAP에서 호출할 수도 있습니다.
SELECT * from zmob58_c_po
   INTO TABLE @DATA(lt_ebelp).

결론



유감스럽게도 SQL 한발로는 무리로, CDS2개로 할 수 있었습니다.
뷰를 정의하는 것이 조금 번거롭지만, 뷰마다 올바른 결과가 되어 있는지 확인하면서 진행되기 때문에 알기 쉽다고 생각했습니다.

좋은 웹페이지 즐겨찾기