ALV에서 Column Size를 Optimzize 하기 위해서 다음과 같다.

 

< 출처 : https://help.sap.com/doc/saphelp_nw74/7.4.16/en-us/4e/b7a512999e0134e10000000a42189b/frameset.htm >

 

SAP ALV Documnet에 나와 있듯이 ALV LAYOUT 의 CWIDTH_OPT 속성으로 Column Size Optimize 를 활성화 할 수 있다.  ( Value Range : SPACE(사용안함), 'X'(사용)  )

 

< Column Optimize 반영된 ALV. >

 

ALV Optimize 후엔 위와 같이 데이터 값 또는 컬럼 헤더의 텍스트 중 길이가 긴 것을 기준으로 Optimize 된 것을 볼 수 있다. 

 


 

이 때 한가지 문제가 있는데, 데이터 변경으로 인해 ALV를 Refersh (Method REFRESH_TABLE_DISPLAY 호출 ) 하게 되면, 변경된 값 기준으로 Column의 Optimize가 재조정되지 않는다. 

< ALV Refresh 후 Message 필드의 값이 잘려서 보임 >

 

위와 같이 ALV에서 BAPI, BDC, I/F 같은 트랜잭션 처리 후엔 Status 필드와 Message 필드를 추가하여 그 결과를 업데이트해서 보여주게 되는데, 그 중 Message 필드가 Optimize 조정이 되지 않아 잘려 보이게 된다.

 

수동으로 다시 OPTIMIZE 하는 방법으로는 Method OPTIMIZE_COL 또는 OPTIMIZE_ALL_COLS 호출( Method 속성이 Protected여서 CL_GUI_ALV_GRID 상속 후 사용해야 함), Fieldcatalog 와 Layout 재설정  등 여러 방법이 있을 수 있지만,

 

CWIDTH 속성 값에  'X' 가 아닌 'A' 값을 주면 쉽게 해결할 수 있다. 

LAYOUT-CWIDTH = 'A' 

 

<&nbsp; ALV Refresh 후에 Column 길이가 자동으로 Optimize 됨 >

 


 

ALV Column Optimize 관련해서 추가로,

요청사항 중 특정 컬럼만 Optimize 를 해달라고 하는 경우가 있다.

 

요즘엔 모니터 해상도가 워낙 높아져서 ALV Column이 10개 미만인 경우

Column 전체가 Optimize 되면 화면에 공백이 많아져 굳이 Optimize 시킬 필요가 없다.

 

단, Message 같이 내용이 길면서 동적으로 보여줘야 하는 필드가 있는 경우

해당 필드만 Optimize 하면 좀 더 깔끔하게 화면을 구성할 수 있다. 

 

이 때는 LAYOUT 속성이 아닌 FIELDCATALOG 속성으로 필요한 컬럼에만 Optimize를 적용하면 된다.

( 물론 이 때는 LAYOUT 속성의 CWITDH_COL 속성은 비활성화( = SPACE) 상태여야 한다. )

FIELDCAT-COL_OPT  =  'X' 

 

 

+ Recent posts