*&---------------------------------------------------------------------*
*& Form CALL_RFCFN_FUNDIFNFO01
*&---------------------------------------------------------------------*
form CALL_RFCFN_FUNDIFNFO01 .
*============================================================================
* 필요한 데이터를 interface 전송을 위한 구조체형의 internal table 에 담은 후,
* 다시 char형의 internal table에 담는다.
* otab1, otab2 는 상대편이 요구한 데이터를 담기 위한 구조체를 참조하고 있고
* otab1c, otba2c 는 모든 자료형을 char 형으로 전환해서 하나의 string 변수로
* 담는 과정을 처리하기 위한 구조체이다.
*data: OTAB1 like ZSCFMIF01 occurs 0 with header line.
*data: OTAB2 like ZSCFMIF02 occurs 0 with header line.
clear: OTAB1, OTAB1[].
clear: OTAB2, OTAB2[].
clear: OTAB1C, OTAB1C[].
clear: OTAB2C, OTAB2C[].
*============================================================================
*============================================================================
* 전송할 데이터의 포맷에 맞는 인터널테이블에 데이터를 담고 루프를 돌려서 char형 인터널
* 테이블에 담는다.
loop at OTAB1.
move-corresponding OTAB1 to OTAB1C.
append OTAB1C.
clear OTAB1C.
endloop.
*============================================================================
*============================================================================
loop at OTAB1C.
clear : LS_DATA2,
LS_STRING,
LS_STRING_RV.
*...전송할 한 row의 데이터 크기
LS_DATA-LENGTH = '2572'.
*...미들웨어에서 인식할 RFC의 서비스코드를 실행차수에 대한 자동채번
call function 'ZCFM_RFC_NUMBER_GET_NEXT1'
exporting
I_GUBUN = 'DEPT1'
importing
E_NUM = LS_DATA-GLOBALNO.
*...헤더부분 고정형식
LS_DATA-STEP = '01'.
LS_DATA-TRFLAG = 'S'.
LS_DATA-SYNCFLAG = 'S'.
LS_DATA-TTLFLAG = '1'.
LS_DATA-TTLKEEPTM = '010'.
LS_DATA-RSVSVCCD = 'FADON0007600'. "해당RFC 서비스코드
OTAB1C-1STROW = '0000000001'. "전송할 row 데이터 건수
LS_STRING = LS_DATA.
*한글 전송처리부분==========================================
* data: CONV type ref to CL_NLS_STRUC_CONTAINER.
* data: LV_BUFFER(200) type C.
* data: LV_DATA like ZSCFMIF_INFO_HEADER_RFC.
* data: L_STRING type Z_CHAR1988.
* LV_DATA = LS_DATA(2572).
* clear: OTAB2C-DAL_DT, OTAB2C-DEAL_OGNZ_NO, OTAB2C-DEAL_PRAF_NO, OTAB2C-DAL_PRGR_ID.
*...우리쪽에 데이터가 없더라도 상대쪽과 정의한 필드가 있을 경우에
*...전송할 데이터 양만큼을 채워줌(혹은 상대방과 협의필요)
OTAB1C-DAL_DT = '1'. " EAI만 있음
OTAB1C-DEAL_OGNZ_NO = '1'. " EAI만 있음
OTAB1C-DEAL_PRAF_NO = '1'. " EAI만 있음
OTAB1C-DAL_PRGR_ID = '11111111111111111111'. " EAI만 있음
CALL FUNCTION 'HR_KR_STRING_ADJUST'
EXPORTING
CODEPAGE_ROUTER = '8500'
UNICODE_STRING = L_TEXT_IN
STRING_LEN = L_INT
IMPORTING
OUT_STRING = L_TEXT_OUT .
L_STR = L_TEXT_OUT+5(1).
IF L_STR = L_STR2.
CONV = CL_NLS_STRUC_CONTAINER=>CREATE_FOR_FIXED_CODEPAGE( CODEPAGE = '8500' ).
* conv->cont_to_struc( exporting cont = lv_buffer
* langu = '3'
* importing struc = lv_data ).
*...매번 전송되는 부분의 일정부분은 고정값이 들어가므로 이자료만큼을 제외하고
*...ROW데이터를 대입함.
CONV->STRUC_TO_CONT( exporting STRUC = OTAB1C "LV_DATA
LANGU = '3'
importing CONT = LS_STRING+600 ).
*...총 전송할 바이트수
* LS_STRING = L_STRING(2572).
*한글 전송처리부분=========================================/
call function 'ZFCFMIF_FUNDINFO01' destination 'EAI'
exporting
I_DATA = LS_STRING
importing
RETURN_CODE = LS_STRING_RV
* TABLES
* OTAB =
exceptions
COMMUNICATION_FAILURE = 1
SYSTEM_FAILURE = 2
RFC_EXTERNAL_ABORT = 3
VT_ERROR = 4
OTHER = 5
others = 6 .
*==========================================================
*
if SY-SUBRC <> 0.
* 전송처리 실패 처리부분
check SY-SUBRC eq 0.
message E000 with 'Send Error.'.
else.
clear LS_DATA.
LS_DATA = LS_STRING_RV.
*..성공시..
if LS_DATA-RESTYPE = 0.
try.
* 전송처리 성공 처리부분
endtry.
else.
* 전송처리 실패 처리부분
endif.
endif.
clear: OTAB1C.
endloop.