배경 : cl_salv_table
클래스를 사용하여 ALV를 생성하고 수정합니다. 이 ALV는 유형이 zpm_et_qual_notif_s
인 테이블을 표시합니다. 여기서 모든 짝수 행은 이름이 DELIM1
, DELIM2
... CHAR
길이가 1
인 구분자 필드입니다. 구분 기호 열을 ALV에 표시 할 이유가 없으므로이를 제거하고 싶습니다.데이터 형식에 따라 ALV 열을 동적으로 숨기기
참고 : ABAP 사전 구조 나 내가 정의한 내부 테이블의 열 개수를 결정하는 것이 아니기 때문에 제목에 "ABAP 사전/내부 구조"일반을 남겼습니다. 현재 15 개 구분 필드가 있기 때문에
나를 위해 쉬운 솔루션이 15 일 문을하는 것입니다 :
lv_alv->get_columns()->get_column('DELIM1')->set_visible(if_salv_c_bool_sap=>false).
lv_alv->get_columns()->get_column('DELIM2')->set_visible(if_salv_c_bool_sap=>false).
lv_alv->get_columns()->get_column('DELIM3')->set_visible(if_salv_c_bool_sap=>false).
lv_alv->get_columns()->get_column('DELIM4')->set_visible(if_salv_c_bool_sap=>false).
lv_alv->get_columns()->get_column('DELIM5')->set_visible(if_salv_c_bool_sap=>false).
...
이것에 문제가 있음을 새 필드가 테이블에 추가하는 경우, 내 프로그램도 업데이트해야합니다. 이런 이유로,이 접근법은 많은 중복 라인을 필요로하는데, 나는 이것이 험난한 해결책이라고 생각한다.
" Dynamically hide delimiter columns
DATA lv_idx TYPE syst_index VALUE 1.
WHILE lv_idx < 16. " Number of delimiters
lv_alv->get_columns()->get_column(|DELIM{ lv_idx }|)->set_visible(if_salv_c_bool_sap=>false).
lv_idx = lv_idx + 1.
ENDWHILE.
이 좋은이 간단한 솔루션 소개합니다을 때문에 : 나는 믿고 무엇
는 청소기 솔루션은 동적 그래서 같은 방식으로 구분 모든 컬럼의 가시성을 설정하는 것입니다 할 수 최소한의 오버 헤드. 그러나 구분 기호 열 수를 하드 코딩해야하는 문제가 여전히 있습니다. 이상적인 해결책은 다음과 같이 할 수 있습니다.
" Dynamically hide delimiter columns
DATA lv_idx TYPE syst_index VALUE 1.
WHILE lv_idx < (columns('ZPM_ET_QUAL_NOTIF_S')/2). " Number of delimiters
lv_alv->get_columns()->get_column(|DELIM{ lv_idx }|)->set_visible(if_salv_c_bool_sap=>false).
lv_idx = lv_idx + 1.
ENDWHILE.
... 물론 물론 그런 것은 아닙니다.
내 내부 테이블 또는이 테이블이 기반으로하는 ABAP 사전 구조의 열 수를 어떻게 동적으로 가져올 수 있습니까? 확실히 여기에 일부 동적 솔루션이 있습니다. 이 문제를 직접 풀려고하면 cl_abap_structdescr
과 cl_abap_tabledescr
으로 나를 둘러 보았습니다. 내 모든 접근 방식이 나쁘다면 좋은 습관을 따르기 위해 그것을 변경하는 것이 편합니다.
이 테이블을 채우기 위해 파일에서 데이터를 업로드하려고하십니까? – jhamu
@jhamu 아니요, 입력 데이터는 고객 데이터베이스 테이블에서 가져옵니다. – gkubed