Looping 펑토이드
Looping 펑토이드는 원본 스키마의 여러 레코드 또는 필드를 대상 스키마의 단일 레코드로 결합합니다.
다음 그림에서는 두 개의 서로 다른 설문 조사에서 수집된 주소를 단일 master 주소 목록으로 결합하기 위해 맵에 사용되는 Looping펑토이드를 보여 줍니다.
참고
Looping 및 Value Mapping(Flattening) 펑토이드는 함께 사용하면 안 됩니다. 두 펑토이드를 함께 사용할 경우 Looping 펑토이드 아래에 있는 대상 노드에 소스 반복 종속성이 없다는 가정 하에 맵이 컴파일됩니다.
원본 스키마의 FoodSurvey 및 FlowerSurvey 루핑 레코드는 대상 스키마의 반복 주소 레코드에 매핑됩니다. 입력 instance 메시지에 FoodSurvey 레코드 3개와 FlowerSurvey 레코드 2개가 있는 경우 Looping펑토이드는 이러한 레코드를 결합하여 출력 instance 메시지에 5개의 주소 레코드를 만듭니다.
다음 코드는 샘플 입력 인스턴스 메시지입니다.
<ns0:Surveys xmlns:ns0="http://LoopingFunctoid.Surveys">
<FoodSurvey Name="Karin Zimprich" Address="345 N 63rd St" City="Boston" State="MA" PostalCode="07485" />
<FoodSurvey Name="Wendy Wheeler" Address="7890 Broadway" City="Columbus" State="OH" PostalCode="46290" />
<FoodSurvey Name="Florian Voss" Address="1234 Main St" City="Denver" State="CO" PostalCode="97402" />
<FlowerSurvey Name="Kelly Focht" Address="456 1st Ave" City="Miami" State="FL" PostalCode="81406" />
<FlowerSurvey Name="Jim Kim" Address="567 2nd Ave" City="Seattle" State="WA" PostalCode="98103" />
</ns0:Surveys>
위 그림의 맵에서 이 입력 인스턴스 메시지를 처리하면 다음과 같은 출력 인스턴스 메시지가 생성됩니다.
<ns0:MasterAddresses xmlns:ns0="http://LoopingFunctoid.MasterAddresses">
<Address Name="Karin Zimprich" Street="345 N 63rd St" City="Boston" State="MA" PostalCode="07458"/>
<Address Name="Wendy Wheeler" Street="7890 Broadway" City="Columbus" State="OH" PostalCode="46290"/>
<Address Name="Florian Voss" Street="1234 Main St" City="Denver" State="CO" PostalCode="97402"/>
<Address Name="Kelly Focht" Street="456 1st Ave" City="Miami" State="FL" PostalCode="81406"/>
<Address Name="Jim Kim" Street="567 2nd Ave" City="Seattle" State="WA" PostalCode="98103"/>
</ns0:MasterAddresses>
FoodSurvey 및 FlowerSurvey 메시지 주소가 결합되었습니다. 결합된 메시지에 각 주소의 소스가 표시되지 않습니다. 원본을 추적하려면 MasterAddress 스키마의 Address 레코드에 Source 특성을 추가하고 상수 값을 매핑합니다. 이 값을 설정하려면 FoodSurvey 필드를 새 원본 필드에 연결합니다. 커넥터 줄에서 링크 속성 | 컴파일러 | 원본 링크 속성을 "이름 복사"로 수정합니다. FlowerSurvey 필드에 대해 이 프로세스를 반복합니다. 위에서 입력 메시지를 다시 처리하면 다음과 같은 출력이 생성됩니다.
<ns0:MasterAddresses xmlns:ns0="http://LoopingFunctoid.MasterAddresses">
<Address Name="Karin Zimprich" Street="345 N 63rd St" City="Boston" State="MA" PostalCode="07458" Source="FoodSurvey"/>
<Address Name="Wendy Wheeler" Street="7890 Broadway" City="Columbus" State="OH" PostalCode="46290" Source="FoodSurvey"/>
<Address Name="Florian Voss" Street="1234 Main St" City="Denver" State="CO" PostalCode="97402" Source="FoodSurvey"/>
<Address Name="Kelly Focht" Street="456 1st Ave" City="Miami" State="FL" PostalCode="81406" Source="FlowerSurvey"/>
<Address Name="Jim Kim" Street="567 2nd Ave" City="Seattle" State="WA" PostalCode="98103" Source="FlowerSurvey"/>
</ns0:MasterAddresses>
노드 간의 관계는 루핑 펑토이드의 동작에 영향을 줍니다. 예를 들어 원본 스키마의 자식 노드와 해당 부모를 Looping 펑토이드에 연결하면 대상 노드가 만들어지는 것을 방지할 수 있습니다.
또한 펑토이드는 소스 노드 간 관계의 영향을 받습니다. Looping 펑토이드의 원본 노드에 있는 형제가 아닌 자식 필드에 펑토이드를 연결하면 예기치 않은 결과가 발생할 수 있습니다. 예를 들어 String Concatenate 펑토이드를 사용하여 FoodSurvey 이름 필드와 FlowerSurvey 주소 필드를 MasterAddress의 주소 이름 필드에 결합하면 다음과 같은 출력 instance 메시지가 생성됩니다.
<ns0:MasterAddresses xmlns:ns0="http://LoopingFunctoid.MasterAddresses">
<Address Street="345 N 63rd St" City="Boston" State="MA" PostalCode="07458"/>
<Address Street="7890 Broadway" City="Columbus" State="OH" PostalCode="46290"/>
<Address Street="1234 Main St" City="Denver" State="CO" PostalCode="97402"/>
<Address Name="Kelly Focht" Street="456 1st Ave" City="Miami" State="FL" PostalCode="81406"/>
<Address Name="Jim Kim" Street="567 2nd Ave" City="Seattle" State="WA" PostalCode="98103"/>
</ns0:MasterAddresses>
FoodSurvey 원본 메시지에 대한 이름 필드가 누락되었지만 FlowerSurvey 원본 메시지에는 어떻게 표시되는지 확인합니다.
중요
펑토이드를 Looping 펑토이드의 원본 노드의 자식 필드에 연결하면 원본 노드가 형제 노드가 아닌 경우 예기치 않은 결과가 발생할 수 있습니다.
Looping 펑토이드는 조건부 루프를 만들고 스키마를 카탈로그에 매핑하는 데 사용할 수 있는 강력한 구문입니다. 겹치는 루핑 펑토이드 경로의 일부 효과도 고려해야 합니다.
UI 지침 및 개발자 API 네임스페이스 참조의 테이블 루핑 펑토이드 참조