안녕하세요 SAP린의 커리어 임대리 입니다~ 신규 구축 프로젝트를 왔더니 New Syntax를 많이 사용하더라구요..
그래서 여기저기 찾아보고 혼자 연구해봤습니다. S/4 HANA DB를 제대로 활용하려면 New Syntax를 많이 써야겠다는 생각이 들었습니다.
오늘은 New Syntax 중에서 간단하지만 다양하게 활용 중인 VALUE 구문에 대해서 알려드겠습니다~!
VALUE문
VALUE 문을 한 마디로 표현하면 값을 할당해 주는 구문입니다. ECC 버전에서는 ‘=’ 구문이 그 역할 대신해 주고 있었습니다. 이미 값을 할당해 주는 구문이 있는데 VALUE 문을 사용해야 할 이유가 있을까요?
‘=’ 구문에 비해서 VALUE 문은 할 수 있는 옵션이 많습니다. ‘=’ 구문이 그 옵션들과 동일한 결과를 내기 위해서 더 많은 코딩이 필요합니다. 불필요한 변수 선언과 코딩 라인을 줄일 수 있다는 점에서 사용하고 있습니다.
#( … ) , type( … )
ECC ABAP만 사용하시던 개발자분이라면 ‘#’ 의미가 매우 궁금하셨을 것입니다. ‘#’를 이해하기 앞선 *DATA( ) 문을 아셔야 합니다. 다른 New Syntax에서도 많이 조합해서 사용하는 구문입니다.
* DATA( ) : 값을 할당과 동시에 변수 선언을 할 수 있는 구문입니다.
DATA( ) 문은 값 할당과 동시에 생성되지만 DATA … TYPE 처럼 구조를 지정해 줄 수 없습니다. 그래서 VALUE type( … ) 문을 활용해서 구조를 지정해 줄 수 있습니다.
그럼 이제 VALUE #( … )는 언제 사용될까요??
첫 번째로 이미 변수에 TYPE을 지정해 주었다면 다시 지정해 줄 필요가 없기 때문에 #을 사용할 수 있습니다.
두 번째로 값을 할당해 주는 변수가 있다면 VALUE #( … )을 사용해서 값을 할당해 주는 변수의 TYPE를 따라가겠다는 의미로 사용할 수 있습니다.
주의할 점은 VALUE 문 TYPE에는 글로벌 Dictionary 오브젝트, 로컬로 만든 Types만 올 수 있습니다. 저희가 프로그램에 선언해 둔 변수(ls_struct 등)를 참조하려고 하면 아래와 같은 Syntax 오류가 발생합니다.
원래 변수 선언하던 DATA 문에서 LIKE , TABLE OF, LINE OF 옵션이 없다고 생각하면 됩니다.
Structure, Internal table
사실 단일 변수는 VALUE 문을 사용하는 의미가 별로 없습니다. VALUE 문은 스트럭처와 인터널 테이블에서 사용할 때 그 진가가 발휘합니다.
ECC 버전에서는 스트럭처 필드에 주어야 하는 값이 많아질수록 스트럭처-필드 = 값 로직도 많이 써야 합니다. 테이블에 값을 넣기 위해서는 스트럭처를 만들고 스트럭처에 필드에 값을 넣은 다음 테이블에 스트럭처를 append 하는 방식을 많이 사용했습니다. 하지만 VALUE 문을 사용하면 테이블 형태 변수도 스트럭처 없이 바로 값을 넣을 수 있습니다!
테이블에 경우 필드별로 값을 직접 줄 수도 있고 동일한 구조의 스트럭처를 입력할 수도 있습니다.
아래 예시는 테이블에 여러 줄을 넣을 때입니다. 값을 할당해 주는 변수가 스트럭처라면 괄호가 하나지만 테이블은 괄호가 2개가 있습니다. 첫 번째 대 괄호가 테이블 내부라면 내부 작은 괄호가 한 라인 안을 의미합니다.
위와 같은 방식은 여러 군데 사용할 수 있지만 저는 구축 프로젝트를 하면서 *BAPI Import 스트럭처나 테이블은 워낙 필드나 들어가는 값이 많아서 사용하면 편리했습니다!
*BAPI란? 모듈별 프로세스에 트랜잭션( Sales Order 생성 등) 위해서는 티코드( VA01 등 )로 들어가서 해당 화면에서 작업 후 저장 버튼을 눌러서 발생시킵니다. 하지만 외부 인터페이스나 반복 작업, CBO 프로그램에서 트랜잭션 발생시키는 경우 BAPI라는 펑션을 사용해서 트랜잭션을 발생시킬 수 있습니다. ( BAPI_SALESORDER_CREATEFROMDAT2 등 )
VALUE 문에 편리함은 필드값이 중복되는 부분은 첫 번째 괄호에 쓰고 뒤에 작은 괄호와 필드 값을 주면 자동으로 들어가는 걸 볼 수 있습니다. 이걸로 LOOP 문 사용을 줄이고 불필요한 코딩을 줄일 수 있습니다.
*Nested 스트럭처나 테이블에도 별다른 구문과 변수 선언 없이 넣을 수 있습니다.
*Nested 스트럭처나 테이블이란? 스트럭처는 기본적으로 여러 개 필드로 구성된 구조지만 스트럭처 내부 필드 하나의 스트럭처나 테이블 구조가 들어갈 수 있습니다. 그걸 ‘Nested 스트럭처’라고 합니다. 그리고 Nested 스트럭처 구조를 갖고 있는 테이블을 ‘Nested 테이블’입니다. 대표적인 예시로 셀스타일, 셀컬러 줄 때 사용하는 구조입니다.
BASE
ECC 버전에서는 변수에 값을 할당할 때 기존 변수의 값이 모두 사라지고 새로운 값이 대체됩니다. 그래서 테이블의 경우 APPEND나 INSERT 구문을 활용해서 기존 값을 살리면서 데이터를 추가하기도 합니다. 하지만 BASE 문을 쓰면 기존 데이터를 유지하면서 데이터를 추가할 수 있습니다.
감사합니다. :)
'SAP > New Syntax' 카테고리의 다른 글
SAP ABAP New Select문에 대해 알아보자 (2) | 2024.06.21 |
---|---|
SAP ABAP New Syntax New Sql이란? (0) | 2024.06.19 |