[英]BizTalk 2013r2 - Null elements in schemas
尝试配置模式,使其始终提供每个元素,无论它是否已填充。
我已经尝试在架构中的所有元素上将 minOccurs 设置为 1 并将 nillable 设置为 true,但它仍然没有任何区别。 我已经通过传递一条消息进行了测试,其中架构中的日期元素为空,但它仍然从收到的消息中删除了该元素。
有效负载通过 WCF-SQL 类型轮询端口获取,然后将创建的消息直接发送到消息框以获取下游(该过程创建一个规范的有效负载,被多个其他下游集成接受)。
模式示例;
<xs:element minOccurs="1" name="account_id" nillable="true" type="xs:string" />
<xs:element minOccurs="1" name="hus_id" nillable="true" type="xs:string" />
<xs:element minOccurs="1" name="date_left" nillable="true" type="xs:date" />
WCF-SQL(类型化轮询)源数据示例;
account_id - '267336302'
hus_id - ''
date_left - NULL
收到的消息示例;
<account_id>267336302</account_id>
<hus_id/>
我已经查看了它背后的理论,在这篇链接文章的前两段中,暗示这些设置应该有所作为。
BizTalk Mapper:使用可空值 (xsi:nil=”true”) (Sandro 的 WordPress 博客)
任何人都可以建议我如何根据需要接收包含所有元素的消息(是否为空值)。
我无法重现您遇到的问题。
我创建了一个带有 on 元素的简单模式,它是一个可空日期。
<?xml version="1.0" encoding="utf-16"?>
<xs:schema xmlns="http://Scratch2.Schema.SO72560754" xmlns:b="http://schemas.microsoft.com/BizTalk/2003" targetNamespace="http://Scratch2.Schema.SO72560754" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Root">
<xs:complexType>
<xs:sequence>
<xs:element name="NillableDate" nillable="true" type="xs:date" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
我制作了第二个相同的模式,只是我将提交的简单命名为日期。
<?xml version="1.0" encoding="utf-16"?>
<xs:schema xmlns="http://Scratch2.Schema.SO72560754_out" xmlns:b="http://schemas.microsoft.com/BizTalk/2003" targetNamespace="http://Scratch2.Schema.SO72560754_out" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Root">
<xs:complexType>
<xs:sequence>
<xs:element name="Date" nillable="true" type="xs:date" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
并将两者映射在一起并将其部署到 BizTalk。
我通过 BizTalk 使用 XMLReceive Pipeline 和接收端口上的入站映射上的映射传递了以下消息。
<ns1:Root xmlns:ns1="http://Scratch2.Schema.SO72560754" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<NillableDate xsi:nil="true" />
</ns1:Root>
并获得了日期字段仍然存在且为 Nill 的预期输出。
<ns0:Root xmlns:ns0="http://Scratch2.Schema.SO72560754_out" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Date xsi:nil="true" />
</ns0:Root>
笔记
<Date/>
或<Date></Date>
)与空字段( <Date xsi:nil="true" />
)之间存在差异。 如果您正在执行 XML 验证,则空日期将失败。SQL
是的,使用 SQL 绑定,如果该字段为 NULL,那么它将省略该字段。 一个快速而肮脏的解决方法就是在地图中添加一些连接 functoid,如下所示,并将其连接到一个空字符串。 这将生成如下所示的 XML 有效负载。 注意:如果您尝试根据架构验证它,因为空字符串不是有效日期,这将失败,并且任何数字字段也会失败,但默认情况下,BizTalk 不会验证,除非您告诉它。
<ns0:Root xmlns:ns0="http://Scratch2.Schema.SO72560754">
<account_id>267336302 </account_id>
<hus_id/>
<date_left/>
</ns0:Root>
如果您想获得验证的 XML,那么您可以按照 Sandro 的示例进行操作,但您所要做的就是使用逻辑日期 Functoid 而不是 IsNill functoid,并相应地调整逻辑(因为它反转了真/假) .
那会产生
<ns0:Root xmlns:ns0="http://Scratch2.Schema.SO72560754" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<account_id>267336302</account_id>
<hus_id />
<date_left xsi:nil="true" />
</ns0:Root>
如果您有该类型的字段,您还希望启用nillable="true"
,您也可以使用逻辑字符串和逻辑数字 functoid。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.