반응형

SAP는 규모가 있는 기업에서는 ERP로 다양한 분야에서 정말 많이 사용합니다. 그 중에서도, MM 분야에서는 물류로 많이 사용하고 있는데, 다른 ERP와 레거시 솔루션 간의 인터페이스 통신을 위해 DBCO 방식과 RFC 방식을 많이 사용합니다. 이번 글에서는 이클립스에서 Java로 SAP와 JCO RFC 인터페이스 통신하는 방법에 대해 기록합니다.


목차

1. SAP JCO란?
2. SAP JCO 환경구성(dll, jar 파일)
3. 소스

1. SAP JCO란?

SAP JCO는 SAP Java Connector의 줄임말로, SAP와 다른 외부 시스템 간의 데이터 인터페이스를 하기 위해 사용합니다. 즉, SAP에서의 데이터를 Java 단으로 가져오는 Connector를 의미합니다.

 

2. SAP JCO 환경구성(dll, jar 파일)

먼저, SAP JCO를 사용하려면 sapjco.dll 파일과 sapjco.jar 파일이 필요합니다. 

 

1) 위치

현재 sapjco 3 버전을 사용하고 있는데, dll 파일의 위치는 system32에 넣거나 아니면 jar 파일과 함께 같은 경로에 넣어 가져갈 수 있도록 설정을 하면 됩니다.

 

저같은 경우에는 프로젝트명/WebContent/WEB-INF/lib에 sapjco3.dll 파일과 sapjco3.jar 파일을 함께 넣어 라이브러리를 추가하여 사용하고 있습니다.

 

3. 소스

1) SAP 연결을 위한 파라미터 설정

static String ABAP_NOPOOL = "ABAP_AS_WITHOUT_POOL";
static String ABAP_POOL = "ABAP_AS_WITH_POOL";

Properties connectProperties = new Properties();
connectProperties.setProperty(DestinationDataProvider.JCO_ASHOST, "IP");
connectProperties.setProperty(DestinationDataProvider.JCO_SYSNR,  "SAP시스템번호");
connectProperties.setProperty(DestinationDataProvider.JCO_CLIENT, "CLIENT");
connectProperties.setProperty(DestinationDataProvider.JCO_USER,   "ID");
connectProperties.setProperty(DestinationDataProvider.JCO_PASSWD, "PASSWD");
connectProperties.setProperty(DestinationDataProvider.JCO_LANG,   "언어");
connectProperties.setProperty(DestinationDataProvider.JCO_R3NAME, "R3NAME");
connectProperties.setProperty(DestinationDataProvider.JCO_GROUP,  "SGROUP[");
connectProperties.setProperty(DestinationDataProvider.JCO_POOL_CAPACITY, "CAPACT");
connectProperties.setProperty(DestinationDataProvider.JCO_PEAK_LIMIT,"SLIMIT");
createDestinationDataFile("ABAP_AS_WITH_POOL", connectProperties);

 

2) 실행하기

i) createDestinationDatFile

private void createDestinationDataFile(String destinationName, Properties connectProperties) {
    try
    {
      	File destCfg = new File(destinationName+".jcoDestination");
        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);
    }
}

 

ii) rfcExecute

public void rfcExecute(JCoFunction function, JCoDestination destination) throws JCoException {
   	{
		JCoContext.begin(destination);
		function.execute(destination);
    }	
    catch (AbapException e)
    {
    	...
    }
    catch (JCoException e)
    {
    	...
    }
    catch (Exception e)
    {
    	...
    }
    finally
    {
        JCoContext.end(destination);
    }		
}

 

3) 결과 받아오기

결과를 받아오는 방법에 대해서는 SAP의 RFC에서 작성한 변수명과 일치해야 합니다. 예를 들어, 리턴 코드 값을 TEST01로 보내줬으면 받는 것도 TEST01로 받아야 합니다.

String Test01 = function.getExportParameterList().getValue("MBLNR");

즉, 위의 코드와 같이 function.getExportParameterList().getValue()를 통해 가져올 수 있다.


 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기