안녕하세요!~ 반갑습니다.^^
오늘중으로 처리해야 하는데.. 방법이나 조언좀 구하려구요^^;
현재 프로그램을 실행시키면 alv grid 형태로 조회가 된 다음에
이것을 파일로 (ftp) 타서버에 전송합니다.
그런데 옵션중에서 특정1개가 관련 데이터용량이 너무 커서인지
Foreground로 돌리면 Runtiem 에러가 나서..
Background로 돌렸는데.. 약 30분 넘게 도는 것 같은데..(1900초 정도 되다가 에러나니까..)
다음과 같은 에러로그가 나타나고 있습니다.
-----------------------------------------------------
Control Framework: Fatal error - GUI cannot be reached
ABAP/4 프로세서: RAISE_EXCEPTION
작업을 취소했습니다
-----------------------------------------------------
이것저것 찾아본결과 background로 돌릴때에는 alv grid 화면형태로 구성을 못해주기 때문에
위와 같은 에러가 난다고 하는데요..
그렇다면 alv 로 화면표시가 안되게 만들어야 할 것 같은데.. 잘 돌았다는 간단한 메시지 하나만 뿌려주고
바로 파일로 전송할수 있게 해야 하겠죠???
그럼 어떻게 표시안되게 만들어줄수 있을까요? alv 관련 부분이 복잡해서.. 감이 잘 안잡히네요^^;;;
<STEP1>
PROCESS BEFORE OUTPUT.
MODULE STATUS_0100.
MODULE SET_ALV_GRID. -----------------> 이부분에서 alv display 해줘서..
*
PROCESS AFTER INPUT.
MODULE EXIT_PRO AT EXIT-COMMAND.
MODULE USER_COMMAND_0100.
<STEP2>
MODULE SET_ALV_GRID OUTPUT.
PERFORM SET_ALV_GRID.
ENDMODULE. " SET_ALV_GRID OUTPUT
<STEP3>
FORM SET_ALV_GRID .
IF LCL_CONTAINER IS INITIAL.
CREATE OBJECT LCL_CONTAINER
EXPORTING
CONTAINER_NAME = LCL_MYCONTAINER.
IF SY-SUBRC <> 0.
MESSAGE A000(TREE_CONTROL_MSG).
ENDIF.
CREATE OBJECT LCL_GRID
EXPORTING
I_PARENT = LCL_CONTAINER.
ENDIF.
PERFORM LAYOUT_ATTRIBUTE CHANGING GS_LVC_LAYO. " Grid 속성
PERFORM TOOLBAR_PART USING 'gt_ui_functions'. " Tool Bar
IF P_R1 = 'X'.
PERFORM LVC_FIELDCATALOG_MERGE1 CHANGING GT_LVC_FCAT. " Field Cat.
ELSEIF P_R2 = 'X'.
PERFORM LVC_FIELDCATALOG_MERGE2 CHANGING GT_LVC_FCAT. " Field Cat.
ELSEIF P_R3 = 'X'.
PERFORM LVC_FIELDCATALOG_MERGE3 CHANGING GT_LVC_FCAT. " Field Cat.
ELSEIF P_R4 = 'X'.
PERFORM LVC_FIELDCATALOG_MERGE4 CHANGING GT_LVC_FCAT. " Field Cat.
ENDIF.
*** perform event_handler_register. " Event
* PERFORM BUILD_CELL_ATTR. " 셀의 특성
* PERFORM SET_SORT.
IF P_R1 = 'X'.
PERFORM ALV_DISPLAY_PART TABLES GT_DATA1.
ELSEIF P_R2 = 'X'. ----------> 여기 선택할때 데이터량이 커서 에러가나요!
PERFORM ALV_DISPLAY_PART TABLES GT_DATA2.
ELSEIF P_R3 = 'X'.
PERFORM ALV_DISPLAY_PART TABLES GT_DATA3.
ELSEIF P_R4 = 'X'.
PERFORM ALV_DISPLAY_PART TABLES GT_DATA4.
ENDIF.
ENDFORM. " set_alv_grid
<STEP4>
ELSEIF P_R2 = 'X'.
PERFORM ALV_DISPLAY_PART TABLES GT_DATA2.
=> FORM ALV_DISPLAY_PART TABLES P_ITAB.
CALL METHOD LCL_GRID->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
IS_LAYOUT = GS_LVC_LAYO
IT_TOOLBAR_EXCLUDING = GT_UI_FUNCTIONS
I_SAVE = 'A' " 전체가능유형.
I_DEFAULT = 'X' " 레이아웃 사전셋팅 허용.
IS_VARIANT = GS_VARIANT " 선택메뉴Display
CHANGING
IT_OUTTAB = P_ITAB[]
IT_SORT = GT_LVC_SORT[]
IT_FIELDCATALOG = GT_LVC_FCAT[].
ENDFORM. " alv_display_part
<STEP5>
위 파일을 다른 서버로 전송해준다.(SEND버튼)
PROCESS AFTER INPUT.
MODULE EXIT_PRO AT EXIT-COMMAND.
MODULE USER_COMMAND_0100. <------ 요부분이 파일로 전송(SEND)해주는 부분이에요 ㅇㅇ
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
이제 저는 어떻게 해야 될까요? ㅡㅜ
고수분들의 많은 도움과 조언 부탁드립니당~~!
간단히 하자면 백그라운드 할경우에 굳이 100번 스크린을 호출할 필요가 있을까 싶네요
바로 SEND 버튼과 동일한 로직을 백그라운드시 처리하면 될듯 하네요.