在我的业务流程中,我有各种步骤将平面文件映射到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 KEEPS ASKING用于msg初始化,即使在地图块中也应该输入ALREADY填充(或填充,或任何术语)的消息。 那是为什么?
编辑:我发现即使在异常处理期间未使用,BT也希望每个msg都已初始化。所以我需要构建我的自定义错误消息,它将返回空消息以及我的自定义错误消息。为了初始化它们,我当然需要以这种方式在表达式代码的开头声明:
unusedMsg.Part = new System.Xml.XmlDocument();
现在的事情是:最后一个映射(sql)的问题仍然存在:
┌──────────────────────┐
│ scope │
│ ┌────────────────┐ │
┌──────┐ │ │ MAP │ │ ┌────────┐
│ msg2 │ -►│ │ msg2 > sqlReq │ │ -► │ sqlReq │
└──────┘ │ └────────────────┘ │ └────────┘
├──────────────────────┤
│ ex │
│ ┌────────────────┐ │
│ │ construct │ │ ┌────────┐
│ │ msg2 > msgERR │ │ -► │ msgERR │
│ └────────────────┘ │ └────────┘
└──────────────────────┘
一直在问这个问题:
msg2.Part':消息部分尚未在构造语句中初始化
然而我肯定知道msg2是INITIALIZED因为我没有例外产生它并且我正在进入新的范围。 怎么可能?
答案 0 :(得分:1)
错误“消息部分尚未在构造语句中初始化”在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│ │
│ └────────────────┘ │ │ └────────────────┘ │
└──────────────────────┘ └──────────────────────┘
出现以下错误“使用未构造的消息”。
您正在尝试将消息用作范围内的源,该范围既未在范围的开头初始化,也未在范围内的构造形状之前初始化。
您正在尝试在您尝试捕获异常的范围内初始化的异常块中使用消息。
您在仅在某些范围区域中构建的范围之后使用消息。它需要在所有范围内构建。