임의 XPath 속성 처리기(BizTalk Server 샘플)
임의의 XPath 속성 처리기(BizTalk Server 샘플)는 사용자 지정 파이프라인 구성 요소를 작성하여 BizTalk Server 제출된 XML 문서에서 특정 속성을 승격하는 방법을 보여 줍니다. 샘플에 포함된 기능을 사용하여 XPath 식을 계산할 사용자 지정 일반, 어셈블러 및 디스어셈블러 구성 요소를 만들 수 있습니다.
이 샘플의 용도
샘플에는 처리할 PO(구매 주문) XML 문서가 포함되어 DocInstance.xml. 샘플은 다음 단계를 사용하여 DocInstance.xml 처리합니다.
DocInstance.xml BizTalk Server 수신 포트에 의해 검색되고 임의 XPath 속성 처리기라는 사용자 지정 파이프라인 구성 요소에서 처리됩니다.
임의의 XPath 속성 처리기 구성 요소는 PO 스키마에 정의된 대로 임의의 XPath 식을 사용하여 모든 <Price> 및 <Quantity> 요소를 승격합니다. XPath 식에는 PO 문서 루트 요소의 모호한 자식 요소에 사용할 위치 구문도 포함됩니다.
Arbitrary XPath Property Handler 구성 요소가 메시지 유형을 확인하고 메시지 컨텍스트로 승격합니다.
구성 요소가 추가 처리를 위해 승격된 요소가 포함된 XML 문서를 오케스트레이션으로 보냅니다.
오케스트레이션이 PO 문서의 승격된 요소에 액세스하고 PO에 포함된 총 항목 수를 계산합니다.
오케스트레이션이 원래 PO의 정보와 업데이트된 합계가 포함된 새 PO 문서를 만듭니다.
새 PO 문서가 \Output 디렉터리의 파일에 기록됩니다.
이 샘플이 있는 위치
<샘플 경로>\Pipelines\ArbitraryXPathPropertyHandler
다음 표는 이 샘플의 파일을 보여 주고 각각의 용도에 대해 설명합니다.
파일 | Description |
---|---|
ArbitraryXPathPropertyHandler.sln | 사용자 지정 파이프라인 구성 요소 솔루션 파일입니다. |
ArbitraryXPathPropertyHandler.resX | 리소스 파일 |
ArbitraryXPathPropertyHandlerComp.cs | 기본 구성 요소 구현입니다. |
AssemblyInfo.cs | 어셈블리 정보입니다. |
Cleanup.bat | 샘플 정리 파일입니다. |
PromotingMap.cs | 네이티브 CLR 유형 맵 구현으로서의 속성 승격입니다. |
PropertyAttributes.cs | 사용자 지정 특성, 속성 설명자 및 ICustomTypePropertyDescriptor 구현입니다. |
SchemaMap.cs | 메시지 유형에서 IDocumentSpec로의 스키마 매핑으로, 스키마 모호성을 확인하는 데 사용됩니다. |
Setup.bat | 샘플 파이프라인 구성 요소를 빌드 및 설치합니다. |
VirtualStream.cs | 가상 스트림 구현입니다. |
SeekableReadOnlyStream.cs | 찾을 수 있는 읽기 전용 스트림 구현입니다. |
ArbitraryXPathSample.sln | 샘플 오케스트레이션 솔루션 파일입니다. |
CalculateTotalAmount.odx | 샘플 오케스트레이션입니다. |
PODocument.xsd | 구매 주문 스키마입니다. |
DocInstance.xml | 샘플 구매 주문 인스턴스입니다. |
이 샘플 빌드 및 초기화
이 샘플은 동일한 컴퓨터에서 실행되는 SQL Server 있는 BizTalk Server 환경에서 실행되도록 설계되었습니다. 환경이 이 구성과 일치하지 않는 경우 올바른 SQL Server 컴퓨터를 가리키도록 임의의 XPath 속성 처리기(BizTalk Server 샘플)를 수정해야 합니다.
중요
Setup.bat는 Microsoft Windows 설치 디렉터리가 C:\Windows라고 가정합니다. Windows 설치가 다른 디렉터리에 있는 경우 전역 어셈블리 캐시에 있는 Microsoft.BizTalk.Component.Utilities 어셈블리의 위치를 나타내도록 ArbitraryXPathPropertyHandler.csproj 파일을 수정해야 합니다. Reference 요소에서 SYSTEMROOT>를 Windows가 설치된 위치(예: C:\WINNT\)로 변경<합니다.
<Reference
Name = "Microsoft.BizTalk.Component.Utilities"
AssemblyName = "Microsoft.BizTalk.Component.Utilities"
HintPath = "<SYSTEMROOT>\assembly\GAC\Microsoft.BizTalk.Component.Utilities\3.0.1.0__31bf3856ad364e35\Microsoft.BizTalk.Component.Utilities.dll"
/>
다음 절차를 사용하여 임의의 XPath 속성 처리기(BizTalk Server 샘플)를 빌드하고 초기화합니다.
이 샘플을 빌드 및 초기화하려면 다음을 수행하십시오.
명령 창에서 디렉터리(cd)를 다음 폴더로 변경합니다.
<샘플 경로>\Pipelines\ArbitraryXPathPropertyHandler
다음 작업을 수행하는 Setup.bat 파일을 실행합니다.
Arbitrary XPath Property Handler 파이프라인 구성 요소를 빌드합니다.
빌드된 파이프라인 구성 요소를 <설치 경로>\파이프라인 구성 요소 디렉터리에 복사합니다.
송신 및 수신 포트를 만듭니다.
샘플에서 사용된 입력 및 출력 디렉터리를 만듭니다.
샘플 BizTalk Server 오케스트레이션 ArbitraryXPathSample을 설치합니다.
포트를 샘플 오케스트레이션에 바인딩합니다.
오케스트레이션을 시작합니다.
참고
빌드 및 초기화하는 동안 오류가 보고되지 않아야 합니다. 오류가 발생하는 경우 필요한 모든 소프트웨어가 설치되었는지, 경로에서 Microsoft 빌드 도구를 사용할 수 있는지 확인합니다.
참고
Setup.bat 변경 내용을 실행 취소하려면 먼저 BizTalk Server 관리 콘솔에서 호스트 instance 중지하고 다시 시작해야 합니다. 다음으로, Cleanup.bat 실행합니다. Setup.bat를 두 번째로 실행하기 전에 Cleanup.bat를 실행해야 합니다.
이 샘플 실행
다음 절차에 따라 임의의 XPath 속성 처리기(BizTalk Server 샘플)를 실행합니다.
이 샘플을 실행하려면
PO(구매 주문) 파일인 DocInstance.xml을 \Input 디렉터리로 복사합니다. 수신 포트가 PO 파일을 선택하고 XML 데이터를 Arbitrary XPath Property Handler 파이프라인 구성 요소로 보냅니다.
\Output 디렉터리의 내용을 봅니다. \Input 디렉터리로 복사한 DocInstance.xml 파일의 모든 정보가 포함된 새 파일이 만들어집니다. 파일의 차이점은 이제 TotalAmount> 요소가 PO에 <대한 총 금액으로 채워져 있다는 것입니다.
의견
정식 XPath 식은 "/*[local-name()='element-name' 및 namespaceURI()=''http://MyUri.org]/*[local-name()='element-name']/@*[local-name='attribute-name']"과 같은 간단한 식입니다.
임의 XPath 식은 "//element-name//*[local-name()='element-name' and position()=2]"처럼 복잡할 수 있습니다. 사실인 경우 스키마에 XPath 본문 또는 XPath 속성에 사용되는 비 정식 XPath가 있는 경우 BizTalk Server 비 정식 XPath 식이 지원되지 않는다는 런타임 오류가 표시됩니다. 임의 XPath 식을 지원하기 위한 솔루션은 임의 XPath 본문과 임의 XPath 속성 식을 지원하는 사용자 지정 디스어셈블러 및 어셈블러 구성 요소를 만드는 것입니다.
이 샘플에서는 IComponent.Execute 가 구현될 때 사용자 지정 파이프라인 구성 요소에서 다음 단계 시퀀스를 사용합니다.
입력 메시지 본문 파트 스트림 위에 찾을 수 있는 가상 스트림을 만듭니다. 입력 메시지가 클 수 있고 스트림을 찾을 수 없는 경우가 있으므로 가상 스트림은 메모리 사용량이 적고 스트림 위치를 변경할 수 있어야 합니다.
보내는 메시지와 해당 본문 파트를 새로 만들고 새 본문 파트에 가상 스트림을 할당한 다음 본문 파트 속성을 복제하고 메시지 컨텍스트를 복제합니다.
디자인 타임에 지정된 스키마를 기준으로 입력 메시지에 대한 스키마를 가져옵니다.
스트림을System.Xml instance 로드합니다 . XmlDocument.
승격 속성과 고유 필드를 살펴보고 보내는 메시지의 메시지 컨텍스트로 승격하거나 씁니다.
보내는 메시지를 반환합니다.
보내는 메시지를 파일에 씁니다.