이번 가이드에는 SAP HANA Cloud의 Sandbox 환경을 사용하여 ODATA로 액세스하는 방법을 소개합니다.
OData란?
이 블로그(일본어)에 자세한 내용이 알기 쉽게 구분되어 있으므로 참조해 주세요.
SAP API Business Hub에서 리퀘스트에 필요한 정보 얻기
이번에는 Sandbox의 Sales Order OData 서비스에 연결합니다.
먼저 SAP API Business Hub 에 액세스합니다.
- 조건을 지정하고 Sales Order(A2X)를 선택합니다. (동기 OData API)
- 로그인하고 Show API key 클릭하면 API key를 얻을 수 있습니다. 여기에 표시된 API Key를 기록해 둡니다.(Basic 인증에서 액세스가 필요한 OData 서비스의 경우 사용자, 비밀번호를 기록합니다)
- Sandbox 환경에 대한 요청을 실행하면 런타임 조건에 따라 설정된 URL을 확인할 수 있습니다.
URL은 아래와 같습니다.
https://sandbox.api.sap.com/s4hanacloud/sap/opu/odata/sap/API_SALES_ORDER_SRV/A_SalesOrder?%24top=50
Xplenty에서 SAP HANA Cloud에 OData를 통해 연결하여 데이터 검색
1. Xplenty 데이터 소스 연결
- 패키지 작성 화면에서 REST API 컴포넌트를 선택하십시오
- 인증 및 요청 URL 설정
API Key에 의한 액세스의 경우
이전 장의 순서 2와 3에서 메모한 API Key와 URL을 각각 다음과 같이 설정한다.
(참고) Basic 인증을 통한 액세스의 경우 아래를 참조하십시오.
Authentication에서 Basic을 선택하고 로그인한 사용자와 비밀번호를 설정한 후 3단계에서 기록한 URL을 입력합니다.
- Response JSON 경로를 설정합니다.
- 취득한 결과를 확인
실제로 취득한 데이터의 미리보기를 보면 매우 간단한 JSON 데이터입니다.
모든 열을 선택합니다.
Xplenty 데이터 가공
- JSON 데이터의 일부로 데이터의 가공이 필요하기에, Select 컴퍼넌트로 가공 합니다.
변환 처리 1:날짜시간 데이터 변환
취득된 JSON을 보면 날짜 데이터가 다음과 같이 취득됩니다.
이 게시물에 따르면 다음과 같은 규칙이있는 것 같습니다.
JSON에서는 1970년 1월 1일 오전 0시부 터의 밀리 초로 시간이 표시되기 때문에, 통상의 날짜 시간 포맷으로 변환하려면, 아래와 같이 가공 할 필요가 있습니다.
==> REGEX_EXTRACT 함수를 사용한 수치 부분만의 취득REGEX_EXTRACT('/Date(1467981296000)/','([0-9]+)',1)
위의 식을 기초로 날짜 시간 필드를 변환한다.
==> 시간은 UTC에서 한국 시간(+9시간)으로 변경AddDuration(ToDate('1970-01-01T00:00:00.000Z'),CONCAT('PT',((chararray)((long)REGEX_EXTRACT(CreationDate,'([0-9]+)',1)/1000+(9*60*60))),'s'))
위 함수식의 설명:ToDate
: DateTime형으로 변환(long)
:long 형으로 변환 >> 주의 : 여기에 ****Double
형을 지정한 경우, Round함수를 사용해 소수점 아래 자리수를 3자리로 조정할 필요가 있다(chararray)
: 문자열 형식으로 변환/1000
:AddDuration
함수가 초 단위로만 추가 될 수 있기 때문에 (단, 0.003과 같이 소수점으로 밀리 초를 표현할 수 있습니다), 밀리 초 단위의 숫자를 초 단위로 변환9*60*60
: 9시간을 초로 변환
CASE문을 사용할 때의 주의점
CASE문을 사용하는 경우, 반드시 ELSE조건도 추가 할 필요가 있다
변환 처리 2 : 중첩 JSON에서 필요한 값 추출
위의 JSON 부분을JsonStringToMap
함수를 사용하여 Select 컴포넌트로 변환한다.
==>JsonStringToMap(to_Item#'__deferred')#'uri'
Xplenty 데이터 저장 대상 설정 및 작업 실행
- 로드할 데이터베이스 지정
데이터베이스 구성 요소를 Destination에 배치하고 저장 대상으로 설정합니다.
- 작업을 실행하고 결과를 확인하기
이전의 SELECT 컴포넌트로 구현한 Datetime 변환 처리 및 JsonStringToMap에서 데이터가 제대로 변환, 저장되는지 저장 대상의 데이터베이스(MySQL)에서 확인합니다.
마지막으로
이번에는 SAP의 수주(Sales Order)데이터를 OData 서비스를 경우하여 가져 왔습니다.
이 외에도 구매발주(Purchase Order), 출하(Outbound Delivery), 입고(Inbound Delivery) 등의 데이터도 마찬가지로 가져 올 수 있습니다.
또한 HANA측에서 분석용 테이블이나 뷰를 작성하고 OData 서비스를 통해 데이터를 취득할 수도 있습니다.
실제로 실전에서 사용하는 경우는, API의 Pagination의 설정에 대해 Xplenty측에서 대응할 필요가 있습니다.
SAP 데이터의 연결에 흥미가 있는 분은 Xplenty의 홈페이지로부터 라이브 채팅 혹은 온라인 상담으로 상담해 주세요.