본문 바로가기

JCo

4-2. SAP에서 Java 호출하여 값 받아오기

🕑 30분

👥 Eclipse 사용법을 알고, JCo Library를 다운 받아 Project에 적용한 학습자

⭐ JCo 는 JDK 1.8 버전에서 버그 없이 작동된다.

      ** 필자는 JavaSE-17 사용하다가 오류가 발생하여 1.8로 변경함

 

0. 개요

SAP에서 Java 소스코드를 호출하여

Java 내에 있던 데이터를 SAP로 가져온다.

 

1. JCo 설치 폴더에서, 공식 소스코드 예제 가져오기

1) ABAP_AS1.jcoDestination 파일 : Java Project 에 복사하기

 - 예제파일 경로 : \sapjco3-ntamd64-3.1.11\examples\

 ※ src 폴더 아래가 아닌, Java Project 바로 밑(root)에 넣어야 한다.

 

 

2) EXT_SERVER.jcoServer 파일 : Java Project 에 복사하기

 - 예제파일 경로 : \sapjco3-ntamd64-3.1.11\examples\

 ※ src 폴더 아래가 아닌, Java Project 바로 밑(root)에 넣어야 한다.

 

 

3) Server Stateful 예제 전체 파일 : src 폴더 안에 복사하기

 - 예제파일 경로 : \sapjco3-ntamd64-3.1.11\javadoc\ 의 intro.html > Examples > Beginner server stateful examples

 ※ 맨 윗줄의 package ..; 단은 제외하고 복사

 

 

- 예시 화면

 

- java 파일들간의 관계

 

 

2. jcoDestination 파일에 SAP 접속정보 입력하기

1) ABAP_AS1.jcoDestination 파일 : SAP 접속정보 입력

(우) SAP 접속정보를 참고하여 작성한다.
jco.client 파라미터 설명
ashost 어플리케이션 서버
sysnr 인스턴스 번호
client 접속할 클라이언트
user SAP 로그인하는 ID
passwd SAP 로그인하는 PW
lang 로그인 언어

 

 

3. jcoServer 파일에 RFC 와 Gateway 접속정보 입력하기

jco.server 파라미터 설명
connection_count 연결 개수
gwhost 게이트웨이 호스트 IP (어플리케이션 서버)
progid Java 서비스명
→ 본인이 작명하여 신규로 넣으면 됨
gwserv 게이트웨이 서비스명 (or 게이트웨이 포트)
repository_destination .jcoDestination 파일명

 

1) connection_count : 연결 개수

이때 작성한 숫자만큼 SMGW 에서 서비스 개수가 생긴다.

 

2) gwhost : 게이트웨이 호스트 IP

SAP 접속정보의 어플리케이션 서버 IP를 입력하면 된다.

 

3) progid : Java Server 서비스명

본인이 작명하여 신규로 작성하면 된다.

이때 작성한 서비스명은 T-Code: SMGW 에서 확인이 가능하다.

RFC 생성 시 Program ID에도 동일하게 사용된다.

 

4. gwserv : 게이트웨이 서비스명 or 게이트웨이 포트

게이트웨이 서비스명 또는 게이트웨이 포트를 입력한다.

 - 서비스명 : 'sapgw' + SAP 접속정보의 인스턴스 번호 (ex. sapgw01)

 - 포트 : '33' + SAP 접속정보의 인스턴스 번호 (ex. 3301)

💡Tip. 게이트웨이 서비스명과 Port가 동일한 것처럼 파라미터에 넣어도 되는 이유
C:\Windows\System32\drivers\etc 에서 services 파일을 확인해보면,
게이트웨이 서비스명과 포트가 Mapping 되어 있다.

결국 게이트웨이 서비스명은 Port를 향하여 가기 때문에
파라미터에는 서비스명을 넣든, Port를 넣든 동일하게 동작한다.

 

5) repository_destination

SAP 접속정보가 담겨있는 .jcoDestination 의 파일명을 작성한다. (ex. ABAP_AS1)

 

 

4. SAP에서 RFC 생성하기

1) T-Code: SM59 > 생성 아이콘 > RFC 명 입력 후, TYPE은 'T'

 - RFC 명은 Y/Z 로 시작할 필요는 없다.

 

2) Description 및 Program ID 입력

- Program ID는 반드시 .jcoServer에 입력했던 서비스명과 동일하게 입력해야함 (대소문자 구분)

.

3) 연결 테스트 --> 실패

 - 현재 단계에서는 '실패'가 정상적인 결과이다. 이제 Java 서버를 실행하여 '성공' 결과로 만들어줄 예정이다.

 

 

5. SAP에 Function Module, 테스트용 Report 프로그램 생성하기

1) Func. Z_INCREMENT_COUNTER

 - Import, Export 파라미터 없이 Source code만 작성

FUNCTION Z_INCREMENT_COUNTER.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"----------------------------------------------------------------------

  CALL FUNCTION 'INCREMENT_COUNTER'.

ENDFUNCTION.

 

2) Func. Z_GET_COUNTER

- Export 파라미터에만 'GET_VALUE | TYPE | I' 입력

- Source Code 작성

FUNCTION Z_GET_COUNTER.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  EXPORTING
*"     REFERENCE(GET_VALUE) TYPE  I
*"----------------------------------------------------------------------

CALL FUNCTION 'GET_COUNTER'
    IMPORTING
       GET_VALUE = GET_VALUE.

ENDFUNCTION.

 

3) Prog. ZJCO_STATEFUL_COUNTER

 - 아직 Java Server를 실행시키지 않아 RFC 연결이 안 된 상태므로, 실행시키면 덤프가 발생한다.

 

REPORT  ZJCO_STATEFUL_COUNTER.
PARAMETERS dest TYPE RFCDEST.

DATA value TYPE i.
DATA loops TYPE i VALUE 5.

DO loops TIMES.
    CALL FUNCTION 'Z_INCREMENT_COUNTER' DESTINATION dest.
ENDDO.

CALL FUNCTION 'Z_GET_COUNTER' DESTINATION dest
    IMPORTING
       GET_VALUE       = value.

IF value <> loops.
  write: / 'Error expecting ', loops, ', but get ', value, ' as counter value'.
ELSE.
  write: / 'success'.
ENDIF.

 

 

6. AS Java 서버 실행 후, RFC 연결 확인하기

1) StatefulServer.java 실행

 - 서버가 정상적으로 실행되어도 출력문 작성을 안 했으므로 Console창이 뜨지는 않는다.

 

 

2) SAP의 T-Code : SMGW > Goto > Logged on Clients 에서 등록한 서비스명이 갯수대로 생성되었는지 확인

 

 

3) 성공 결과 확인

※ Java의 .jcoServer 와 RFC에 등록한 Program ID가 동일한데도 Connection Test 결과가 '실패'라면   
   SAP에서 외부 서비스 접근을 제어하고 있지는 않은지 BC분께 문의드려 보세요.

   접근제어가 되고 있다면, Program ID를 보내드리며 접근 허용해달라고 요청 드리시면 됩니다.

 

 

7. SAP에서  ZJCO_STATEFUL_COUNTER 프로그램 실행

1) Report 프로그램 실행

 

2) 디버깅하여 value가 +5 됐는지 확인

- 순전히 Java의 함수만 호출하여 숫자가 늘어났다.

 

3) Java Console 확인


-

수고하셨습니다.