300x250
728x90

# 유효성 검사..


프로그램을 만들면서 유효성 검사를 할 경우가 생긴다.
 
ALV , Table control 등 리스트에서 삭제를 했던 업데이트를 했던 무엇이 변경이 되었는지 확인을 하고 싶거나,,
저장을 하거나,, 등등 유효성 검사를 해야 효율적이다. 만약에 변경된 데이터가 없는데 업데이트 로직을 탈 이유는 없기 때문이다. 
그럼 시작해 보자.
 
유효성 검사에는 총 2가지가 있다 

# 물론 2가지 말고도 여러 가지 방법도 있으며 또한 다른 로직들이 많을 것이라고 예상하고 이런 방법도 있다고 생각해서 쓰는 것이기 때문에 참고 바래요!
 

여기서 알아볼 것 Table 전체 유효성 검사이다.

 

Table 전체 유효성 검사

 

# 시작하기 전, 순서


여기서 말하는 Table = Internal Table이다.

우리가 생각해야 하는 것 Internal Table변경이 되었나 안 되었나를 생각하면 된다.
DB Table과 ALV Table을 비교하는 방법을 사용하려고 한다.
 

# 순서 

 

ㄱ. SELECT을 통해서 원초적인 데이터를 가져와서 Internal Table( ALV Table type ) 저장한다.
ㄴ. 가져온 데이터를 다른 Internal Table(DB Table type)에 옮긴다.
ㄷ. 가져온 데이터를 가공한다( 도메인 값 가져오기, ALV CELL 구현, 추가적인 데이터 등등 )
ㄹ. 가공되어 있는 Internal Table( ALV Table type )을 ALV에 뿌려준다.
ㅁ. ALV 리스트에서 변경을 하고,
저장이나 다른 버튼눌렀을 경우 변경된 Internal Table( ALV Table type )로컬 Internal Table( DB Table type)에 옮긴다.
ㅂ. 다른 Internal Table( DB Table type )하고 로컬 Internal Table( DB Table type)하고 유효성 체크를 한다.
ㅅ. 만약 저장을 하게 된다면 다른 Internal Table( DB Table type )도 다시 SELECT를 해줘서 옮겨줘야 한다. 

 

순서에 맞게 시작하겠다.

 

#중요 여기서는 앞에서 말 한대로 Table 유효성 검사만 할 뿐 SQL이나 테이블 생성, 버튼 추가 같은 설명은 안 하는 걸로 하겠습니다.

 

Trasn. Table 

 

TOP 선언

Program 실행화면

왼쪽 버튼은 조회/변경 or 오른쪽 버튼 유효성 검사

 

# TOP 선언


#1. 비교할 수 있게 Internal Table을 TOP에서 선언해 보자

더보기
* DB Table Type
TABLES:
  ZSCARR_GJ.

* ALV Table Type
TYPES: BEGIN OF TY_S_LIST01.
         INCLUDE STRUCTURE ZSCARR_GJ.
TYPES:   CELLSTYL TYPE LVC_T_STYL,
         CELLSCOL TYPE LVC_T_SCOL,
         ROWSCOL  TYPE CHAR04,
       END OF TY_S_LIST01.

DATA: GT_LIST01  TYPE TABLE OF TY_S_LIST01, " ALV Table Type"
      GT_LIST_DB TYPE TABLE OF ZSCARR_GJ. " DB Table Type"

 

# ㄱ ㄴ ㄷ ( START-OF-SELECTION )


1. SELECT을 한 뒤에는 GT_LIST_DB( DB Table Type )에 바로 옮겨줘야 한다. 

Internal Table( ALV Table type ) = GT_LIST01
다른 Internal Table( DB Table Type ) = GT_LIST_DB
 

2. 그 이후는 GT_LIST01( ALV Table Type )에 있는 데이터들을 가공하자. 

# 가공하는 것은 생략하겠다.

 

ㄱ. SELECT을 통해서 원초적인 데이터를 가져와서 Internal Table( ALV Table type ) 저장한다.

ㄴ. 가져온 데이터를 다른 Internal Table(DB Table type)에 옮긴다.

ㄷ. 가져온 데이터를 가공한다( 도메인 값 가져오기, ALV CELL 구현, 추가적인 데이터 등등 )
 

# ㄹ ( PROCESS BEFORE OUTPUT )


1. ALV 리스트에 뿌려주자.

 

2. 디버깅을 보게 되면 가공이 되어있는 걸 볼 수 있다. ( CELLSTYL )

 

# ㅁ ㅂ ㅅ ( PROCESS AFTER INPUT )

1. Table 데이터 전체유효성 검사 할 때에는 이런 식으로 로직을 짜도 상관이 없다. 또한 하나의 데이터를 유효성 검사 할 때도 또한 전체적인 로직은 똑같다.

IF문 로직은 바뀌지않는다.

# Function Code'CHECK'로 되어있지만 SAVE 버튼으로 봐도 상관없다.


# 중요

ALV 리스트가 변경이 되었다 해도 GT_LIST01을 보면 변경이 안 된다. SAP GUI 한테 변경이 되었다고 말(로직)을 해줘야 한다.
CALL METHOD ...->CHECK_CHANGED_DATA을 통해서 ALV 리스트의 데이터를 변경하면 
ALV 리스트 GT_LIST01 데이터 변경이 된다.


다른 Internal Table( DB Table type ) = GT_LIST_DB

로컬 Internal Table( DB Table type ) = LT_LIST_OLD

Internal Table( ALV Table type ) = GT_LIST01

 

ㅁ. ALV 리스트에서 변경을 하고,

저장이나 다른 버튼을 눌렀을 경우 변경된 Internal Table( ALV Table type )을 로컬 Internal Table( DB Table type)에 옮긴다.

ㅂ. 다른 Internal Table( DB Table type )하고 로컬 Internal Table( DB Table type)하고 유효성 체크를 한다.

 

# 테스트


1. 기본 데이터를 SELECT을 하고 CARRNAME변경하고자 한다. 

혹시나 조회/변경 버튼에 대해서 알고싶으면 

2022.04.15 - [.SAP/..ABAP] - SAP ALV cell edit 설정( Enabled, Disabled )

 

SAP ALV cell edit 설정( Enabled, Disabled )

SAP ALV Cell 관리하는 방법( Display -> Input ) 1. 전체 ALV을 Input으로 변경하는 방법 2. 몇 개 필드는 Enabled , 나머지 필드는 Disabled로 변경하는 방법이 있다. # 참고로 Enabled = Edit 가능 Disabled = Edit 불가능

potato98.tistory.com

 

2. "Gamja TEST"로 변경 하고 유효성 체크를 해보자. 다음과 같이 뜨면 성공이다.

 

3. 디버깅을 통해서 확인해 보자. 다음과 같이 바뀌어 있는 걸 확인할 수 있다.

 

4.  디버깅 확인 하는 방법 

# 밑에 링크 확인 보면 된다.
2023.04.24 - [.SAP/..ABAP] - SAP Internal Table 비교하는 방법( Workarea 포함 )

 

SAP Internal Table 비교하는 방법( Workarea 포함 )

비교하기 Internal Table(인터널 테이블)과 Internal Table(인터널 테이블)을 비교하는 방법이 있다. 물론 Workarea와 Workarea을 비교하는 방법 또한 같다. # 이것이 헷갈리다면 2023.04.09 - [.SAP/..ABAP] - SAP Workare

potato98.tistory.com

 
 
끝.
 

 

 

도움이 되셨으면 하단에 있는 광고 한번씩 눌러주세유!!

 

 

728x90