在我的编排中,我有多个步骤将平面文件映射到 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 for msg 初始化,即使在地图块中,应该输入已经填充(或填充,或任何术语)的消息。这是为什么?
编辑:我发现BT希望每个味精都被初始化,即使在异常处理期间不使用也是如此。所以我需要构建我的自定义错误消息,它将与我的自定义错误消息一起返回空消息。当然,为了初始化它们,我需要以这种方式在表达式代码的开头声明:
unusedMsg.Part = new System.Xml.XmlDocument();
现在的事情是:最后一个映射(sql)的问题仍然存在:
┌──────────────────────┐
│ scope │
│ ┌────────────────┐ │
┌──────┐ │ │ MAP │ │ ┌────────┐
│ msg2 │ -►│ │ msg2 > sqlReq │ │ -► │ sqlReq │
└──────┘ │ └────────────────┘ │ └────────┘
├──────────────────────┤
│ ex │
│ ┌────────────────┐ │
│ │ construct │ │ ┌────────┐
│ │ msg2 > msgERR │ │ -► │ msgERR │
│ └────────────────┘ │ └────────┘
└──────────────────────┘
它一直在问这个:
msg2.Part':消息部分尚未在构造语句中初始化
但我确定 msg2 已初始化,因为我没有例外地生成它,并且我正在进入新的范围。 这怎么可能?