본문 바로가기

SAP PO 7.5

SAPPO : UPDATE_INSERT를 수행하는 Interface

반응형

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

 

반응형