본문 바로가기
ERP-SAP/ABAP

<ABAP> SAP RFC 개발 방법

by 행복한워니의 기록 2023. 11. 22.
728x90
반응형

아주 기초적인 내용을 작성해 보려 한다.
RFC 는 가장 초급 개발자에게 많이 맡겨진다. 
이유는 스크린 필요 없이 내부 로직과 INPUT OUTPUT 셋팅만 잘 하면 되기 때문이다.
 
우선 정의부터 써본다.
 
RFC(Remote Function Call)
· 같은 시스템(SAP SW 및 ABAP 프로그래밍)이나 다른 시스템(C++, VB, JAVA 등의 프로그래밍)의 호출자로부터 Function Module을 불러와 실행하는 Function tools
· 다른 시스템의 실행 파일을 실행하거나, 상호 데이터 교류 등으로 활용 가능
· RFC 호출 시에는 SAP가 클라이언트 및 서버 역할을 수행
 
▶ RFC의 장점
- 원격 시스템 모듈과 메소드의 개발이 필요 없어 효율적
- 자체적인 프로세서를 그대로 유지 가능
- 다른 시스템과의 Interface 및 정보 공유
- SAP의 기존 정보를 타 시스템의 기능으로 좀 더 쉽게 표현
- 직접 DB를 호출하는 DB to DB 방식이 아닌 Application to Application 방식으로 보안 및 정합성이 좋음
 
 
이렇게 내용을 봐도 딱히 크게 와닿지 않는데 
결론은 외부에서 SAP RFC를 호출해서 데이터를 던져주고 받아가는 것이고
대부분 자바연동할때 JCO를 통해 통신했었다.
 
(몇해전 SI플젝 할때 XI를 통해 인터페이스를 해서 XI에 로직을 심었었는데... RFC는 안짜고 노멀펑션만 짰었다.)
 
아무튼, 그럼 개발할때 특별히 해줘야 할 게 있냐 하면 없다.
선택버튼만 잘하면 된다.
 
 T-CODE : SE37 펑션만드는 곳에 가서 Z~로 만든다음에
선택 라디오 버튼에서 REMOTE FUNCTION CALL만 선택해두면 끝난다.
 


나머지 통신부쪽은 BC쪽에서 셋팅하므로 (SM59 에서 ABAP CONNECT )
크게 신경 쓸 필요 없다.(통신관련 내용들은 서버셋팅이라... 개발자에게 권한은 없고 테스트는 해볼 수 있다.)
 
 
 
 
크게 IMPORT / EXPORT/ TABLES / EXCEPTIONS 만 알면 되는데
 
IMPORT = 우리가 받는 값이다. SAP에서 수신되는 값이다.
 
VALUE 값(1개값)을 받을 수도 있고, STRUCTURE 를 받을 수도 있다.(여러개 필드로 이루어진..)
TABLE 값도 받을 수 있는데 이런 경우 TABLE 탭을 활용하는게 좋다. 
 


 
EXPORT = 우리가 던져주는 값이다. SAP에서 전송되는 값들이다.
 
IMPORT와 마찬가지 값으로 1개 필드값을 던질수도... 스트럭쳐를 던질수도 있다.
 


 
 
TABLES = 여러 ROW를 가진 값을 수신받고 던져줄 수있다.
 
이 부분에서 전송하는 분들이 오류를 많이 내서(자바쪽) 안된다 하는 경우들이 있는데...
대부분 코딩 실수였다........ (그분도 JCO통신을 처음해보셨던 분...)
SAP에서는 전혀 건드릴 게 없다......
 
TABLES 는 수신과 송신 다 할 수 있다.. 
(IMPORT / EXPORT 기능을 다함..)
 
그래서 혼돋되지 않으려면 이름 지을때 
IT_DATA 
ET_DATA 
라고 이름을 지어두는게 좋다. 
 


EXCEPTIONS는 대부분 코딩 안하는 사람들이 많은데
코딩해두면 좋다. SUBRC가 몇인지를 알려주면서 무슨오류인지 전달이 편하기 때문이다.
그러나 대부분 코딩안하는데 그럴때는 EXCEPTION OTHERS로 받을 수 있다. 
 
아.. 물론 RFC시에는 EXCEPTION은 딱히 작성 인해도 된다..(노멀펑션에서 사용..)

EXPORT에서 오류값과 내용을 던져줘야 하기 때문이다.
 
소스코드 만드는 법은 간단하다
 
IMPORT에 들어완 값들을 가지고 코딩하면 된다.
(아래 사진은 PIT 테이블값으로 들아온걸 LOOP 돌며 저장한다)



그리고 RFC 로 값을 처리시 가장 주의할점은..
Validation check 를 꼭 해라...
 
값이 유효한 값이 아니면 덤프날 수도 있으니까 ......
 
숫자만 들어와야 하는데 문자 1글자 들어오거나 
혹은 주는대로 그냥 db에 넣었다가 db내용이 난리가 나버리는 수가 있다.
(수만건이 밀려서 저장되거나.... 그 밀려서 저장된걸 또 가져다 썼거나.. 하는 대형 불상사..)
 
그래서 중요한 데이터 값들은 빡세게 필드값의 길이라던지 숫자라던지 문자라던지
다른 db와 관련된 값이라면 그 값이 있는지 체크등등등등을 확실하게 하고
 
처리해줘야 한다.
 
그리고 이런 체크를 상단에 하면 퍼포먼스측면에서도 유리하기 때문이다.
이상한 값 오면 바로 return 던지는게 속도측면에서 빠르니까 말이다...
 
 
따로 질문할 내용이 있으면 댓글 달아주시고..
혹시나 잘못된 내용이 있으면 지적도 감사드린다.
 
이글을 쓰는 이유는.. 사실 요즘 블로그 글수 늘리기 하고 있어서 그렇다...... ㅎㅎㅎㅎㅎ
 
 
그리고 jco관련 기술들은 거의 10년전에도 있던 기술이라...
검색하면 자료가 많다.
 
또한 예시코딩들도 많고 내 블로그에도 있었던거 같은데..... ㅎㅎㅎㅎ
자바 개발자가 아니어서 2013년 즈음에 한번 보고 넘겼던 것 같다.... 
(자바 넘 어려...워...)
  

728x90
반응형