0

我有一个这样的输入 xml 文件:

<root>
   <item ...>
   <item ...>
   <item ...>
</root>

我需要在同一个编排中以 2 种方式构建和发送消息: 1. 作为每个项目的 1 个 xml 文件发送到一个目的地 2. 将整个“项目”作为一个单独的 csv 平面文件发送。

我的文件实际上是由从信封中提取每个“项目”的管道处理的。问题是我需要根据特定条件合并所有“项目”。

任何想法如何实现这一目标?

4

1 回答 1

1

似乎至少有两种方法可以解决这个问题 - 不清楚你如何“到达”输入 xml 文件批处理 - 这将推动决定,IMO。

  1. 由于您似乎在一开始就已经在一个 xml 批处理中获得了所有消息,所以这应该很容易。在管道中对它们进行分批之前,您需要确保将此批消息 ( root...) 发布到消息框(如果尚未发布)(即直接绑定,如果消息尚未来自消息框)。

    然后,您可以为 CSV 文件创建一个映射,该映射将根消息作为输入,然后过滤掉itemCSV 中不需要的 s。要在 Map 中进行过滤,您可以使用带有 conditionals 的循环 functoid,或者我的偏好只是在 xslt 中实现 map,然后使用itemxpath 过滤器将模板应用于所需的 s。订阅 FILE 发送端口,过滤 (BTS.MessageType) 到传入的 xml 批处理消息,然后可以应用此映射。

    然后,您的分批管道将处理各个 xml 文件,然后另一个订阅物理文件发送端口可以将它们写出。

    2. 或者,如果为时已晚并且rootxml 文件已被分批(并且您无法访问原始 Xml 文件 FWR),您将需要使用另一个 orch 重新组合 CSV 所需的消息(分散和收集)。这将更加复杂,因为您可能需要关联消息(例如在某些批次标识符上),或应用计时器等。

    查看Pipeline Aggregator示例,了解如何使用循环将“理想的”CSV 消息收集到Microsoft.XLANGs.Pipeline.SendPipelineInputMessages变量中,然后使用管道组装批次。如果已经在单个项目消息上提升了“理想”的标准,那么您可以在接收中应用过滤器,但如果没有,您将需要在循环中使用决策来确定是否将消息添加到批次。

于 2013-02-05T10:38:59.173 回答