다음을 통해 공유


mapsource를 사용하여 <기본 매퍼 동작 관리>

지도 원본(.btm) 파일에서 mapsource 요소의 특성을 직접 수정하여 BizTalk Mapper의 특정 기본 동작을 수정할 수 있습니다.

Value Mapping 펑토이드 코드 생성 최적화

매퍼가 값 매핑 펑토이드를 호출하는 XSLT 코드를 생성하면 변수를 사용하여 결과를 저장합니다. OptimizeValueMapping 플래그를 사용하여 값 매핑 펑토이드를 최적화하여 문이 로 평가될 때만 변수가 if 생성되도록 할 True수 있습니다. 예를 들어 OptimizeValueMapping아니요로 설정된 경우:

<xsl:variable name="var:v5" select="ScriptNS0:FormatMessage(…)" />  
<xsl:if test="string($var:v4)='true'">  
     <xsl:variable name="var:v6" select="string($var:v5)" />  
     <ns0:text>  
          <xsl:value-of select="$var:v6" />  
     </ns0:text>  
</xsl:if>  

이 코드는 값 매핑 펑토이드 호출을 문의 본문 if 으로 이동하여 호출이 필요한 경우에만 발생하도록 하여 최적화할 수 있습니다. OptimizeValueMapping예로 설정하면 다음 코드가 생성됩니다.

<xsl:if test="string($var:v4)='true'">  
     <xsl:variable name="var:v5" select="ScriptNS0:FormatMessage(…)" />  
     <xsl:variable name="var:v6" select="string($var:v5)" />  
     <ns0:text>  
          <xsl:value-of select="$var:v6" />  
     </ns0:text>  
</xsl:if>  

다음과 같이 지도 원본(.btm) 파일에 있는 mapsource 요소의 OptimizeValueMapping 특성을 예로 설정하면 매퍼가 이 최적화를 자동으로 수행합니다.

<mapsource Name="BizTalk Map" BizTalkServerMapperTool_Version="2.0" Version="2" XRange="100" YRange="420" OmitXmlDeclaration="Yes" TreatElementsAsRecords="No" OptimizeValueMapping="Yes" GenerateDefaultFixedNodes="Yes" CopyPIs="No" method="xml" xmlVersion="1.0" IgnoreNamespacesForLinks="Yes">  

규모가 큰 스키마 수용.

맵 편집기에서 구조 및/또는 재귀적 노드가 깊고 복잡하여 매우 큰 인스턴스 공간을 차지하는 스키마를 사용하는 경우 맵을 테스트하거나 맵의 유효성을 검사하거나 맵을 컴파일할 때 시간이 오래 걸릴 수 있으며, 심한 경우에는 "메모리 부족" 오류까지도 발생할 수 있습니다. 이 오류는 큰 스키마뿐만 아니라 작지만 복잡한 스키마에서도 발생할 수 있습니다.

복잡한 스키마의 문제는 매퍼가 연결된 링크가 있거나 Value 속성이 설정된 노드를 찾는 전체 스키마 트리를 재귀적으로 로드해야 하기 때문입니다. 다음과 같이 .btm 파일에서 mapsource 요소의 GenerateDefaultFixedNodes 플래그를 아니요로 설정하여 이 문제를 완화할 수 있습니다.

<mapsource Name="BizTalk Map" BizTalkServerMapperTool_Version="2.0" Version="2" XRange="100" YRange="420" OmitXmlDeclaration="Yes" TreatElementsAsRecords="No" OptimizeValueMapping="No" GenerateDefaultFixedNodes="No" CopyPIs="No" method="xml" xmlVersion="1.0" IgnoreNamespacesForLinks="Yes">  

이렇게 설정하면 맵 편집기가 대상 스키마의 각 스키마 노드에 연결된 내부 컴파일러 노드를 만들지 않아도 됩니다. 연결된 노드만 컴파일러에서 고려됩니다. 따라서 "맵 테스트" 또는 "맵 유효성 검사" 작업을 수행하거나, 맵을 컴파일하거나, 맵을 저장할 때 메모리 사용량이 많이 줄어들고 프로세스 처리 속도가 빨라집니다.

그러나 GenerateDefaultFixedNodes 플래그가 아니요로 설정된 경우 대상 스키마에 설정된 기본 필드 값은 맵에서 생성된 instance 유지되지 않습니다. 이러한 값은 대상 인스턴스의 필수 값이기 때문에 문제가 됩니다. 따라서 이러한 문제를 피하려면 필수 값을 맵에서 명시적으로 다시 설정해야 합니다. GenerateDefaultFixedNodes 플래그를RequiredDefaults로 설정할 수 있습니다. 즉, 모든 필수 노드가 고려됩니다. 여기에는 연결된 노드, 기본값이 있는 노드, MinOccurs 속성이 1보다 크거나 같은 노드, 부모가 필요한 노드가 포함됩니다.

참고

GenerateDefaultFixedNodesNo 또는 RequiredDefaults로 설정한 후에는 맵을 테스트하고 GenerateDefaultFixedNodes가 컴파일러에서 모든 노드를 고려하여 기본값인 Yes로 설정된 경우와 출력이 동일한지 확인해야 합니다.

Looping, Conditional 및 Value Mapping 펑토이드로 for-each 사용 관리

Looping 펑토이드, 조건부 펑토이드 또는 값 매핑 펑토이드 xsl:for-each 를 사용하면 컴파일된 맵에서 문이 생성됩니다. 대상 스키마의 자식 필드에 바인딩되지 않은 최대 발생이 xsl:for-each 있는 경우 문은 자식 필드에 배치됩니다. 자식 필드에 바인딩되지 않은 최대 발생이 xsl:for-each 없는 경우 문은 자식 필드의 부모 필드에 배치됩니다.

그러나 문의 위치 xsl:for-each 가 맵 결과에 영향을 주므로 자식 필드의 최대 발생 횟수를 1로 설정했는지 여부에 관계없이 문을 대상 스키마의 자식 필드에 배치할 수 있습니다xsl:for-each.

다음과 같이 map(.btm) 파일에서 TreatElementsAsRecords 특성 값을 수정하여 문의 배치 xsl:for-each 를 제어할 수 있습니다.

<mapsource Name="BizTalk Map" BizTalkServerMapperTool_Version="2.0" Version="2" XRange="100" YRange="420" OmitXmlDeclaration="Yes" TreatElementsAsRecords="No" OptimizeValueMapping="No" GenerateDefaultFixedNodes="Yes" CopyPIs="No" method="xml" xmlVersion="1.0" IgnoreNamespacesForLinks="Yes">  

이 특성을 예로xsl:for-each 설정하면 자식 필드의 최대 발생이 1로 설정되었는지 여부에 관계없이 문이 대상 스키마의 자식 필드에 배치됩니다.

반복 Sequence Group을 매핑할 때 순서 유지

XSD 스키마의 Sequence Group은 메시지 인스턴스에 표시되지 않기 때문에 반복 컨텍스트를 제공하지 않습니다. Sequence Group에서는 반복이 발생할 가능성이 없기 때문에 맵 편집기 컴파일러에서는 세그먼트 순서를 유지하기 위한 XSLT가 생성되지 않습니다. 따라서 입력 인스턴스에 있는 관련 컨텍스트가 손실되기 때문에 관련 컨텍스트에 의존하는 후속 처리를 위해 출력 인스턴스를 사용할 필요가 없어집니다.

PreserveSequenceOrder 플래그를 사용하여 반복 시퀀스를 다른 반복 시퀀스에 매핑할 때 레코드 순서를 유지할 수 있습니다. 기본적으로 플래그 값은 플래그가 없는 이전 BizTalk Server 버전에서 만든 기존 맵의 기능을 유지하기 위해 아니요로 설정됩니다. 새로 만든 맵에서 플래그는 해당 값이 아니요로 설정된 상태로 표시됩니다. 세그먼트 순서를 유지하려면 다음과 같이 .btm 파일에서 값을 명시적으로 예로 설정해야 합니다.

<mapsource Name="BizTalk Map" BizTalkServerMapperTool_Version="2.0" Version="2" XRange="100" YRange="420" OmitXmlDeclaration="Yes" TreatElementsAsRecords="No" OptimizeValueMapping="No" GenerateDefaultFixedNodes="Yes" PreserveSequenceOrder="Yes" CopyPIs="No" method="xml" xmlVersion="1.0" IgnoreNamespacesForLinks="Yes">  

다음은 샘플 입력 인스턴스입니다.

<Name>Person1</Name>  
<Gender>Male</Gender>  
<Address>Bellevue</Address>  
<Name>Person2</Name>  
<Gender>Female</Gender>  
<Address>Redmond</Address>  

PreserveSequenceOrder 플래그를 아니요로 설정하면 출력 instance 다음과 같이 표시됩니다.

<Name>Person1</Name>  
<Name>Person2</Name>  
<Gender>Male</Gender>  
<Gender>Female</Gender>  
<Address>Bellevue</Address>  
<Address>Redmond</Address>  

PreserveSequenceOrder 플래그를 예로 설정하면 출력 instance 다음과 같이 표시됩니다.

<Name>Person1</Name>  
<Gender>Male</Gender>  
<Address>Bellevue</Address>  
<Name>Person2</Name>  
<Gender>Female</Gender>  
<Address>Redmond</Address>  

참고 항목

BizTalk 맵 편집기를 사용하여 맵 만들기