BizTalk 不断要求初始化已初始化的消息
BizTalk keeps asking for initialization of ALREADY initialized messages
在我的编排中,我有多个步骤将一个平面文件映射到 2 个中间消息并最终写入 SQL。首先,我在没有异常处理的情况下完成了它,并且它使用了有效的输入文件。
msg0 msg1 msg2
┌──────┐ ┌─────┐ ┌───────┐ ┌───────┐ ┌─────┐
│ PIPE │-►│ RCV │-►│ MAP_1 │-►│ MAP_2 │-►│ SQL │
└──────┘ └─────┘ └───────┘ └───────┘ └─────┘
现在我正在尝试获取我使用地图的每个范围的例外情况。
在编排的开始,在第一个 Receive Shape 之后,我放置了一个 Construct Message Shape 来初始化编排中的所有消息。
我创建了 catch 块(每个都为我的 fault_msg 及其发送形状创建了 Construct 形状)、FILE 端口和构建。
msg0 msg1 msg2
┌──────┐ ┌─────┐ ┌──────┬──┐ ┌───────┬──┐ ┌───────┬──┐ ┌─────┬──┐
│ PIPE │-►│ RCV │-►│ INIT │ex│-►│ MAP_1 │ex│-►│ MAP_2 │ex│-►│ SQL │ex│
└──────┘ └─────┘ └──────┴──┘ └───────┴──┘ └───────┴──┘ └─────┴──┘
VS 一直要求进行消息初始化,即使在应该输入的消息的映射块中也已填充(或填充,或任何术语)。
这是为什么?
编辑:我发现 BT 希望每个消息都初始化,即使在异常处理期间未使用。所以我需要构建我的自定义故障消息,它将 return 空消息与我的自定义故障消息一起。为了初始化它们,我当然需要在表达式代码的开头这样声明:
unusedMsg.Part = new System.Xml.XmlDocument();
现在的情况:上次映射(sql)的问题仍然存在:
┌──────────────────────┐
│ scope │
│ ┌────────────────┐ │
┌──────┐ │ │ MAP │ │ ┌────────┐
│ msg2 │ -►│ │ msg2 > sqlReq │ │ -► │ sqlReq │
└──────┘ │ └────────────────┘ │ └────────┘
├──────────────────────┤
│ ex │
│ ┌────────────────┐ │
│ │ construct │ │ ┌────────┐
│ │ msg2 > msgERR │ │ -► │ msgERR │
│ └────────────────┘ │ └────────┘
└──────────────────────┘
它一直在问这个问题的地方:
msg2.Part': message part has not been initialized in construct statement
但我确定 msg2 已初始化,因为我没有例外地生成它并且我正在进入新范围。
这怎么可能?
错误"message part has not been initialized in construct statement"在BizTalk
中出现在以下情况
您的构造形状正在构造与源消息之一相同的消息。
例如,在下面,您需要从构建的消息中删除 msg2。
CORRECT WRONG
┌──────────────────────┐ ┌──────────────────────┐
│ CONSTRUCT MESSAGE │ │ CONSTRUCT MESSAGE │
│ messages constructed │ │ messages constructed │
│ sqlReq │ │ sqlReq, msg2 │
│ ┌────────────────┐ │ │ ┌────────────────┐ │
│ │ MAP │ │ │ │ MAP │ │
│ │ msg2 > sqlReq │ │ │ │ msg2 > sqlReq │ │
│ └────────────────┘ │ │ └────────────────┘ │
└──────────────────────┘ └──────────────────────┘
您正在构建构造形状中的多条消息,但稍后的消息取决于您在构造中初始化另一条缺少的消息。
CORRECT WRONG
┌──────────────────────┐ ┌──────────────────────┐
│ Construct │ │ Construct │
│ messages constructed │ │ messages constructed │
│ sqlReq, sqlReq2 │ │ sqlReq, sqlReq2 │
│ ┌────────────────┐ │ │ │
│ │ MAP │ │ │ │
│ │ msg2 > sqlReq │ │ │ │
│ └────────────────┘ │ │ │
│ ┌────────────────┐ │ │ ┌────────────────┐ │
│ │ MAP │ │ │ │ MAP │ │
│ │sqlReq > sqlReq2│ │ │ │sqlReq > sqlReq2│ │
│ └────────────────┘ │ │ └────────────────┘ │
└──────────────────────┘ └──────────────────────┘
出现以下错误 "use of unconstructed message"。
您正在尝试将消息用作范围内的源,该消息既未在范围开始时初始化,也未在范围内的构造形状之前初始化。
您正在尝试在异常块中使用一条消息,该消息是在您尝试为其捕获异常的范围内初始化的。
您在仅在某些范围区域中构造的范围之后使用消息。需要在所有scope区域进行构建
在我的编排中,我有多个步骤将一个平面文件映射到 2 个中间消息并最终写入 SQL。首先,我在没有异常处理的情况下完成了它,并且它使用了有效的输入文件。
msg0 msg1 msg2
┌──────┐ ┌─────┐ ┌───────┐ ┌───────┐ ┌─────┐
│ PIPE │-►│ RCV │-►│ MAP_1 │-►│ MAP_2 │-►│ SQL │
└──────┘ └─────┘ └───────┘ └───────┘ └─────┘
现在我正在尝试获取我使用地图的每个范围的例外情况。 在编排的开始,在第一个 Receive Shape 之后,我放置了一个 Construct Message Shape 来初始化编排中的所有消息。 我创建了 catch 块(每个都为我的 fault_msg 及其发送形状创建了 Construct 形状)、FILE 端口和构建。
msg0 msg1 msg2
┌──────┐ ┌─────┐ ┌──────┬──┐ ┌───────┬──┐ ┌───────┬──┐ ┌─────┬──┐
│ PIPE │-►│ RCV │-►│ INIT │ex│-►│ MAP_1 │ex│-►│ MAP_2 │ex│-►│ SQL │ex│
└──────┘ └─────┘ └──────┴──┘ └───────┴──┘ └───────┴──┘ └─────┴──┘
VS 一直要求进行消息初始化,即使在应该输入的消息的映射块中也已填充(或填充,或任何术语)。 这是为什么?
编辑:我发现 BT 希望每个消息都初始化,即使在异常处理期间未使用。所以我需要构建我的自定义故障消息,它将 return 空消息与我的自定义故障消息一起。为了初始化它们,我当然需要在表达式代码的开头这样声明:
unusedMsg.Part = new System.Xml.XmlDocument();
现在的情况:上次映射(sql)的问题仍然存在:
┌──────────────────────┐
│ scope │
│ ┌────────────────┐ │
┌──────┐ │ │ MAP │ │ ┌────────┐
│ msg2 │ -►│ │ msg2 > sqlReq │ │ -► │ sqlReq │
└──────┘ │ └────────────────┘ │ └────────┘
├──────────────────────┤
│ ex │
│ ┌────────────────┐ │
│ │ construct │ │ ┌────────┐
│ │ msg2 > msgERR │ │ -► │ msgERR │
│ └────────────────┘ │ └────────┘
└──────────────────────┘
它一直在问这个问题的地方:
msg2.Part': message part has not been initialized in construct statement
但我确定 msg2 已初始化,因为我没有例外地生成它并且我正在进入新范围。 这怎么可能?
错误"message part has not been initialized in construct statement"在BizTalk
中出现在以下情况您的构造形状正在构造与源消息之一相同的消息。 例如,在下面,您需要从构建的消息中删除 msg2。
CORRECT WRONG ┌──────────────────────┐ ┌──────────────────────┐ │ CONSTRUCT MESSAGE │ │ CONSTRUCT MESSAGE │ │ messages constructed │ │ messages constructed │ │ sqlReq │ │ sqlReq, msg2 │ │ ┌────────────────┐ │ │ ┌────────────────┐ │ │ │ MAP │ │ │ │ MAP │ │ │ │ msg2 > sqlReq │ │ │ │ msg2 > sqlReq │ │ │ └────────────────┘ │ │ └────────────────┘ │ └──────────────────────┘ └──────────────────────┘
您正在构建构造形状中的多条消息,但稍后的消息取决于您在构造中初始化另一条缺少的消息。
CORRECT WRONG ┌──────────────────────┐ ┌──────────────────────┐ │ Construct │ │ Construct │ │ messages constructed │ │ messages constructed │ │ sqlReq, sqlReq2 │ │ sqlReq, sqlReq2 │ │ ┌────────────────┐ │ │ │ │ │ MAP │ │ │ │ │ │ msg2 > sqlReq │ │ │ │ │ └────────────────┘ │ │ │ │ ┌────────────────┐ │ │ ┌────────────────┐ │ │ │ MAP │ │ │ │ MAP │ │ │ │sqlReq > sqlReq2│ │ │ │sqlReq > sqlReq2│ │ │ └────────────────┘ │ │ └────────────────┘ │ └──────────────────────┘ └──────────────────────┘
出现以下错误 "use of unconstructed message"。
您正在尝试将消息用作范围内的源,该消息既未在范围开始时初始化,也未在范围内的构造形状之前初始化。
您正在尝试在异常块中使用一条消息,该消息是在您尝试为其捕获异常的范围内初始化的。
您在仅在某些范围区域中构造的范围之后使用消息。需要在所有scope区域进行构建