整个下午,我正在学习 BizTalk 并被困在这个问题上。
有一个带有电话或地址的选择组。我可以在输出电话时得到一些地址字段被抑制。为了简单起见,我将只讨论“CityName”字段。
我尝试了以下方法:
将输入文件中的“City”(文本)节点映射到输出中的“CityName”。将Exists逻辑 functoid连接到输入节点中的“Address1”节点和输出中的“CityName”。我总是得到一个带有文字的城市名称。
将输入文件中的“City”节点和Exists逻辑 functoid 映射到Value Mapper functoid。将Value Mapper functoid连接到输出中的 CityName。我在地址节点(正确)中得到一个城市名称,在电话节点中得到一个空节点(不正确)。
将输入文件中的“City”节点和 Exists 逻辑 functoid 映射到Value Mapper (Flattening) functoid。将值映射器(扁平化) functoid 连接到输出中的 CityName。我在地址节点(正确)中得到一个城市名称,在电话节点中得到一个空节点(不正确)。
我认为最后两个中的一个应该可以工作,但两者都给出了一个空节点而不是一个抑制节点。空节点没有属性。
CityName 节点由以下模式类型描述:
<xsd:complexType name="NameType">
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute name="languageID" type="xsd:language" use="optional">
</xsd:attribute>
<xsd:attribute name="sequence" type="IntegerNumericType">
</xsd:attribute>
<xsd:attribute name="sequenceName" type="StringType" />
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
<xsd:simpleType name="IntegerNumericType">
<xsd:restriction base="xsd:integer" />
</xsd:simpleType>
<xsd:simpleType name="StringType">
<xsd:restriction base="xsd:string" />
</xsd:simpleType>
类型定义中是否存在强制创建空节点的内容?
谢谢
编辑:下面是不正确的输出。第二个和第三个通信节点有一个地址子节点,不应该。
我在电话号码和平面输入模式中的第一个地址行上有一个循环 functoid 。这产生了三个通信节点。我在地址线上使用逻辑存在函数来抑制第一个节点中的电话信息。我在输出模式中直接与 Address 节点绑定的输出上有一个Logical Not functoid。我认为这应该关闭整个地址节点,但事实并非如此。
我尝试将连接到逻辑存在 functoid 的值映射functoid 添加到城市名称和邮政编码元素,这使它们为空,但它们不会消失。啊!
我检查了这些字段都设置为零 MinOccurs 并且我不相信它们被分配了默认值。
<ns0:Communication>
<ns0:Address>
<ns0:AddressLine sequence="1">1234 My St</ns0:AddressLine>
<ns0:AddressLine sequence="2">Apt. 2</ns0:AddressLine>
<ns0:CityName>Kansas City</ns0:CityName>
<ns0:CountrySubDivisionCode name="State">MO</ns0:CountrySubDivisionCode>
<ns0:CountrySubDivisionCode name="County">Jackson</ns0:CountrySubDivisionCode>
<ns0:CountryCode>US</ns0:CountryCode>
<ns0:PostalCode>64099</ns0:PostalCode>
</ns0:Address>
</ns0:Communication>
<ns0:Communication sequence="1">
<ns0:ChannelCode>Telephone</ns0:ChannelCode>
<ns0:UseCode>Personal</ns0:UseCode>
<ns0:DialNumber>1234567890</ns0:DialNumber>
<ns0:Address>
<ns0:CityName />
<ns0:CountryCode />
<ns0:PostalCode>64099</ns0:PostalCode>
</ns0:Address>
</ns0:Communication>
<ns0:Communication sequence="2">
<ns0:ChannelCode>Telephone</ns0:ChannelCode>
<ns0:UseCode>Business</ns0:UseCode>
<ns0:DialNumber>0987654321</ns0:DialNumber>
<ns0:Address>
<ns0:CityName />
<ns0:CountryCode />
<ns0:PostalCode>64099</ns0:PostalCode>
</ns0:Address>
</ns0:Communication>