RFC펑션에 대한 질문을 드리려고 합니다.
제가 이해하고있는것이맞는지, 그리고 제가 짜놓은 로직이 제대로 성립이 되는건지도 알고 싶어서요
펑션은 이렇게 만들어놓았습니다.
LOOP AT GT_MAINCURR.
IF GT_MAINCURR-ZEXT = 'X'.
GT_MAINCURR-ZDEST = 'NONE'.
ENDIF.
CALL FUNCTION 'Z_FI_CHECK_RFC'
DESTINATION GT_MAINCURR-ZDEST
IMPORTING
STGRD = ITAB-STGRD
BUKRS = GT_MAINCURR-ZBUKRS
호출이 된 후 리턴값이라고 들었습니다. 지금 펑션은 A시스템에서 정의한것이고 B시스템에도 정의를 했습니다.
그럼 A시스템에서 값을 입력받고 이 펑션을 만나면 제 생각에는 RFC를 타고 DESTINATION GT_MAINCURR-ZDEST
에 의해서 실행 당시에 BUKRS를 찾아서 B시스템에 있는 펑션을 들어가 값을 추출할꺼라 생각합니다.
근데 IMPORTING이 있으면 EXPORTING도 있어야 하는건지요??
EXPORTING은 호출할때 넘겨주는 값이라고 하는데, 전 뭘 넘겨줘야 할지 고민입니다.
지금 프로그램은 레포트 프로그램입니다.
TABLES
T041C = I_T041C
테이블은 정의하는게 TABLE끼리의 값을 주고 받을때 사용하는걸로 아는데요.
그럼 A시스템의 T041C테이블하고 B시스템의 T041C의 값을 주고 받는건가요?
그것도 제가 이해하고 있는게 맞는건지 확실치가 않아서요.
EXCEPTIONS
COMMUNICATION_FAILURE = 9 MESSAGE MSG_TEXT
SYSTEM_FAILURE = 8 MESSAGE MSG_TEXT.
이 로직은 시스템간의 에러가 발생할수있는 문제를 방지하는 구문이라고 들었습니다.
맞는지는 확실치 않음.
ENDLOOP.
FUNCTION Z_FI_CHECK_RFC.
TABLES T041C.
DATA BEGIN OF GT_BUKRS.
INCLUDE STRUCTURE BKPF.
DATA END OF GT_BUKRS.
DATA BEGIN OF ITAB OCCURS 0.
INCLUDE STRUCTURE T041C.
DATA END OF ITAB.
DATA: BEGIN OF I_T041C OCCURS 0,
STGRD LIKE T041C-STGRD,
XNEGP LIKE T041C-XNEGP,
XABWD LIKE T041C-XABWD,
TXT40 LIKE T041CT-TXT40,
TXT01(20),
TXT02(30),
END OF I_T041C.
LOOP AT I_T041C.
IF I_T041C-XNEGP = 'X'.
IF I_T041C-XABWD = 'X'.
WRITE :/ I_T041C-STGRD.
ELSE.
WRITE :/ ' '.
ENDIF.
ENDIF.
ENDLOOP.
LOOP문에서 I_T041C 인터널 테이블에 XNEGP와 XABWD의 값이 모두 'X'일때 STGRD의 값을 추출하는 문장인데요
이것도 루프를 돌때마다 전에 값을 저장해야하는데 계속 새로운 값이 들어가던데요. 뭐가 잘못된걸까요??
그리고 이 펑션에서 실행이 모두완료되서 펑션을 나가게 되면, A시스템에서 결과값이 나타나야 할텐데. 값도 안나오구요
그냥 백지가 되어버립니다.
USER-COMMAND에서
WHEN 'PICK'.
PERFORM 'CHECK_CODE'.
이렇게 하고 펑션을 만들었구요.
GUI STATUS에는 F2에 PICK이라고 정의를 해놓았습니다.
근데 AT LINESELECTION에서는아무런 로직이 없습니다.
ENDFUNCTION.
제 로직하고 설명을 보시고 뭐가 잘못된건지 지적좀 부탁드립니다.
전 RFC를 통해서 B시스템들의 STGRD라는 CODE를 받아오고 싶을뿐입니다.
그게 B시스템들의 STGRD CODE를 가져오구 A시스템에서 값이 보여지도록 하고 싶습니다.
고수님들 부탁좀 드릴께요
댓글 2
-
activeman
2009.01.22 01:15
-
쭈니
2009.01.22 01:27
아 감사합니다~~
반대값이 된다는 표현이 도대체 무슨말인지 알수가 없어서 무지 답답해 하고 있던참에.
activeman님께서 이렇게 도움을 주시니.. 이해가 좀 되는군요
저는 반대가 된다는 말에
call function 'zzz_sss'정의하고
importing
zzz
exporting
sss
펑션에서는 이렇게 정의 해놓는데 이 부분이 se80화면이 될것이구요
se37에서는
서로가 반대가 되다는 말씀이시죠?
그렇게 되면 rfc를 타고 다른 시스템에서 받아온 값을 a시스템으로 리턴해서 결과 값을 보여준다는 말씀 같은데요
그럼 b 시스템에서는 se37에처럼 선언을 해놓으면 되겠군요?
함수를 선언할때(se37)과 함수를 사용하는 (se80)에서는 parameter 값의 표시가 반대로 됩니다.
즉 se37에서 importing 으로 선언한것은 se80에서 exporting으로 보이게 됩니다.
위의 rfc함수에서도 importing의 ITAB-STGRD, GT_MAINCURR-ZBUKRS가 함수에서 리턴되어 나오는 결과값을 보여주는
항목입니다.
그리고 tables의 인터널테이블은 함수로 전달이 되어 함수 안에서 가공이 가능하며 그 결과치가 그대로 함수 밖으로 전달이 됩니다.
exceptions는 예외처리를 보여주는 것입니다..에러로 나타낼 항목을 보여주는 겁니다..
즐밥하세요..