ALV의 Cell EDIT 모드에 관련된 기본 사항들을 몇 가지 적어볼까 한다.

 

 

ALV 조회 모드  vs  ALV 수정 모드

< ALV Display Mode >
< ALV Edit Mode >

Edit 모드 시 데이터 제어에 필요한 버튼들이 추가됐으며, Key Field 색상이 변경된 것을 확인할 수 있다. 

 

실무에서는 Edit 모드 시에 추가로 보이는 Standard 버튼들은 숨기고(제외) 실제 필요한 버튼만 새로 추가해 작업하는 경우가 많다. 제공되는 Standard 버튼으로 데이터를 간단히 제어(입력/수정/삭제)하기엔 편할 수 있지만, 보통 현업은 추가적으로 입력한 데이터의 유효성 점검이나 다른 필드에도 값이 자동으로 채워지도록 하는 기능들이 함께 구현되기를 원하고 , 이는 Standard 버튼으로 커버하기엔 힘든 부분이 있기 때문이다. 또한 ALV 행의 추가 및 삭제는 후속으로 Database TABLE의 저장 및 삭제로 이어지므로, 제약사항 없이 사용 가능한 Standard 버튼보다는 별도 추가/삭제 버튼을 만들어 타이트하게 관리하고 제어하는 것이 일반적이다.  

 


ALV Cell Edit 모드 활성화 

  • ALV 전체 Edit 모드 활성화 시 LAYOUT의 EDIT 필드 'X' 적용  
  • ALV Column 레벨로 Edit 모드 활성화 시 FIELDCATALOG의 EDIT 필드 'X' 적용 

데이터 신규 추가보다는 기존 데이터 수정이 많아 전체보다는 Column 또는 Cell 레벨로 Edit 모드를 활성화하는 편이다. 신규 라인 추가 시에도 앞에서 언급한 것과 같이 데이터 입력 최소화 및 자동화로 전체 Cell을 Edit 모드로는 사용하진 않는 편이다. 

 

Method "SET_READY_FOR_INPUT"를 통해 EDIT Cell을 input 활성화( 1 )/ input 비활성화( 0 ) 제어가 가능하다. 

< SET_READY_FOR_INPUT Method 호출 예제 >

추가로 STYLE 필드( Type LVC_T_STYL )를 사용하여 Cell 개별로도 Edit 모드를 ON/OFF 제어가 가능하다.

 

STYLE 필드에 대해서는 하위 포스트에 적어놓았으니 참고하도록 하자.

[ABAP Working Lv./ALV] - |ALV| 개별 Cell 제어 ( feat. STYLE 필드 )

 

 


변경 데이터를 ALV 인터널 테이블에 반영

ALV Edit 모드에서 데이터 변경 시 바로 인터널 테이블에 반영되진 않는다. 예를 들어  ALV 화면의 어느 Cell 값을  'A'를 'B'로 바꾸어도 인터널 테이블에서는 여전히 'A' 값을 가지고 있는다. 다시 말해 화면에 보이는 ALV 화면 데이터( Presentation Level )와 ALV 인터널 테이블 데이터( Application Level )는 분리된 영역이며, 동기화하는 작업이 필요하다. 그 작업은 다음과 같은 Method를 활용해 볼 수 있다. 

 

현재까지 변경된 데이터를 인터널 테이블에 반영하려면 Method "CHECK_CHANGED_DATA"를 사용한다.

< CHECK_CHANGED_DATA Method 호출 예제 >

데이터 변경시마다 바로 인터널 테이블에 반영하게 하려면 Method "REGISTER_EDIT_EVENT"  사용한다.

< REGISTER_EDIT_EVENT Method 호출 예제 >

해당 Method는 ALV 구현 시 한 번만 호출(등록)하면 되는 Method로 Exporting Parameter "i_event_id"의 값에 따라 해당 시점에 변경 값이 ALV output 인터널 테이블에 반영된다. 물론 변경 값은 데이터 타입 체크 같은 기본적인 Standard 유효성 점검에 문제가 없을 시에만 반영이 된다. 

 

Exporting Parameter  "i_event_id" Trigger 시점
CL_GUI_ALV_GRID=>MC_EVT_ENTER Cell 에 "Enter Key" 를 쳤을 때
CL_GUI_ALV_GRID=>MC_MVT_MODIFIED Cell 변경 후 Cell(커서)을 이동했을 때

Event "DATA_CHANGED"가 활성화되어 있다면 동기화 시점, 즉 변경 값이 ALV output 인터널 테이블에 반영되기 전 시점에 수행된다. 

 


Edit mode시 ALV Toolbar에 추가되어 보이는 Standard 수정 버튼들은 추가 로직 구현에 번거로움이 있어 해당 버튼들은 숨기고 필요한 버튼만 별도 구현한다고 앞에서 잠깐 언급하였다. 여기서 유의할 점은 해당 Standard 버튼을 Toolbar에서 숨기어도 실제 "Ctrl+C", "Ctrl+V",  "Delete" 등 단축키를 이용하면 여전히 작동한다는 것이다. 그렇게 되면 라인 제어( 행의 추가와 삭제 )에 있어 추가로 체크해야 할 부분이 많아져 로직 구현에 번거로움이 있다. 이때, LAYOUT의 "NO_ROWINS"필드에 'X' 값을 주면, 애초에 Standard 라인 제어 기능을 막음으로써 추가로 유효성 체크 로직을 넣어야 하는 번거로움을 줄일 수 있다.

< LAYOUT 의 "NO_ROWINS" 필드에 'X' 값을 주었을 때 Toolbar >

 

+ Recent posts