JDBC 어댑터를 사용하여 데이터베이스와 통신하기 위해서는 SQL 문을 XML 형식으로 변환해야 합니다. 이를 위해서는 message mapping에서 <StatementName> 요소를 사용하여 SQL 문을 정의하고, <dbTableName> 요소에 action 속성을 UPDATE_INSERT로 설정하여 업데이트와 삽입을 동시에 수행할 수 있습니다. <dbTableName> 요소 안에는 <table> 요소에 테이블 이름을, <access> 요소에는 업데이트나 삽입할 컬럼과 값을, <key> 요소에는 조건절에 사용할 컬럼과 값을 지정해야 합니다. 예를 들어, 다음과 같은 XML 형식으로 SQL 문을 작성할 수 있습니다.
<StatementName>
<dbTableName action="UPDATE_INSERT">
<table>TableName</table>
<access>
<col1>newVal</col1>
<col2>newVal</col2>
</access>
<key1>
<col2>oldVal</col2>
<col4>val</col4>
</key1>
<key2>
<col2>oldVal</col2>
</key2>
</dbTableName>
</StatementName>
이 XML 형식은 다음과 같은 SQL 문과 동일한 의미를 가집니다.
UPDATE TableName SET col1 = 'newVal', col2 = 'newVal' WHERE col2 = 'oldVal' AND col4 = 'val';
IF @@ROWCOUNT = 0
INSERT INTO TableName (col1, col2) VALUES ('newVal', 'newVal');
즉, 조건절에 해당하는 행이 있으면 업데이트를 하고, 없으면 삽입을 합니다. 이때, <key> 요소는 여러 개를 사용할 수 있으며, 각각의 <key> 요소는 OR 연산으로 처리됩니다. 즉, 위의 예시에서는 col2 = 'oldVal' 또는 col2 = 'oldVal' AND col4 = 'val' 인 행을 업데이트하거나 삽입합니다.
이제, message mapping에서 이 XML 형식을 만들기 위해서는 소스와 타겟의 메시지 유형을 정의하고, 그 사이에 매핑을 수행해야 합니다. 소스 메시지 유형은 JDBC 어댑터로부터 받은 데이터베이스 테이블의 구조를 반영하고, 타겟 메시지 유형은 위에서 정의한 XML 형식을 반영해야 합니다. 예를 들어, 다음과 같은 메시지 유형을 정의할 수 있습니다.
이때, 타겟 메시지 유형에서는 <StatementName> 요소와 <dbTableName> 요소에 각각 fixedValue 속성을 사용하여 SQL 문의 이름과 테이블 이름을 고정시킬 수 있습니다. 또한, <dbTableName> 요소에는 action 속성을 UPDATE_INSERT로 설정해야 합니다.
메시지 유형을 정의한 후에는 message mapping에서 소스와 타겟의 요소들을 연결하고, 필요한 경우에는 함수를 사용하여 값을 변환하거나 조건을 적용할 수 있습니다. 예를 들어, 다음과 같은 message mapping을 작성할 수 있습니다.
이때, 함수는 표준 함수 라이브러리에서 제공하는 것을 사용하거나, 사용자 정의 함수를 작성하여 사용할 수 있습니다. 사용자 정의 함수를 작성하려면, message mapping의 Functions 탭에서 Java 코드를 입력하고, 매개변수와 반환값을 설정해야 합니다.
이렇게 message mapping을 작성하고 저장한 후에는, Test 탭에서 매핑을 테스트할 수 있습니다. 테스트를 위해서는 소스 메시지 유형에 해당하는 XML 문서를 입력하고, 매핑을 실행하면 타겟 메시지 유형에 해당하는 XML 문서가 출력됩니다. 예를 들어, 다음과 같은 테스트를 수행할 수 있습니다.
이렇게 message mapping을 통해 SQL 문을 XML 형식으로 변환하는 방법에 대해서 설명해보았습니다. 이 방법을 사용하면, 데이터베이스 update insert를 할 수 있도록 구성할 수 있습니다.
참고사항
https://blogs.sap.com/2017/11/10/sap-pi-proxy-to-jdbc-scenario/
SAP PI Proxy to JDBC Scenario | SAP Blogs
23 3 40,568 Overview: Requirement is to insert/update SAP records in non-sap system’s Oracle Table. To achieve this, we create a Proxy-to-JDBC Asynchronous Outbound Scenario in SAP-PI. In SAPEcc, one ABAP function module is required to extract data from
blogs.sap.com
'SAP PO 7.5' 카테고리의 다른 글
SAPPO : SM59에서 PO 설정하기 (0) | 2023.12.18 |
---|---|
SAPPO : JDBC message processing failed (0) | 2023.12.15 |
SAPPO : Sproxy 화면 설정하기 (1) | 2023.12.05 |
SAPPO : cannot connect to server using message server. ms://xxxx:8100/P4 에러 (0) | 2023.11.22 |
SAPPO : Mapping Runtime Cache 에러 (1) | 2023.11.22 |