0

我的任务是映射一个输入 xml(实际上是一个 SAP idoc xml),并生成一些平面文件。每个输入 xml 可能会产生多个输出文件(每个批号一个输出文件),因此我将根据批号在我的映射中使用 xsl:key 和 key() 函数

问题是,批号本身不会在文件本身中,但输出文件名需要包含该批号值。

所以问题真的是:我可以将批号映射到 xml 并让平面文件汇编器在生成文件时跳过它吗?还是有另一种方法可以将批号作为文件名由程序集应用,而无需将其包含在文件本身中?

4

2 回答 2

2

在您的编排中,您可以为每个输出消息设置上下文属性:

msgOutput(FILE.ReceivedFileName) = "DynamicStuff";

msgOutput 然后转到发送形状。在您的发送端口中,您可以像这样设置输出文件:

FixedStuff_%SourceFileName%.xml

结果:

FixedStuff_DynamicStuff.xml
于 2018-10-22T20:33:36.403 回答
1
  1. 如果消息内容中不需要该值,则不要映射它。而已。
  2. 要在文件名中插入值,在这种情况下为批号,您需要将该值提升到 FILE.ReceivedFileName 上下文属性。然后,您可以使用 %SourceFileName% 宏作为发送端口中名称设置的一部分。您可以在 Orchestration 中通过 Property Promotion 或 xpath() 设置 FILE.ReceivedFileName。

奖励: xslt 中的排序和分组相当笨拙,这就是我不再这样做的原因。相反,您可以使用 SQL:BizTalk:在 SQL 而不是 XSL 中对平面文件数据进行排序和分组

于 2018-10-18T15:42:09.893 回答