엑세파일업로드해서 bdc로 데이터를 넣고 그 결과를 리스트로 출력했습니다. 여기에서 정상적으로 들어간 라인 클릭시
ka03(조회)으로 보이게 만들려고 합니다. call transaction으로 하는 방법을 모르겠습니다. 참고할 만한 코딩이 있으면 알려주시면 감사하겠습니다.
댓글 7
-
버미!
2010.11.17 06:38
-
꼬마호랑이
2010.11.17 20:36
답변 감사합니다.제가 아래처럼 했습니다. 이렇게 하니 저장버튼눌러서 ka03을 먼저 탑니다. 그후 백을 눌러서 결과 리스트로 가지는데
전 결과 리스트(업로드 받은 후 데이터 검색한 후 alv해주고 잘못된 데이터 제대로 돤 데이터가 모두 나옵니다.그리고 저장버튼 클릭시 정상적인 데이터만 들어가고 그 결과를 같은 화면에 바로 보이게 됩니다.)가 된 후 정상적인 데이터라인을 클릭시 ka3을 타게 하고 싶습니다.
무엇이 잘못된지 알려주시면 감사하겠습니다.
*&--------------------------------------------------------------------*
*& Form ALV_USER_COMMAND
*&--------------------------------------------------------------------*
form user_command using pv_ucomm like sy-ucomm
ps_selfield type slis_selfield.
case pv_ucomm.
when '&DATA_SAVE'.
if g_okcode = space.
perform bdc_kstar_process.
g_okcode = 'SAVE'.
endif.
ps_selfield-refresh = 'X'.
when 'SAVE'.
endcase.
CHECK not gt_alv-kstar IS INITIAL.
SET PARAMETER ID 'KAT' FIELD gt_alv-kstar.
CALL TRANSACTION 'KA03' AND SKIP FIRST SCREEN. -
버미!
2010.11.17 21:39
ALV에서 SAVE시 BDC를 수행하고 그 결과로 Cost element(이하 C.E)가 나오는 데, 이 C.E를 ALV에 보여주고 더블클릭하면 KA03으로 보여주시려고 하네요..
그러면 pv_ucomm에 중단점 걸어놓고 더블클릭시 pv_ucomm에 어떤 값이 들어오는 지 체크해서
case~when안에 위의 소스 밑에서 3줄 넣으면 되겠네요..
그전에 gt_alv 테이블을 read 해야겠지요?
즉.
read table gt_alv index ps_selfield-tabindex.
case pv_ucomm
when '더블클릭'
CHECK not gt_alv-kstar IS INITIAL.
SET PARAMETER ID 'KAT' FIELD gt_alv-kstar.
CALL TRANSACTION 'KA03' AND SKIP FIRST SCREEN.
...
하시면 되겠습니다.
-
꼬마호랑이
2010.11.18 00:48
답변감사합니다. 알려주신대로 하니 안되어서 다시 질문드립니다. 더블클릭시 아우런이벤트도 안 일어납니다. 그래서 아래와 같이 만드니
원하는결과는 얻을수 있었지만 첨에 ka03을 먼저 타고나서 백을 누른후에야 제대로 작동이 됩니다. 이 부분을 없애고 바로 결과가 나오고 더블클릭 했을때만 ka03을 타고 싶습니다. case 안에만 들어가면 작동이 안됩니다. 죄송하지만 한번만 더 알려주시면 감사하겠습니다.
*&--------------------------------------------------------------------*
*& Form ALV_USER_COMMAND
*&--------------------------------------------------------------------*
form user_command using pv_ucomm like sy-ucomm
ps_selfield type slis_selfield.
read table gt_alv index ps_selfield-tabindex.
case pv_ucomm.
when '&DATA_SAVE'.
if g_okcode = space.
perform bdc_kstar_process.
g_okcode = 'SAVE'.
endif.
ps_selfield-refresh = 'X'.
when 'SAVE'.
endcase.
CHECK not gt_alv-kstar IS INITIAL.
SET PARAMETER ID 'KAT' FIELD gt_alv-kstar.
CALL TRANSACTION 'KA03' AND SKIP FIRST SCREEN.
endform. "user_command -
버미!
2010.11.18 01:08
이상하네...ALV에서 더블클릭하면 OK Code가 &IC1 로 떨어질텐데..
REUSE_ALV_XXX 펑션 소스좀 알수 있을까요?
-
꼬마호랑이
2010.11.18 01:13
네 아래와 같이 했습니다.
*&---------------------------------------------------------------------*
*& Form REUSE_ALV_GRID_DISPLAY
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form reuse_alv_grid_display .
call function 'REUSE_ALV_GRID_DISPLAY'
exporting
* I_BYPASSING_BUFFER = 'X'
i_callback_program = sy-repid
i_callback_top_of_page = 'TOP_OF_PAGE'
i_callback_pf_status_set = c_status_set
* I_BACKGROUND_ID = 'ALV_BACKGROUND'
i_callback_user_command = c_user_command
is_layout = gs_layout
it_fieldcat = gt_fieldcat[]
it_sort = gt_sort[]
i_save = fl_save
is_variant = g_variant
it_events = gt_events[]
importing
e_exit_caused_by_caller = g_exit_caused_by_caller
es_exit_caused_by_user = g_exit_caused_by_user
tables
t_outtab = gt_alv
exceptions
program_error = 1
others = 2.
endform. " REUSE_ALV_GRID_DISPLAY
-
tommy
2010.11.18 23:27
제가 볼때 custom_container로 만드심이 좋을 것 같습니다. 그리고 class event 'double click'을 사용하셔서
로직 구상을 하시면 될 것 같네요.. 어차피 alv에서 지원이 다 되는 것이고 몇번째 row의 몇번째 컬럼의 데이타 부분에서 클릭했는지..
데이타의 내용은 뭔지 까지 다 알수 있으니까요.. 패키지 SLIS 에서 custom container 부분을 한번 찾아보시면 도움이 되실 것 같네요
"그 결과를 리스트로 출력했습니다" 그 리스트에서 더블클릭시 User Command 부분을 타게 되는데,
여기서 더블클릭한 필드가 Cost element 필드이라면...
itab : 리스트로 출력한 테이블
CHECK NOT itab-KSTAR IS INITIAL.
SET PARAMETER ID 'KAT' FIELD itab-KSTAR.
CALL TRANSACTION 'KA03' AND SKIP FIRST SCREEN.