如何在运行时动态选择管道中的XSD?

时间:2012-04-23 11:56:43

标签: biztalk pipeline biztalk-2010

我有一个要求,我在哪里接收txt格式的基于位置的数据。

记录的前2个字符可帮助我识别消息类型。

不,我有40多种消息类型,所以根据我需要在接收管道中选择xsd的消息类型。

在运行期间动态地在管道中拾取xsd的最佳方法是什么?

4 个答案:

答案 0 :(得分:1)

简答

您所追求的是创建一个自定义flat file disassembler组件,它承载内置平面文件组件的一个实例,但也实现了IProbeMessage接口。

此接口允许BizTalk运行时在接收管道的Disassemble阶段中的多个组件之间进行选择。

您可以使用此自定义管道的多个版本,每个版本对应一个可用的平面文件.XSD架构,

不幸的是,这种解决方案很快就会成为维护噩梦和性能问题。因此,我建议更进一步,构建一个动态选择要使用的平面文件架构的组件。

为此,您需要构建一个插件系统来驱动IProbeMessage实现。您的plug'in的每个实例都将配置为返回正确的平面文件.XSD架构并检查接收消息的输入流是否格式匹配(可能基于前几个起始字节)。然后,您的自定义管道组件将其IProbeMessage实现委托给各种插件,直到识别出消息并返回平面文件.XSD架构。

长答案

我可以在这里重现一个很长的答案,但请看一下我在my blog上写的以下系列文章。这些帖子将引导您完成自定义平面文件反汇编程序组件的实现,该组件使用上面描述的确切技术动态解析在运行时使用的平面文件.XSD架构。

请从这里开始:

答案 1 :(得分:0)

根据您的问题,我将以一种方式构建您的模式,以便在每条记录中利用标记标识符,以便根据您提到的前两个字符使用记录模式。您的主模式可能包含所有记录类型模式变体。看看herehere

答案 2 :(得分:0)

有一个名为tag identifier的属性,但我怀疑它适用于你的场景。我要做的是我将在管道组件(反汇编阶段)中的某个地方(数据库或BRE)保持消息类型映射表戳戳记录的前2个字符,识别记录类型然后动态调用FF反汇编程序来反汇编消息。

答案 3 :(得分:0)

你可以做很多事。

在平面文件架构向导中使用标记标识符。定义两个字符字段,设置类型,并定义所有40种类型的消息结构。标签标识符将为您排序。

您可以将其作为多部分/封套消息进行处理。第一部分是两个字符的标识符(消息类型),另一个是消息的其余部分。使用平面文件管道将输入转换为消息。确保您宣传标记字段。然后,您可以使用带标记的第一个消息部分为每种类型选择正确的映射。如果您希望更改消息类型,那将会更好。