BizTalk Server 사용하여 SAP에서 BAPI 트랜잭션 실행
SAP 어댑터를 사용하면 어댑터 클라이언트가 BizTalk Server 사용하여 SAP 시스템에서 트랜잭션을 수행할 수 있습니다. 트랜잭션에 대한 오케스트레이션을 만들기 전에 먼저 트랜잭션이 수행되는 기본 시나리오를 이해해야 합니다. 일반적인 트랜잭션 시나리오에서는 여러 작업(예: BAPI 호출)이 있는 요청 메시지가 SAP 시스템으로 전송됩니다. 이를 "작업 메시지"라고 합니다. 오케스트레이션은 요청 메시지에서 각 작업 메시지를 추출하고 개별 작업 메시지를 SAP 시스템으로 보내야 합니다. 오케스트레이션은 동일한 연결을 사용하여 하나씩 보냅니다. 오케스트레이션은 BizTalk 맵을 통해 XML 변환을 사용하여 "작업 메시지"에서 개별 메시지를 추출합니다.
작업이 수행된 후 오케스트레이션은 각각 BAPI_TRANSACTION_COMMIT 또는 BAPI_TRANSACTION_ROLLBACK 대한 메시지를 전송하여 트랜잭션을 커밋하거나 중단해야 합니다. 이를 "트랜잭션 메시지"라고 합니다.
어댑터가 BizTalk Server 통해 트랜잭션을 사용하도록 설정하려면 어떻게 할까요?
BizTalk Server 사용하여 SAP 시스템에서 트랜잭션을 사용하도록 설정하려면 SAP 어댑터를 사용합니다.
메시지 컨텍스트 속성 OPEN, REUSE, CLOSE 및 ABORT를 제공합니다.
BAPI_TRANSACTION_COMMIT 및 BAPI_TRANSACTION_ROLLBACK 사용하여 작업을 커밋하거나 중단합니다. 이러한 항목은 SAP 시스템에서 노출됩니다.
다음 표에는 BAPI_TRANSACTION_COMMIT 또는 BAPI_TRANSACTION_ROLLBACK 속성을 사용하는 방법에 대한 몇 가지 지침이 나와 있습니다.
메시지 | OPEN | 재사용 | CLOSE | 중단 |
---|---|---|---|---|
첫 번째 메시지(작업 메시지) | Yes | 아니요 | 예 | No |
후속 메시지(작업 메시지) | 예 | 예 | 아니요 | No |
BAPI_TRANSACTION_COMMIT(트랜잭션 메시지) | 예 | 예 | 예 | 아니요 |
BAPI_TRANSACTION_ROLLBACK(트랜잭션 메시지) | 아니요 | 아니요 | 예 | Yes |
표에서 "예"는 메시지에 사용할 메시지 컨텍스트 속성을 표시합니다. 마찬가지로 "아니요"는 메시지와 함께 사용할 수 없는 메시지 컨텍스트 속성을 표시합니다.
테이블을 요약하려면 다음을 수행합니다.
첫 번째 메시지는 항상 작업 메시지여야 하며 OPEN 속성만 사용해야 합니다.
후속 작업 메시지는 REUSE 속성을 사용해야 합니다.
트랜잭션을 커밋하기 위한 BAPI_TRANSACTION_COMMIT 해당하는 트랜잭션 메시지는 CLOSE 속성을 사용해야 합니다.
트랜잭션을 중단하기 위한 BAPI_TRANSACTION_ROLLBACK 해당하는 트랜잭션 메시지는 CLOSE 또는 ABORT 속성을 사용할 수 있습니다. ABORT를 사용하는 경우 메시지는 오케스트레이션 예외 블록에 있어야 합니다.
BizTalk Server 사용하여 트랜잭션과 관련된 주요 고려 사항
오케스트레이션에 둘 이상의 송신 포트가 있는 경우 어댑터는 각 포트에서 받은 메시지에 대한 트랜잭션을 자동으로 분리합니다. 즉, 트랜잭션은 포트에 걸쳐 확장할 수 없습니다.
SAP 트랜잭션의 메시지에 대한 메시지 재시도는 지원되지 않습니다. 따라서 사용자는 메시지 다시 시도 시도를 0으로 설정해야 합니다.
어댑터는 앞의 표에서 "아니요"로 표시된 조합에 대해 바람직하지 않은 결과를 생성할 수 있습니다. "예"로 표시된 조합을 사용해야 합니다.
메시지 컨텍스트 속성이 없는 어댑터로 전송된 메시지는 현재 트랜잭션 컨텍스트에 바인딩되지 않고 정상적으로 실행됩니다.
BAPI_TRANSACTION_COMMIT 또는 BAPI_TRANSACTION_ROLLBACK 오케스트레이션의 현재 트랜잭션 컨텍스트에서 마지막 메시지여야 합니다.
다음 섹션에서는 SAP 어댑터를 사용하여 SAP에서 트랜잭션을 수행하는 방법에 대한 지침을 제공합니다.
SAP 시스템에서 트랜잭션을 수행하는 방법
BizTalk Server 있는 SAP 어댑터를 사용하여 SAP 시스템에서 작업을 수행하려면 SAP 애플리케이션을 만들기 위한 구성 요소에 설명된 절차 작업이 포함됩니다. SAP 시스템에서 트랜잭션을 수행하려면 다음 작업을 수행합니다.
BizTalk 프로젝트를 만들고 트랜잭션을 수행할 RFC에 대한 스키마를 생성합니다. 또한 BAPI_TRANSACTION_COMMIT 및 BAPI_TRANSACTION_ROLLBACK RFC에 대한 스키마를 생성해야 합니다.
BIzTalk 프로젝트에서 SAP 시스템에서 메시지를 보내고 받기 위한 메시지를 만듭니다.
요청 메시지에서 개별 "작업 메시지"를 추출하고 SAP 시스템으로 보내는 오케스트레이션을 만듭니다. 요청 메시지에 따라 오케스트레이션은 트랜잭션을 커밋할지 롤백할지 결정합니다.
BizTalk 프로젝트를 빌드하고 배포합니다.
물리적 송신 및 수신 포트를 만들어 BizTalk 애플리케이션을 구성합니다.
BizTalk 애플리케이션을 시작합니다.
이 항목에서는 이러한 작업을 수행하는 지침을 제공합니다.
이 항목을 기반으로 하는 샘플
이 항목을 기반으로 하는 샘플 SAPTransaction은 BizTalk 어댑터 팩과 함께 제공됩니다. 자세한 내용은 SAP 어댑터에 대한 샘플을 참조하세요.
스키마 생성
SAP 시스템에서 트랜잭션을 수행하는 방법을 보여 주려면 다음 스키마가 필요합니다.
SAP 시스템에서 작업을 수행하기 위한 "작업 메시지"입니다. 어댑터로 전송된 요청 메시지는 이 스키마를 준수해야 합니다. 이는 작업 노드 수를 포함하는 사용자별 스키마일 수 있습니다. 이 항목에서는 MultipleOrders.xsd 스키마가 사용됩니다. 스키마는 BizTalk 어댑터 팩 샘플과 함께 제공되는 트랜잭션 샘플의 일부로도 제공됩니다. 자세한 내용은 스키마 샘플을 참조하세요.
RFC 호출과 같은 SAP 시스템에서 작업을 수행하기 위한 것입니다. 작업을 수행하기 위한 요청 메시지는 이 스키마를 준수해야 합니다. 이 스키마는 어댑터 서비스 사용 BizTalk 프로젝트 추가 기능을 사용하여 생성해야 합니다. 이 항목에서는 BAPI_SALESORDER_CREATEFROMDAT2 RFC가 호출됩니다. RFC에 대한 스키마를 생성하는 방법에 대한 자세한 내용은 SAP에서 RFC 작업에 대한 메타데이터 찾아보기, 검색 및 가져오기를 참조하세요.
트랜잭션을 중단하거나 커밋하는 경우. 트랜잭션을 커밋하거나 중단하는 요청은 이 스키마를 준수해야 합니다. SAP 어댑터는 BAPI_TRANSACTION_COMMIT 및 BAPI_TRANSACTION_ROLLBACK RFC를 사용하여 작업을 각각 커밋하고 롤백합니다. 어댑터 서비스 사용 추가 기능을 사용하여 이러한 RFC에 대한 스키마를 생성해야 합니다.
참고
필요한 모든 스키마가 BizTalk 프로젝트에 추가되었는지 확인해야 합니다.
중요
BIzTalk 프로젝트에 SAP 어댑터용 BizTalk 속성 스키마에 대한 참조를 추가해야 합니다. 스키마 파일 (Microsoft.Adapters.SAP.BiztalkPropertySchema.dll)은 BizTalk 어댑터 팩 설정에 의해 설치되며, 일반적으로 <설치 드라이브>:\Program Files\Microsoft BizTalk Adapter Pack\bin에 설치됩니다.
메시지 및 메시지 유형 정의
이전에 생성한 스키마는 오케스트레이션의 메시지에 필요한 "형식"을 설명합니다. 메시지는 일반적으로 변수이며, 이 형식은 해당 스키마에 의해 정의됩니다. 첫 번째 단계에서 생성한 스키마를 BizTalk 프로젝트의 오케스트레이션 뷰 창의 메시지에 연결해야 합니다.
메시지를 만들기 전에 요청 메시지(MultipleOrders.xsd 형식)에 있는 "작업" 노드 수를 결정해야 합니다. 이 예제에서는 요청 메시지에 BAPI_SALESORDER_CREATEFROMDAT2 RFC를 호출하는 두 개의 작업 메시지가 있다고 가정합니다. 따라서 이 RFC에 대해 생성된 스키마에 매핑되는 하나의 요청-응답 메시지 집합을 만들어야 합니다.
BizTalk 프로젝트에서 다음 메시지를 만들어야 합니다.
오케스트레이션으로 전송될 요청 메시지에 대한 SendtoAdapter 메시지입니다. 이 메시지는 입력 메시지 MultipleOrders.xsd에 대한 스키마에 매핑되어야 합니다.
SAP 시스템에 전송된 첫 번째 작업에 대한 BAPIMessage 메시지입니다. 첫 번째 작업의 응답에 대한 응답 메시지인 BAPIResponse도 만들어야 합니다. 요청 및 응답 메시지는 BAPI_SALESORDER_CREATEFROMDAT2 RFC에 대해 생성된 스키마에 매핑되어야 합니다.
커밋 작업에 대한 BAPICommitMessage 메시지입니다. 또한 해당 응답 메시지에 대한 응답 메시지인 BAPICommitResponse를 만들어야 합니다. 요청 및 응답 메시지는 BAPI_TRANSACTION_COMMIT RFC의 스키마에 매핑되어야 합니다.
롤백 작업에 대한 BAPIRollbackMessage 메시지입니다. 또한 해당 응답 메시지에 대한 응답 메시지인 BAPIRollbackResponse를 만들어야 합니다. 요청 및 응답 메시지는 BAPI_TRANSACTION_ROLLBACK RFC의 스키마에 매핑되어야 합니다.
다음 단계를 수행하여 메시지를 만들고 스키마에 연결합니다.
메시지를 만들고 스키마에 연결하려면
아직 열려 있지 않은 경우 BizTalk 프로젝트를 오케스트레이션 보기를 엽니다. 보기를 클릭하고 다른 창을 가리킨 다음 오케스트레이션 보기를 클릭합니다.
오케스트레이션 보기에서 메시지를 마우스 오른쪽 단추로 클릭한 다음 새 메시지를 클릭합니다.
새로 만든 메시지를 마우스 오른쪽 단추로 클릭한 다음 속성 창을 선택합니다.
Message_1속성 창에서 다음을 수행합니다.
사용 항목 원하는 작업 ID SendToAdapter를 입력합니다. 메시지 유형 드롭다운 목록에서 스키마를 확장하고 SAPTransaction.MultipleOrders를 선택합니다. 여기서 SAPTransaction 은 BizTalk 프로젝트의 이름입니다. MultipleOrders 는 요청 메시지의 스키마입니다. 이전 단계를 반복하여 6개의 메시지를 더 만듭니다. 새 메시지의 속성 창에서 다음을 수행합니다.
식별자를 로 설정 메시지 유형을 로 설정 BAPIMessage SAPTransaction.SAPBindingSchema.BAPI_SALESORDER_CREATEFROMDAT2 BAPIResponse SAPTransaction.SAPBindingSchema.BAPI_SALESORDER_CREATEFROMDAT2Response BAPICommitMessage SAPTransaction.SAPBindingSchema.BAPI_TRANSACTION_COMMIT BAPICommitResponse SAPTransaction.SAPBindingSchema.BAPI_TRANSACTION_COMMITResponse BAPIRollbackMessage SAPTransaction.SAPBindingSchema.BAPI_TRANSACTION_ROLLBACK BAPIRollbackResponse SAPTransaction.SAPBindingSchema.BAPI_TRANSACTION_ROLLBACKResponse
오케스트레이션 설정
SAP 시스템에서 트랜잭션을 수행하기 위해 BizTalk Server 사용하려면 BizTalk 오케스트레이션을 만들어야 합니다. 이 오케스트레이션에서는 정의된 수신 위치에 요청 메시지를 삭제합니다. SAP 어댑터는 메시지를 사용하고 SAP 시스템에 전달합니다. SAP 시스템의 응답이 다른 위치에 저장됩니다.
오케스트레이션을 만들 때 고려해야 할 또 다른 고려 사항은 다음과 같습니다.
요청 메시지의 스키마를 BAPI_SALESORDER_CREATEFROMDAT2 RFC의 스키마에 매핑합니다.
요청 메시지의 스키마를 BAPI_TRANSACTION_COMMIT 및 BAPI_TRANSACTION_ROLLBACK RFC의 스키마에 매핑합니다.
BizTalk 맵을 통해 XML 변환을 사용하여 스키마를 매핑할 수 있습니다. 이를 위해 오케스트레이션에 셰이프 변환을 포함합니다.
마지막으로 요청 메시지에 트랜잭션을 커밋하거나 중단할 정보가 있는지 여부에 따라 오케스트레이션은 SAP 시스템으로 보낼 적절한 메시지를 결정해야 합니다. 이를 위해 오케스트레이션에 Decide 셰이프를 포함합니다.
오케스트레이션에 포함된 다양한 셰이프에 대한 자세한 내용은 UI 지침 및 개발자 API 네임스페이스 참조의 오케스트레이션 Designer UI를 참조하세요.
SAP 트랜잭션에 대한 샘플 오케스트레이션은 다음과 유사합니다.
SAP 에서
메시지 셰이프 추가
각 메시지 셰이프에 대해 다음 속성을 지정해야 합니다. Shape 열에 나열된 이름은 이전 오케스트레이션에 표시된 메시지 셰이프의 이름입니다.
도형 | 도형 유형 | 속성 |
---|---|---|
ReceiveInputXML | Receive | - 이름을ReceiveInputXML로 설정 - 활성화를 True로 설정 |
SendToLOB | Send | - 이름을SendToLOB로 설정 |
ReceiveResponse | Receive | - 이름을ReceiveResponse로 설정 - 활성화를 False로 설정 |
SendResponse | Send | - 이름을SendResponse로 설정 |
요청 메시지에는 두 개의 삽입 메시지가 있으므로 SAP에 메시지를 보내고 응답을 받으려면 다른 보내기 및 수신 셰이프 집합을 만들어야 합니다. 그러나 삽입 메시지가 커밋되거나 롤백될 수 있으므로 두 번째 셰이프 집합을 의사 결정 블록 내에 만들어야 합니다. 커밋을 위한 셰이프 집합 하나와 롤백을 위한 다른 셰이프 집합을 만들어야 합니다.
참고
BizTalk 오케스트레이션 도구 상자에서 결정 셰이프를 끌어서 놓아 의사 결정 블록을 추가할 수 있습니다.
커밋에 대한 메시지 셰이프
다음 표에서는 오케스트레이션의 "커밋 경로"에 대한 셰이프를 나열합니다. 여기서는 요청 메시지에 대한 수신 메시지를 만들 필요가 없습니다. 요청 메시지는 이전 메시지 셰이프에서 전달됩니다.
도형 | 도형 유형 | 속성 |
---|---|---|
SendBAPICommit | Send | - 이름을SendBAPICommit으로 설정 |
ReceiveCommitResponse | Receive | - 이름을ReceiveCommitResponse로 설정 - 활성화를 False로 설정 |
SendResponse2 | Send | - 이름을SendResponse2로 설정 |
중단에 대한 메시지 셰이프
다음 표에서는 오케스트레이션의 "롤백 경로"에 대한 셰이프를 나열합니다.
도형 | 도형 유형 | 속성 |
---|---|---|
SendBAPIRollback | Send | - 이름을SendBAPIRollback으로 설정 |
ReceiveRollbackResponse | Receive | - 이름을ReceiveRollbackResponse로 설정 - 활성화를 False로 설정 |
SendResponse3 | Send | - 이름을SendResponse3으로 설정 |
규칙 식 설정
결정 셰이프를 추가하여 커밋 및 중단 작업에 대한 메시지 셰이프를 의사 결정 블록 내에 포함했습니다. 오케스트레이션이 결정할 조건을 지정하려면 트랜잭션이 커밋되거나 롤백될 규칙에 따라 규칙 셰이프에 식을 지정해야 합니다. 예를 들어 규칙 셰이프에 대해 다음 식을 지정해야 합니다.
SendToAdapter.isCommit == true
여기서 SendToAdapter는 요청 메시지의 스키마에 대해 만든 메시지입니다. 따라서 요청 메시지에서 태그가 isCommit
True로 설정된 경우 오케스트레이션은 "커밋" 경로를 사용합니다. 그렇지 않으면 오케스트레이션은 "롤백" 경로를 사용합니다.
식 편집기에서 이 조건을 지정할 수 있게 하려면 어댑터로 전송된 isCommit
요청 메시지에 대한 메시지 스키마의 속성을 승격해야 합니다. 이 항목의 경우 사용할 입력 스키마는 MultipleOrders.xsd입니다. 이 스키마에서 isCommit
속성을 승격해야 합니다. 속성 승격에 대한 자세한 내용은 속성 승격을 참조하세요.
생성 메시지 셰이프 추가
앞에서 설명한 것처럼 어댑터로 전송된 요청 메시지에는 두 개의 삽입 메시지와 커밋 또는 중단 메시지가 포함됩니다. SAP 시스템으로 보낼 개별 작업 메시지를 추출하려면 생성 메시지 셰이프와 변환 셰이프를 추가해야 합니다. 또한 메시지 할당 셰이프를 추가하여 트랜잭션을 사용하도록 설정하기 위한 메시지 컨텍스트 속성을 설정해야 합니다.
첫 번째 생성 메시지 셰이프
첫 번째 생성 메시지 셰이프를 "ReceiveXML"이라고 가정합니다. 이 셰이프의 경우 Messages Constructed 속성을 "BAPIMessage"로 지정합니다. 변환 셰이프를 두 번 클릭하여 구성 변환 대화 상자를 엽니다. 대화 상자에서
새 맵을 만들도록 선택합니다.
왼쪽 창에서 원본 을 선택하고 변수 이름 드롭다운에서 SendToAdapter를 선택합니다.
왼쪽 창에서 대상 을 선택하고 변수 이름 드롭다운에서 BAPIMessage를 선택합니다.
확인을 클릭하여 매퍼를 시작합니다. 요청 메시지의 스키마를 BAPI_SALESORDER_CREATEFROMDAT2 스키마에 매핑합니다. Index 펑토이드를 사용하여 원본과 대상 스키마 사이에 맵을 만들 수 있습니다. Index 펑토이드를 사용하면 일련의 레코드에서 특정 레코드에 대한 정보를 선택할 수 있습니다.
다음 그림에서는 Index 펑토이드를 사용하여 매핑된 스키마를 보여 줍니다.
을 사용하여 매핑된 스키마
구성 변환 대화 상자를 사용하는 방법에 대한 자세한 내용은 UI 지침 및 개발자 API 네임스페이스 참조의 구성 변환 대화 상자를 참조하세요.
Index 펑토이드 사용에 대한 자세한 내용은 Index 펑토이드를 참조하세요.
스키마를 매핑한 후 지도 파일의 속성 페이지를 사용하여 매핑을 테스트할 수 있습니다. 자세한 내용은 UI 지침 및 개발자 API 네임스페이<스 참조의 맵 파일> 속성 페이지 지도 대화 상자, 테스트 맵 탭을 참조하세요.
메시지 할당 셰이프에서 트랜잭션을 시작할 메시지 컨텍스트 속성을 지정합니다. 예를 들어 첫 번째 메시지의 메시지 컨텍스트 속성은 다음과 같습니다.
BAPIMessage(Microsoft.Adapters.SAP.BiztalkPropertySchema.ConnectionState) = "OPEN";
커밋 생성 메시지 셰이프
커밋 작업의 생성 메시지 셰이프를 "CommitMessage"라고 가정합니다. 이 셰이프의 경우 Messages Constructed 속성을 "BAPICommitMessage"로 지정합니다. 변환 셰이프를 두 번 클릭하여 구성 변환 대화 상자를 엽니다. 대화 상자에서
새 맵을 만들도록 선택합니다.
왼쪽 창에서 원본 을 선택하고 변수 이름 드롭다운에서 SendToAdapter를 선택합니다.
왼쪽 창에서 대상 을 선택하고 변수 이름 드롭다운에서 BAPICommitMessage를 선택합니다.
확인을 클릭하여 매퍼를 시작합니다. 요청 메시지의 스키마를 BAPI_TRANSACTION_COMMIT 스키마에 매핑합니다. BAPI_TRANSACTION_COMMIT 노드에 레코드 계층 구조가 없으므로 이 매핑에 대한 Index 펑토이드를 포함할 필요가 없습니다.
메시지 할당 셰이프에서 트랜잭션을 커밋할 메시지 컨텍스트 속성을 지정합니다. 예를 들어 첫 번째 메시지의 메시지 컨텍스트 속성은 다음과 같습니다.
BAPICommitMessage(Microsoft.Adapters.SAP.BiztalkPropertySchema.ConnectionState) = "CLOSE";
롤백 생성 메시지 셰이프
롤백 작업의 생성 메시지 셰이프를 "RollbackMessage"라고 가정합니다. 이 셰이프의 경우 Messages Constructed 속성을 "BAPIRollbackMessage"로 지정합니다. 변환 셰이프를 두 번 클릭하여 구성 변환 대화 상자를 엽니다. 대화 상자에서
새 맵을 만들도록 선택합니다.
왼쪽 창에서 원본 을 선택하고 변수 이름 드롭다운에서 SendToAdapter를 선택합니다.
왼쪽 창에서 대상 을 선택하고 변수 이름 드롭다운에서 BAPIRollbackMessage를 선택합니다.
확인을 클릭하여 매퍼를 시작합니다. 요청 메시지의 스키마를 BAPI_TRANSACTION_ROLLBACK 스키마에 매핑합니다. BAPI_TRANSACTION_ROLLBACK 노드에 레코드 계층 구조가 없으므로 이 매핑에 대한 Index 펑토이드를 포함할 필요가 없습니다.
메시지 할당 셰이프에서 트랜잭션을 롤백할 메시지 컨텍스트 속성을 지정합니다. 예를 들어 첫 번째 메시지의 메시지 컨텍스트 속성은 다음과 같습니다.
BAPIRollbackMessage(Microsoft.Adapters.SAP.BiztalkPropertySchema.ConnectionState) = "ABORT";
중요
일반적인 시나리오에서는 ABORT 컨텍스트 속성을 사용하는 BAPI_TRANSACTION_ROLLBACK 해당하는 메시지를 예외 블록에서 사용해야 합니다.
포트 추가
각 논리 포트에 대해 다음 속성을 지정해야 합니다. 포트 열에 나열된 이름은 오케스트레이션에 표시된 포트의 이름입니다.
이 오케스트레이션의 경우 세 개의 포트가 만들어집니다. 첫 번째 포트는 지정된 폴더에서 요청 메시지를 선택합니다. 두 번째 포트는 SAP 시스템에 메시지를 보내고 응답을 받습니다. 세 번째 포트는 응답을 다른 폴더에 저장합니다. 따라서
첫 번째 포트는 단일 스키마, 즉 MultipleOrders.xsd에 대한 메시지만 받습니다.
두 번째 포트는 BAPI_SALESORDER_CREATEFROMDAT2 RFC 스키마에 대한 메시지를 보내고 받습니다. 또한 동일한 포트를 사용하여 트랜잭션을 커밋하거나 롤백합니다. 따라서 이 포트는 BAPI_TRANSACTION_COMMIT 및 BAPI_TRANSACTION_ROLLBACK RFC에 대한 스키마 메시지도 수신합니다. 이를 사용하도록 설정하기 위해 이 포트에 각각 특정 메시지 스키마에 해당하는 세 가지 작업이 만들어집니다.
두 번째 포트와 마찬가지로 이 포트는 세 가지 스키마가 있는 메시지를 수신합니다. 따라서 이 포트에서 세 가지 작업을 만들어야 합니다.
포트 | 속성 |
---|---|
FileIn | - 식별자를FileIn으로 설정 - 형식을 FileInType으로 설정 - 통신 패턴을단방향으로 설정 - 수신할 통신 방향 설정 |
LOBPort | - 식별자를LOBPort로 설정 - 형식을 LOBPortType으로 설정 - 통신 패턴을Request-Response로 설정 - 통신 방향을Send-Receive로 설정 - BAPIMessage 작업을 만듭니다. - CommitMessage 작업을 만듭니다. 이 작업은 커밋 메시지 보내는 데 사용됩니다. - RollbackMessage 작업을 만듭니다. 이 작업은 롤백 메시지를 보내는 데 사용됩니다. |
SaveResponse | - 식별자를SaveResponse로 설정 - Type을 SaveResponseType으로 설정 - 통신 패턴을단방향으로 설정 - 통신 방향을전송으로 설정합니다. - BAPIMessage 작업을 만듭니다. - CommitMessage 작업을 만듭니다. 이 작업은 커밋 메시지 대한 응답을 저장하는 데 사용됩니다. - RollbackMessage 작업을 만듭니다. 이 작업은 롤백 메시지에 대한 응답을 저장하는 데 사용됩니다. |
작업 셰이프에 대한 메시지 지정 및 포트에 연결
다음 표에서는 작업 셰이프에 대한 메시지를 지정하고 포트에 연결하도록 설정할 속성 및 해당 값을 지정합니다. Shape 열에 나열된 이름은 이전 오케스트레이션에 표시된 메시지 셰이프의 이름입니다.
도형 | 속성 |
---|---|
ReceiveInputXML | - SendToAdapter로 메시지 설정 - 작업을FileIn.Transaction.Request로 설정 |
SendToLOB | - 메시지를BAPIMessage로 설정 - 작업을 LOBPort.BAPIMessage.Request로 설정 |
ReceiveResponse | - 메시지를 BAPIResponse로 설정 - 작업을 LOBPort.BAPIMessage.Response로 설정 |
SendResponse | - 메시지를 BAPIResponse로 설정 - 작업을SaveResponse.BAPIMessage.Request로 설정 |
SendBAPICommit | - 메시지를 BAPICommitMessage로 설정 - 작업을 LOBPort.CommitMessage.Request로 설정 |
ReceiveCommitResponse | - 메시지를 BAPICommitResponse로 설정 - 작업을 LOBPort.CommitMessage.Response로 설정 |
SendResponse2 | - 메시지를 BAPICommitResponse로 설정 - 작업을SaveResponse.CommitMessage.Request로 설정 |
SendBAPIRollback | - BAPIRollbackMessage로 메시지 설정 - 작업을LOBPort.RollbackMessage.Request로 설정 |
ReceiveRollbackResponse | - 메시지를 BAPIRollbackResponse로 설정 - 작업을 LOBPort.RollbackMessage.Response로 설정 |
SendResponse3 | - 메시지를 BAPIRollbackResponse로 설정 - 작업을SaveResponse.RollbackMessage.Request로 설정 |
이러한 속성을 지정하면 메시지 셰이프와 포트가 연결되고 오케스트레이션이 완료됩니다.
예외 처리
BAPI 트랜잭션을 수행하기 위한 오케스트레이션과 같은 복잡한 오케스트레이션에서는 오케스트레이션 상태를 추적하고 오류가 발생할 때 오류를 보고하여 문제가 발생할 때 resolve 수 있도록 하는 것이 중요합니다. BizTalk 오케스트레이션은 오류를 처리하고, 오케스트레이션 상태를 유지 관리하고, 트랜잭션, 보정 및 예외 처리를 통해 발생하는 문제를 해결하는 도구를 제공합니다.
오케스트레이션 Designer 트랜잭션 및 예외 처리를 위한 프레임워크로 범위 셰이프를 제공합니다. 범위에 트랜잭션 유형, 보정 및 여러 개의 예외 핸들러를 포함할 수 있습니다. 범위에는 하나 이상의 블록이 있습니다. 본문이 있으며 필요에 따라 임의 개수의 예외 처리 블록이 추가될 수 있습니다. BAPI 트랜잭션의 경우 전체 오케스트레이션(이전 그림 참조)을 scope 포함할 수 있습니다.
예외를 catch하려면 Catch Exception 블록을 오케스트레이션에 추가해야 합니다. Catch 예외 블록은 오케스트레이션 Designer 범위 셰이프의 끝에 연결됩니다. BAPI 트랜잭션의 경우 Catch 예외 블록에 "ABORT" 루틴을 추가해야 합니다. 즉, 다음을 "ABORT" 루틴에 추가해야 합니다.
변환(입력 메시지에서 요청 메시지를 추출하기 위해) 및 메시지 할당 셰이프(컨텍스트 속성을 설정하기 위해)로 구성된 생성 메시지 셰이프
셰이프를 보내고 받습니다.
BizTalk 어댑터 팩과 함께 제공되는 BizTalk Server(SAPTransaction)에 대한 SAP 트랜잭션 샘플도 예외 처리를 보여 줍니다. 샘플에 대한 자세한 내용은 SAP 어댑터에 대한 샘플을 참조하세요.
일반적으로 BizTalk Server 사용하여 예외를 처리하는 방법에 대한 자세한 내용은 트랜잭션 사용 및 예외 처리를 참조하세요.
BizTalk에 BizTalk 속성 스키마 추가
BizTalk 프로젝트에서 SAP 어댑터용 BizTalk 속성 스키마에 어셈블리 참조를 추가했습니다. BizTalk 애플리케이션, 즉 BizTalk 프로젝트가 배포될 애플리케이션에서 리소스와 동일한 어셈블리를 추가해야 합니다. 스키마 파일 (Microsoft.Adapters.SAP.BiztalkPropertySchema.dll)은 일반적으로 설치 드라이브>:\Program Files\Microsoft BizTalk Adapter Pack\bin에서 <BizTalk 어댑터 팩 설정에 의해 설치됩니다. 이 리소스가 없으면 프로젝트를 배포할 수 없습니다.
BizTalk에서 어셈블리를 리소스로 추가하려면
BizTalk Server 관리 콘솔을 시작합니다.
콘솔 트리에서 BizTalk 그룹을 확장하고 애플리케이션을 확장한 다음 BizTalk 어셈블리를 추가할 애플리케이션을 확장합니다.
리소스를 마우스 오른쪽 단추로 클릭하고 추가를 가리킨 다음 BizTalk 어셈블리를 클릭합니다.
리소스 추가 대화 상자에서 추가를 클릭하고 BizTalk 어셈블리 파일이 포함된 폴더로 이동하고 BizTalk 어셈블리 파일을 선택한 다음 열기를 클릭합니다.
옵션에서 BizTalk 어셈블리를 GAC에 설치하는 옵션을 지정한 다음 확인을 클릭합니다.
이제 BizTalk 솔루션을 빌드한 다음 BizTalk Server 배포해야 합니다. 자세한 내용은 오케스트레이션 빌드 및 실행을 참조하세요.
BizTalk 애플리케이션 구성
BizTalk 프로젝트를 배포한 후에는 이전에 만든 오케스트레이션이 BizTalk Server 관리 콘솔의 오케스트레이션 창 아래에 나열됩니다. 애플리케이션을 구성하려면 BizTalk Server 관리 콘솔을 사용해야 합니다. 애플리케이션 구성에 대한 자세한 내용은 애플리케이션을 구성하는 방법을 참조하세요.
애플리케이션 구성에는 다음이 포함됩니다.
애플리케이션에 대한 호스트를 선택합니다.
오케스트레이션에서 만든 포트를 BizTalk Server 관리 콘솔의 실제 포트에 매핑합니다. 이 오케스트레이션의 경우 다음을 수행해야 합니다.
하드 디스크의 위치와 요청 메시지를 삭제할 해당 파일 포트를 정의합니다. BizTalk 오케스트레이션은 요청 메시지를 사용하고 SAP 시스템으로 보냅니다.
하드 디스크의 위치와 BizTalk 오케스트레이션이 SAP 시스템의 응답을 포함하는 응답 메시지를 삭제하는 해당 파일 포트를 정의합니다.
SAP 시스템에 메시지를 보낼 물리적 WCF-Custom 또는 WCF-SAP 송신 포트를 정의합니다. 포트를 만드는 방법에 대한 자세한 내용은 SAP 어댑터에 대한 물리적 포트 바인딩 수동 구성을 참조하세요. 송신 포트는 둘 이상의 스키마를 준수하는 메시지를 보내고 받고 두 가지 작업을 수행하기 때문에 두 작업에 대해 동적 작업을 설정해야 합니다. 작업에 대한 자세한 내용은 SAP 시스템에 대한 SOAP 작업 구성을 참조하세요. 트랜잭션을 수행하기 위해 WCF-Custom 또는 WCF-SAP 송신 포트를 만드는 동안 다음 주요 고려 사항을 준수해야 합니다.
다음과 같이 설정 이 값으로 작업 송신 포트는 둘 이상의 작업에 대한 메시지를 보내고 받습니다. 따라서 송신 포트에 대한 작업은 각 작업에 대해 설정되어야 합니다.
<BtsActionMapping> <Operation Name="BAPIMessage" Action="http://Microsoft.LobServices.Sap/2007/03/Rfc/BAPI_SALESORDER_CREATEFROMDAT2" /> <Operation Name="CommitMessage" Action="http://Microsoft.LobServices.Sap/2007/03/Rfc/BAPI_TRANSACTION_COMMIT" /> <Operation Name="RollbackMessage" Action="http://Microsoft.LobServices.Sap/2007/03/Rfc/BAPI_TRANSACTION_ROLLBACK" /> </BtsActionMapping>
EnableBizTalkCompatibilityMode 이 바인딩 속성을 True로 설정합니다. EnableConnectionPooling 트랜잭션을 수행하기 전에 이 바인딩 속성을 False 로 설정합니다. 어댑터와 BizTalk 간에 설정된 채널이 예기치 않게 종료되는 시나리오에서는 해당 연결이 연결 풀에 추가됩니다. 다른 채널이 열리고 새 채널이 동일한 연결 개체를 선택하면 트랜잭션이 새 채널을 통해 커밋될 때 이전 연결 개체의 커밋되지 않은 트랜잭션도 커밋됩니다. 이를 방지하려면 트랜잭션을 수행하는 동안 연결 풀링을 사용하지 않도록 설정해야 합니다. 참고
어댑터 서비스 사용 BizTalk 프로젝트 추가 기능을 사용하여 스키마를 생성하면 포트에 대한 정보와 해당 포트에 대해 설정할 작업이 포함된 바인딩 파일도 만들어집니다. BizTalk Server 관리 콘솔에서 이 바인딩 파일을 가져와 송신 포트(아웃바운드 호출의 경우) 또는 수신 포트(인바운드 호출의 경우)를 만들 수 있습니다. 자세한 내용은 SAP에 대한 포트 바인딩 파일을 사용하여 물리적 포트 바인딩 구성을 참조하세요.
중요
기본 전송이 작동하지 않을 경우 다른 SAP 시스템으로 메시지를 보낼 수 있도록 하는 WCF-Custom 또는 WCF-SAP 송신 포트에서 백업 전송을 구성할 수 있습니다. 그러나 SAP 시스템에서 트랜잭션을 수행하기 위해 WCF 기반 SAP 어댑터는 다른 SAP 서버를 가리키는 백업 전송 지정을 지원하지 않습니다.
애플리케이션 시작
SAP 시스템에서 트랜잭션을 수행하는 BizTalk 애플리케이션을 시작해야 합니다. BizTalk 애플리케이션 시작에 대한 지침은 오케스트레이션을 시작하는 방법, 애플리케이션을 시작하는 방법을 참조하세요.
이 단계에서는 다음을 확인합니다.
오케스트레이션에 대한 요청 메시지를 받을 FILE 수신 포트가 실행 중입니다.
오케스트레이션에서 응답 메시지를 받을 FILE 송신 포트가 실행 중입니다.
SAP 시스템에 메시지를 보내는 WCF-Custom 또는 WCF-SAP 송신 포트가 실행 중입니다.
작업에 대한 BizTalk 오케스트레이션이 실행 중입니다.
작업 실행
애플리케이션을 실행한 후에는 미리 정의된 위치에서 오케스트레이션에 대한 요청 메시지를 삭제해야 합니다. 요청 메시지는 instance MultipleOrders.xsd 스키마의 경우 특정 스키마를 준수해야 합니다. 예를 들어 SAP 시스템에서 판매 주문을 만든 다음 작업을 커밋하기 위한 요청 메시지는 다음과 같습니다.
<ns0:Orders xmlns:ns0="http://BAPISend.MultipleOrders">
<Order>
<ORDER_HEADER_IN>
<DOC_TYPE>TA</DOC_TYPE>
<SALES_ORG>1000</SALES_ORG>
<DISTR_CHAN>10</DISTR_CHAN>
<DIVISION>00</DIVISION>
<SALES_OFF>1000</SALES_OFF>
<REQ_DATE_H>20060901</REQ_DATE_H>
<PURCH_DATE>20060901</PURCH_DATE>
<PURCH_NO_C>Cust A</PURCH_NO_C>
<CURRENCY>EUR</CURRENCY>
</ORDER_HEADER_IN>
<ORDER_ITEMS_IN>
<MATERIAL>P-109</MATERIAL>
<PLANT>1000</PLANT>
<TARGET_QU>ST</TARGET_QU>
</ORDER_ITEMS_IN>
<ORDER_PARTNERS>
<PARTN_ROLE>AG</PARTN_ROLE>
<PARTN_NUMB>0000000257</PARTN_NUMB>
</ORDER_PARTNERS>
<RETURN></RETURN>
</Order>
<isCommit>true</isCommit>
<BAPI_TRANSACTION_COMMIT>
</BAPI_TRANSACTION_COMMIT>
</ns0:Orders>
오케스트레이션은 메시지를 사용하고 SAP 시스템으로 보냅니다. SAP 시스템의 응답은 오케스트레이션의 일부로 정의된 다른 파일 위치에 저장됩니다. 위의 요청 메시지의 경우 두 개의 응답 메시지(하나는 BAPI_SALESORDER_CREATEFROMDAT2 RFC를 호출하고 다른 하나는 BAPI_TRANSACTION_COMMIT 사용하여 커밋 작업에 대한 응답 메시지를 가져옵니다.
BAPI_SALESORDER_CREATEFROMDAT2 대한 응답은 다음과 같습니다.
<?xml version="1.0" encoding="utf-8" ?>
<BAPI_SALESORDER_CREATEFROMDAT2Response xmlns="http://Microsoft.LobServices.Sap/2007/03/Rfc/">
<SALESDOCUMENT />
<ORDER_ITEMS_IN>
<BAPISDITM xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/">
<ITM_NUMBER>0</ITM_NUMBER>
<HG_LV_ITEM>0</HG_LV_ITEM>
<PO_ITM_NO />
......
</BAPISDITM>
</ORDER_ITEMS_IN>
<ORDER_PARTNERS>
<BAPIPARNR xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/">
<PARTN_ROLE>AG</PARTN_ROLE>
<PARTN_NUMB>0000000257</PARTN_NUMB>
<ITM_NUMBER>0</ITM_NUMBER>
......
</BAPIPARNR>
</ORDER_PARTNERS>
</BAPI_SALESORDER_CREATEFROMDAT2Response>
BAPI_TRANSACTION_COMMIT 대한 응답은 다음과 같습니다.
<?xml version="1.0" encoding="utf-8" ?>
<BAPI_TRANSACTION_COMMITResponse xmlns="http://Microsoft.LobServices.Sap/2007/03/Rfc/">
<RETURN>
<TYPE xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/" />
<ID xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/" />
<NUMBER xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/">0</NUMBER>
<MESSAGE xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/" />
<LOG_NO xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/" />
<LOG_MSG_NO xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/">0</LOG_MSG_NO>
<MESSAGE_V1 xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/" />
<MESSAGE_V2 xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/" />
<MESSAGE_V3 xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/" />
<MESSAGE_V4 xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/" />
<PARAMETER xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/" />
<ROW xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/">0</ROW>
<FIELD xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/" />
<SYSTEM xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/" />
</RETURN>
</BAPI_TRANSACTION_COMMITResponse>
참고
요청 메시지가 BAPI_TRANSACTION_ROLLBACK RFC를 호출한 경우 두 번째 응답은 BAPI_TRANSACTION_ROLLBACK 대한 응답입니다.
가능한 예외
BizTalk Server 사용하여 SAP 시스템에서 트랜잭션을 수행하는 동안 발생할 수 있는 예외에 대한 자세한 내용은 SAP 어댑터를 사용한 예외 및 오류 처리를 참조하세요.
모범 사례
BizTalk 프로젝트를 배포하고 구성한 후에는 바인딩 파일이라는 XML 파일로 구성 설정을 내보낼 수 있습니다. 바인딩 파일을 생성한 후에는 동일한 오케스트레이션을 위해 송신 포트를 만들고 포트를 받을 필요가 없도록 파일에서 구성 설정을 가져올 수 있습니다. 바인딩 파일에 대한 자세한 내용은 SAP 어댑터 바인딩 다시 사용을 참조하세요.