취미
JCO를 이용한 SAP 연결 테스트
iamyhs
2008. 1. 2. 16:57
개발환경은 Flex,Java,SAP 이다
JCO를 이용해서 SAP 쪽 연결은 아래 여섯 단계를 거친다.
Step 1: Initialize the RFC Connection
Step 2: Create a JCo Repository
Step 3: Retrieve a Specific Function from the Repository
Step 4: Populate the Metadata Structures
Step 5: Execute the Call to SAP
Step 6: Read the SAP Return Structure
package com.sec.global.mysap;
import com.sap.mw.jco.*;
public class SAPJCOTest {
public static void main(String[] args) {
final String SAP_CLIENT ="100";
final String USER_ID ="username";
final String PASSWORD = "password";
final String LANGUAGE = "en";
final String IP_ADDRESS = " xxx.xxx.xxx.xxx";
final String SYSTEM_NUMBER = "00";
JCO.Client aConnection;
IRepository aRepository;
System.out.println("JCO를 이용한 SAP 연결 테스트");
try {
aConnection = JCO.createClient(SAP_CLIENT,
USER_ID,
PASSWORD,
LANGUAGE,
IP_ADDRESS,
SYSTEM_NUMBER);
aConnection.connect();
aRepository = new JCO.Repository("SAP", aConnection);
IFunctionTemplate functionTemplate = aRepository.getFunctionTemplate("RRW3_GET_QUERY_VIEW_DATA");
JCO.Function function = functionTemplate.getFunction();
//I_INFOPROVIDER,I_QUERY,I_VIEW_ID,I_T_PARAMETER
function.getImportParameterList().setValue("xxxxx", "I_INFOPROVIDER");
function.getImportParameterList().setValue("xxxxx_Qxxxx", "I_QUERY");
function.getImportParameterList().setValue("", "I_VIEW_ID");
function.getImportParameterList().setValue("", "I_T_PARAMETER");
aConnection.execute(function);
System.out.println("연결 성공");
}
catch (Exception ex) {
System.out.println("연결 실패");
}
}
}
I_INFOPROVIDER,I_QUERY,I_VIEW_ID,I_T_PARAMETER 에 대한 세부 사항은 SAP 개발자가 명세서를 보내준다.
프로바이더 테크 네임, 쿼리 테크 네임 이런식으로 표현하고,Vairiable에 대한 세부사항은, I_T_PARAMETER(일종의 테이블 형태) 변수의 내용이다.
소스에서 I_VIEW_ID와 I_T_PARAMETER 값은 빈값인대,
이 값들은 쿼리테크 별로 다르다 I_T_PARAMETER 값은 보통 테이블 형태로 주어지고, I_VIEW_ID 는 공백인 경우가 많다.
이 예제는 연결 테스트 만이다. 실제로 Step 6 처럼 결과값을 가지고 가공을 해야한다.
이 과정에서 해당 리턴값을 어디에서 파싱할지가 아키텍처상 중요하다.
현재는,View(Flex) 단에서 파싱(다차원 구조이므로)하는 파서를 제작했지만, View단에서 파싱하는 것보다 Java 단에서 파싱하는 구조가 더 적절해 보인다.
JCO를 이용해서 SAP 쪽 연결은 아래 여섯 단계를 거친다.
Step 1: Initialize the RFC Connection
Step 2: Create a JCo Repository
Step 3: Retrieve a Specific Function from the Repository
Step 4: Populate the Metadata Structures
Step 5: Execute the Call to SAP
Step 6: Read the SAP Return Structure
package com.sec.global.mysap;
import com.sap.mw.jco.*;
public class SAPJCOTest {
public static void main(String[] args) {
final String SAP_CLIENT ="100";
final String USER_ID ="username";
final String PASSWORD = "password";
final String LANGUAGE = "en";
final String IP_ADDRESS = " xxx.xxx.xxx.xxx";
final String SYSTEM_NUMBER = "00";
JCO.Client aConnection;
IRepository aRepository;
System.out.println("JCO를 이용한 SAP 연결 테스트");
try {
aConnection = JCO.createClient(SAP_CLIENT,
USER_ID,
PASSWORD,
LANGUAGE,
IP_ADDRESS,
SYSTEM_NUMBER);
aConnection.connect();
aRepository = new JCO.Repository("SAP", aConnection);
IFunctionTemplate functionTemplate = aRepository.getFunctionTemplate("RRW3_GET_QUERY_VIEW_DATA");
JCO.Function function = functionTemplate.getFunction();
//I_INFOPROVIDER,I_QUERY,I_VIEW_ID,I_T_PARAMETER
function.getImportParameterList().setValue("xxxxx", "I_INFOPROVIDER");
function.getImportParameterList().setValue("xxxxx_Qxxxx", "I_QUERY");
function.getImportParameterList().setValue("", "I_VIEW_ID");
function.getImportParameterList().setValue("", "I_T_PARAMETER");
aConnection.execute(function);
System.out.println("연결 성공");
}
catch (Exception ex) {
System.out.println("연결 실패");
}
}
}
I_INFOPROVIDER,I_QUERY,I_VIEW_ID,I_T_PARAMETER 에 대한 세부 사항은 SAP 개발자가 명세서를 보내준다.
프로바이더 테크 네임, 쿼리 테크 네임 이런식으로 표현하고,Vairiable에 대한 세부사항은, I_T_PARAMETER(일종의 테이블 형태) 변수의 내용이다.
소스에서 I_VIEW_ID와 I_T_PARAMETER 값은 빈값인대,
이 값들은 쿼리테크 별로 다르다 I_T_PARAMETER 값은 보통 테이블 형태로 주어지고, I_VIEW_ID 는 공백인 경우가 많다.
이 예제는 연결 테스트 만이다. 실제로 Step 6 처럼 결과값을 가지고 가공을 해야한다.
이 과정에서 해당 리턴값을 어디에서 파싱할지가 아키텍처상 중요하다.
현재는,View(Flex) 단에서 파싱(다차원 구조이므로)하는 파서를 제작했지만, View단에서 파싱하는 것보다 Java 단에서 파싱하는 구조가 더 적절해 보인다.