CONSTANTS: c_status_set TYPE slis_formname VALUE 'PF_STATUS_SET',
c_user_command TYPE slis_formname VALUE 'USER_COMMAND'.
이런식으로 선언하고
---------------------------------------------------------------------------
PERFORM form_setting USING:
slis_ev_pf_status_set c_status_set,
slis_ev_user_command c_user_command.
이렇게 구현하고나서.
---------------------------------------------------------------------------
요렇게 사용하게 되는거 같은데....
FORM pf_status_set USING rt_extab TYPE slis_t_extab.
ENDFORM.
FORM user_command USING p_ucomm LIKE sy-ucomm
p_selfield TYPE slis_selfield.
ENDFORM.
---------------------------------------------------------------------------
dynamic call 에 대한 간략한 설명을 찾기가 힘드네요...
그리고 FORM 구현할때 pattern이나 perform더블클릭으로 구현할수는 없나요?
댓글 8
-
쭈니
2009.01.22 00:58
-
불근모자
2009.01.22 01:21
답변감사합니다..
저도 잘 몰라서 양해바랍니당...
소스내에 perform pf_status_set ~ 이나 perform user_command~ 가 없이
form 으로만 구현이 되어잇어서요...
Where-used list를 보려했더니,
다음과같은 메세지가 나왔네요..
Subroutine PF_STATUS_SET not found in Programs (possibly dynamic calls!)
Subroutine USER_COMMAND not found in Programs (possibly dynamic calls!)
혹시 이런것이 dynamic call 이라고 하나요?
소스 내에 form만 있다면 그냥 직접 써야 되나요?
-
쭈니
2009.01.22 01:30
저 말은 프로그램에서 subroutine항목에 pf_status_set이 없다라고 나오는거 같은데요??
혹시 프로그램에 저항목들이
SUBROUTINE 하위 항목에 있는지 확인을 해보셔야 겠는데요??
-
쭈니
2009.01.22 01:42
추가 답변을 드리겠습니다.
perform문은
항상 perform 'zz_zz'.
이렇게 먼저 정의를 해놓으시고
' ' 안에있는걸 더블클릭하시어 생성을 하시면
form ' ' 이렇게 되고
endform. 이렇게 만들어집니다.
그렇게 되어야 제대로 peform문이 완성이되는거지요
그렇게 하신후에 form ' ' 과 endform 이 안에서 불근모자님이 하고자하는 로직을 구성하셔야 합니다.
그래야 실행이 되시겠죠?
예로 들면
버튼클릭 실행시 필요한 perform문을 하나 만들어보겠습니다.
실행버튼을 눌렀을때 이벤트를 하고자 한다면
프로그램에 screen 과 gui status라는 항목을 생성하셔야 합니다.
그리고나서 버튼을 만들어 놓지만, 아무튼 지금은 perform문을 아시려고 하는거니
지금 제가 보여드리는건 예로 하는거니.. 참고하세요
user-command.
CASE SY-UCOMM.
WHEN 'EXEC'.
perform 'check_box'. ==> 더블클릭 후 생성
form check_box.
DATA : BEGIN OF L_CHECK OCCURS 0.
INCLUDE STRUCTURE I_CHECK.
DATA : END OF L_CHECK.
READ TABLE I_CHECK INTO L_CHECK.
LOOP AT I_CHECK.
IF I_CHECK-ZZSEQUENCE EQ L_CHECK-ZZSEQUENCE.
IF I_CHECK-SELECT_MARK EQ L_CHECK-SELECT_MARK.
ELSE.
MESSAGE E997
WITH ZFEMSCASHFW-ZZSEQUENCE ZFEMSCASHFW-ZZFLOWTYPE.
ENDIF.
ENDIF.
ENDLOOP.
endform.
이런식으로 정의를 해놓습니다.
그렇게 해야만
실행이 가능합니다.
그리고 항상 save 및 activate는 잊지 마시구요
이정도면 이해가 되실런지는 모르겠습니다만, 최선을 다해서 답변을 달아 보았습니다.
그럼 즐밥하세요
-
불근모자
2009.01.22 01:50
네... 감사합니다....^^ -
진현태
2009.01.22 02:57
불근모자님께서 질문하신 내용은 FUNCTION 으로 구현한 ALV에서 USERCOMMAND, STATUS_SET 이
PERFORM으로 호출하는 부분은 없고 FORM만 있는데도 프로그램 실행해보면 적용이 되어있어서 물어보신거 같은데.. 맞나요?
맞다면..
FORM form_setting 에 ALV관련 변수에 STATUS, USERCOMMAND 로 사용할 PERFORM 문 등록하는 로직이 있을것이고..
아 급한일생겨 답변은 이만.. 죄송요 ㅠ
-
불근모자
2009.01.22 18:36
아..감사합니다...
역시 질문은 개떡같더라도 찰떡같은 답변을...민망할 따름입니다.
PERFORM form_setting USING:
slis_ev_pf_status_set c_status_set, ==> form for_setting 으로 넘어가 처리 후 다시 돌아옴
slis_ev_user_command c_user_command. ==> form for_setting 으로 다시 넘어가 처리 후 다시 돌아옴
form form_setting으로 넘어가서는 slis_alv_event 타입( name(30),form(30) )으로 헤더로 만들어,
slis_ev_pf_status_set, slis_ev_user_command 부분은 slis type-group에 있는 key값 으로 사용하여,
VALUE 'PF_STATUS_SET', VALUE 'USER_COMMAND' 로 선언했던 값을 인터널 테이블에 담아놓네요...
인터널 테이블은 미리 g_events_t type slis_t_event 선언해 놓았네요.
추후
alv_display 할 때
call function 'REUSE_ALV_GRID_DISPLAY_LVC' 중에 it_events = g_events_t[] 이런 부분이있네요...
-
불근모자
2009.01.22 18:41
아참...그래서...-_-;;
form STATUS ~~~
endform.
form USERCOMMAND ~~~
endform.
이렇게 구현되어 있는 부분은
제가 직접 구현을 해야하는지,
자동으로 생성 form 부분의 틀을 구현해주는 방법이 있는지
궁금하네요...
제가 이해하는게 맞는지는 모르겠습니다만,
perform문을 선언하셨는데 FORM문을 form user_command 이런식으로 직접 쓰신건 아니겠죠.
PERFORM Z_ITAB_CHECK.
이 문장에서 Z_ITAB_CHECK를 더블클릭하면 해당프로그램에 없는 PERFORM문이라면 새로운 창이 하나 뜨지 않던가요??
Program: Subroutine Z_CI_CHECK does not exist.
Do you want to create the object?
YES NO CANCLE
이런 메세지창이 뜰텐데요.
그럼 만들어질텐데요...
pattern은 프로그램상에 만들어져있는 것들중에 사용하고자하는걸 골라서 할수는 있네요.
예로 들면 pattern 클릭시 call function 부분에서 step_confirm 이렇게 하고 만들어보면
만들어지면서 저 펑션에 들어가야할 부분들이 자동으로 생성은 됩니다.
근데 perform문을 구현할때 굳이 pattern이 필요할까요??
전 pattern은 call function사용할때
사용하면 편하다고 들은거 같아서요
perform문은 딱히 구현되어있는 로직이 없는걸로 아는데요??