본문 바로가기

ERP/SAP

SAP Java Connector(JCo) 연동

SAP Java Connector(JCo) 설정

'1. sapjco3.jar / sapjco3.dll / libsapjco3.so 는 SAP 연동시 필요한, SAP Java Connector(JCO) 관련 파일을 준비

2. 사용하는 서버에 따라 파일 설정 방식이 다르기에 사용하는 서버를 확인

  • 【참고】 서버별 설정 방법
  • 이 파일은 Windows Server기준으로 작성

3. Window LOCAL환경 셋팅

  • sapjco.dll 파일을 C:\Windows\System32 폴더 안에 넣어준다. 

4. WebServer 프로젝트에서 lib폴더를 만들어 "sapjco3.jar" 라이브러리 추가

  • Spring boot 프로젝트라면 Build Tool 에 따라 다르기에 아래의 Tool에 따라 dependency를 추가
    • ※ Gradle
      1. lib 폴더에 sapjco3.jar을 추가
      2. build.gradle파일에 dependencies { 여기에 추가 } 아래의 정보를 추가
  implementation files("lib/sapjco3.jar")

 

  • Maven
    1. lib 폴더에 sapjco3.jar을 추가
    2. pom.xml에 local-repository 추가 
  <dependency>
    <groupId>com.sap.conn.jco</groupId>
    <artifactId>sapjco3</artifactId>
    <version>3.0.14</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/lib/sapjco3.jar</systemPath>
 </dependency>

【참고】 서버별 설정 방법


https://husheart.tistory.com/135

Window LOCAL

  • sapjco3.jar : Java Build Path 메뉴에서 라이브러리 추가
  • sapjco3.dll : System32에 추가.

Windows Server

  • sapjco3.jar, sapjco3.dll : Apache Tomcat - lib 폴더에 추가.

Linux Server

  • sapjco3.jar, libsapjco3.so : Apache Tomcat - lib 폴더에 추가.

ETC Server

  • ▶ IBM AIX 서버: libsapjco3.so, sapjco3.jar
  • ▶ HP-UX11 서버 : libsapjco3.sl/so, sapjco3.jar
  • ▶ Linux 서버 : libsapjco3.so, sapjco3.jar
  • ▶ Oracle Solaris 서버 : libsapjco3.so, sapjco3.jar
  • ▶ Microsoft Windows 서버 : sapjco3.dll, sapjco3.jar
  • ▶ IBM iSeries 서버 : libicudata34.a, libicui18n34.a, libicuuc34.a, libsapjco3.so, os4apilib.so, sapjco3.jar

소스 설명

1. SAP 연결 정보 및 connection 얻기

	static String DESTINATION_NAME1 = "ABAP_AS_WITHOUT_POOL";
	static String DESTINATION_NAME2 = "ABAP_AS_WITH_POOL";
	static {
		Properties connectProperties = new Properties();
	   
		connectProperties.setProperty(DestinationDataProvider.JCO_ASHOST,"00.000.000.000");
		connectProperties.setProperty(DestinationDataProvider.JCO_SYSNR, "00");
		connectProperties.setProperty(DestinationDataProvider.JCO_CLIENT, "100");
		connectProperties.setProperty(DestinationDataProvider.JCO_USER,"username");
		connectProperties.setProperty(DestinationDataProvider.JCO_PASSWD,"123456");
		connectProperties.setProperty(DestinationDataProvider.JCO_LANG, "KO");
		createDestinationDataFile(DESTINATION_NAME1, connectProperties);
		connectProperties.setProperty(DestinationDataProvider.JCO_POOL_CAPACITY, "3");
		connectProperties.setProperty(DestinationDataProvider.JCO_PEAK_LIMIT,"10");
		createDestinationDataFile(DESTINATION_NAME2, connectProperties);
	}

	static void createDestinationDataFile(String destinationName,
			Properties connectProperties) {
		File destCfg = new File(destinationName + ".jcoDestination");
		try {
			FileOutputStream fos = new FileOutputStream(destCfg, false);
			connectProperties.store(fos, "for tests only !");
			fos.close();
		} catch (Exception e) {
			throw new RuntimeException(
					"Unable to create the destination files", e);
		}
	}

2. RFC Function 얻기

public JCoFunction getFunction(String functionStr) {
		JCoFunction function = null;
		try {
			function = repository.getFunction(functionStr);
		} catch (Exception e) {
			throw new RuntimeException("Problem retrieving JCO.Function object.");
		}

		if (function == null) {
			throw new RuntimeException("Not possible to receive function. ");
		}
		return function;
	}

3. 테이블가져오기 실행

public static void getTable(String funcName) throws JCoException {
		System.out.println("테이블가져오기 실행");
		JCoDestination destination = JCoDestinationManager.getDestination(ABAP_AS);

		// 연결정보확인.
		System.out.println("Attributes:");
		System.out.println(destination.getAttributes());
		System.out.println();

		// 리모트 펑션(?) 암튼 펑션명으로 호출
		JCoFunction function = destination.getRepository().getFunction(funcName);
		function.getImportParameterList().setValue("IV_INPUT", "a");
		if (function == null)
			throw new RuntimeException("SAP_DATA not found in SAP.");
		try {
			function.execute(destination);
			System.out.println("실행완료::!!");
		} catch (AbapException e) {
			System.out.println(e.toString());
			return;
		}


		// 펑션에서 테이블 호출
		JCoTable exportTable = function.getTableParameterList().getTable("ET_OUTTAB");
		 
        if (exportTable == null) {
            System.out.println("[T_DOC_LIST] not found in SAP");
            return;
        }
 
        printTable(exportTable);
	}
}

 

아래의 링크는 필요하여 만든 소스입니다. 부족한 점 많습니다. 피드백 부탁드립니다.

https://difud1106.tistory.com/entry/SAP-JCo-%EC%97%B0%EB%8F%99-%EC%98%88%EC%A0%9C-%EC%86%8C%EC%8A%A4

 

SAP JCo 연동 예제 소스

전자 세금 계산서를 발행 및 WebHook 을 이용하여 SAP와 연결 JCo 연동 환경설정 관련 https://difud1106.tistory.com/entry/JCo-SAP-%EC%97%B0%EB%8F%99-1 JCo SAP 연동 SAP Java Connector(JCo) 설정 '1. sapjco3.jar / sapjco3.dll / libsa

difud1106.tistory.com

 

반응형

'ERP > SAP' 카테고리의 다른 글

SAP 회계 용어  (2) 2023.12.06