Easy ABAP 사이트에서 물어물어 f4 메쏘드를 거의다 완성했네요
이제 거의 끝이 보여가는데 또 막힌게 있어서 질문올립니다 !
Possible entry 모양이 제대로 안나와서요 ㅎ
2칸으로 옆에는 Description을 띄우고 싶은데 그게 잘 안되네요 ㅠㅠ
어느 부분에서 팝업창모양을 바꾸는건지 잘 모르겠어요 ㅠ 도와주세요 !
코딩과 함께 지금뜨는 팝업창 모양 첨부해서 올립니다 ㅜ
FORM on_f4 USING p_fieldname TYPE lvc_fname
p_es_row_no TYPE lvc_s_roid
p_er_event_data TYPE REF TO cl_alv_event_data
p_et_bad_cells TYPE lvc_t_modi.
FIELD-SYMBOLS: <lt_f4> TYPE lvc_t_modi.
DATA: ls_f4 TYPE lvc_s_modi,
ls_f4_s TYPE lvc_s_modi,
l_class ,
l_s_class, l_o_class, l_d_class, l_n_class,
l_w_class.
ASSIGN p_er_event_data->m_data->* TO <lt_f4>.
ls_f4-fieldname = p_fieldname.
ls_f4-row_id = p_es_row_no-row_id.
* p_er_event_data->m_event_handled = 'X'."standard f4 타지않겠다는의미
READ TABLE itab INDEX ls_f4-row_id.
CASE p_fieldname.
WHEN 'DCLASS'.
PERFORM f4_class CHANGING l_class.
IF l_class IS NOT INITIAL.
MOVE l_class TO itab-dclass.
MODIFY itab INDEX ls_f4-row_id.
ENDIF.
CLEAR : lt_f4, lt_f4[], lt_ret, lt_ret[].
ENDCASE.
p_er_event_data->m_event_handled = 'X'."standard f4 타지않겠다는의미
CALL METHOD g_grid->refresh_table_display
EXPORTING
is_stable = gt_stbl
i_soft_refresh = c_x
EXCEPTIONS
finished = 1
OTHERS = 2.
IF sy-subrc <> 0.
ENDIF.
ENDFORM.
===> 위의 perform 문 안의 코딩
FORM f4_class CHANGING p_class.
IF lt_f4 IS INITIAL.
MOVE : 'O' TO lt_f4-dclass,
'OA' TO lt_f4-text1.
APPEND lt_f4. CLEAR lt_f4.
MOVE : 'S' TO lt_f4-dclass,
'Server' TO lt_f4-text1.
APPEND lt_f4. CLEAR lt_f4.
MOVE : 'D' TO lt_f4-dclass,
'Disk' TO lt_f4-text1.
APPEND lt_f4. CLEAR lt_f4.
MOVE : 'N' TO lt_f4-dclass,
'Network' TO lt_f4-text1.
APPEND lt_f4. CLEAR lt_f4.
MOVE : 'W' TO lt_f4-dclass,
'Work station' TO lt_f4-text1.
APPEND lt_f4. CLEAR lt_f4.
ENDIF.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'DCLASS'
window_title = '대분류'
value_org = 'S'
* VALUE = LT_F4
TABLES
value_tab = lt_f4
return_tab = lt_ret
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
IF sy-subrc <> 0.
ELSE .
MOVE lt_ret-fieldval TO p_class.
ENDIF.
ENDFORM. " F4_CLASS
====> grid f4의 코딩
FORM grid_f4 USING et_f4 TYPE lvc_t_f4.
DATA ls_f4 TYPE lvc_s_f4.
ls_f4-fieldname = 'DCLASS'.
ls_f4-register = 'X'.
ls_f4-getbefore = 'X'.
ls_f4-chngeafter = 'X'.
INSERT ls_f4 INTO TABLE et_f4.
ENDFORM. " GRID_F4
어느쪽에서 팝업창 모양 결정하는건지 잘 모르겠어요
제가원하는건
대분류 Descriotion
O OS
S Server
... ...
이런식으로 뜨게 하는겁니다
인터널 테이블에는 이렇게 들어가는데 왜 대분류쪽만 나오는지 잘모르겠네요 ㅠ 도와주세요 아밥님들
댓글 7
-
아밥맨
2011.03.29 17:46
-
오렌지겅주님
2011.03.29 17:58
grid_f4 쪽 코딩에서 lt_f4 참조 타입 말씀하시는건가요?
아니면 CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' 이 함수 안에서의 lt_f4의 타입을 바꿔주라는 말씀이신가요?
구체적으로 알려주세요 ㅠ
-
아밥맨
2011.03.29 18:07
네 F4IF_INT_TABLE~펑션안에 value_tab으로 사용된 lt_f4 말하는겁니다.
data: begin of lt_f4 occurs 0,
dclass type ~
text1 type cepct-ltext, <--- text1 필드의 참조필드 변경
end of lt_f4.
-
오렌지겅주님
2011.03.29 18:13
오 ! 진짜 타입하나 바꿔줬을뿐인데 Description이 들어가네요 ~! 아밥맨님 정말 감사해요
근데 여전히 dclass 위의 제목은 F0001이라고 들어가는데 이거를 제가 정의해준적이 없는데 이거는 어느쪽에서 바꿔야 하는거에요??
-
오렌지겅주님
2011.03.29 18:16
그리고 딕셔너리에 등록된 케릭터타입은 어디서 볼수 있나요? F1 눌러도 안나오는데... -
아밥맨
2011.03.29 18:27
dclass 필드에 나오는 F0001은 lt_f4 인터널테이블 선언시, dclass type ~ 으로 참조한 필드의 디스크립션이 F0001로 되어있어서 그런거구요.
참조한 필드의 디스크립션을 확인하려면 SE11에서 참조한 테이블에서 참조필드를 보시면 우측 끝에 디스크립션이라고 있습니다.
해당 디스크립션이 보이게 되는거구요.
대분류로 보이게 하고 싶다면, 직접 생성하시고(스트럭쳐나 테이블에 필드하나 생성 후, 디스크립션을 대분류로 설정)
생성한 걸 dclass type으로 참조시켜주면 되겠죠.
-
오렌지겅주님
2011.03.29 18:36
흠... 아무리봐도 참조한 테이블의 디스크립션에 대분류라고 들어가있는데...ㅎㅎㅎ
무튼 디스크립션 넣은것만 해도 정말 만족합니다
아밥맨님 어제도 그렇고 매우 감쏴해요 ~ 덕분에 F4 메쏘드 완성시켰습니다^^
좋은하루되세요 !!
lt_f4-text1의 참조타입을 cepct-ltext로 해주세요.
딕셔너리에 등록된 케릭터타입을 명시해주어야 합니다.
cepct-ltext는 하나의 예 일뿐, 딕셔너리에 등록된 케릭터타입을 사용하는 다른필드를 참조해주셔도 무방합니다.