BizTalk 映射 - 第 I 部分






1.67/5 (5投票s)
2007年9月17日
11分钟阅读

59295
本文讨论了有助于 BizTalk Server 中映射的函数。
BIZTALK 中的映射
引言
互联网上有很多文章描述或概述了 BizTalk 中的映射功能。但今天在这篇文章中,我们将深入了解更多使我们的文档映射能够满足我们需求的功能。
BizTalk 作为一款 Windows Server 产品,能够集成特定系统架构中的异构系统。该服务器产品的一个重要特性是广泛支持 XSLT。BizTalk Mapper 是一个图形化工具,它有助于在任意数量的、不同系统(或)实体之间的模式之间转换数据格式。映射还包含业务逻辑,以支持目标系统所需的数据转换。
可以通过编写自定义 .NET 组件、使用外部样式表来完成转换工作、使用 C# 内联代码进行代码驱动的解决方案,或者在编排中执行消息分配并将其驱动到映射中来实现转换。
更准确地说,我们可以使用规则引擎来建立通用的业务逻辑转换。这些规则应部署在集成中心,而不是编码在每个终端系统中。这样做可以简化我们的更新过程。无需自定义系统以适应其他系统所需的格式。集成层将处理所有复杂的映射过程。
本文旨在关注映射的主要和高级概念。初学者需要阅读相应的入门文章,以便熟悉映射过程。映射工具随 BizTalk Server 产品提供,而 BizTalk 的文档是一个不错的起点。
函数组合
字符串提取函数组合
这些函数组合用于从输入文档模式中提取一定数量的常量字符串,并将其映射到目标模式。例如,如果我们想提取字符串的前五个字母,我们可以使用字符串左函数,通过简单地将其拖放到左输入端来指定源,并指定要提取的字符串数量。字符串值的计数从 0 开始。例如,要提取 2 个字母,请指定 0-1。
此函数组合可以与字符串连接函数组合一起使用。检索字符串数量的任何更改都会造成瓶颈。必须重新编译映射。
批量复制函数组合
在许多情况下,源文档中可能出现的字段及其与目标文档的映射是动态的。为了在模式中创建或添加字段,应该怎么做?使用模式中的关键字“<ANY>”来实现此目的。这说起来容易做起来难。包含“<ANY>”元素的模式不能 100% 验证。模式的验证是通过命名空间和根节点组合进行的,并且定义了“<ANY>”元素后,可能很难提前知道字段的出现顺序。为了获得精细验证,请在管道中使用验证。
从“高级”选项卡中拖动“批量复制”函数组合并将其放置在映射中。定义已知字段的顺序后,创建带有“<ANY>”标签的字段。当带有“<ANY>”元素的模式经过验证时,它们将被视为成功。如果此模式映射到另一个包含“<ANY>”元素的模式,则必须使用“批量复制”函数组合。“批量复制”函数组合只能在节点级别执行,不能在字段级别执行。因此,必须映射包含“<ANY>”字段的节点。
数据库查找函数组合
使用此函数组合从数据库中检索信息。获取第一个匹配的结果行。为了获取匹配我们标准的行,请使用循环函数组合。数据库函数组合使用四个参数。
参数 1:标识将用于搜索字段的字段。这是将出现在 SQL WHERE 子句中的字符串。将其连接到数据库查找函数组合的左侧。
参数 2:提供连接字符串的值,如服务器名称、数据库名称、安全性。请记住,如果您的 SQL Server 配置为受信任连接,那么您的 BizTalk 主机必须是此受信任连接的成员之一,否则连接将被拒绝。
参数 3:指定应从中获取数据的表(搜索之后)。
参数 4:指定搜索的列。如果指定的列最终产生多个结果集,则建议使用组合键。在用作查询搜索条件之前,应先连接两个键值。
我们在数据库查找函数组合中指定的查询将被转换为动态 SQL。在连接出现任何问题时,使用“错误返回”函数组合进行显示非常重要。
应使用“值提取器”函数组合将查询获得的值连接到目标模式。为了方便起见,建议使“值提取器”函数名称与搜索字段的名称相同。
循环函数组合
当映射的源端存在重复数据结构时,就会使用此函数组合。这些重复结构被合并并映射到单个目标结构。将重复结构连接到函数组合的左侧,并将目标节点连接到右侧。此函数组合的功能类似于我们编程语言中的“For...Each”语句。例如,一个人可以通过公司网站和供应商网站订购产品。为了遍历销售额,我们可以使用此函数组合来合并销售额并将其映射到我们目标模式中的总销售额。您可以使用逻辑函数组合执行自定义合并。
逻辑函数组合接受两个参数,其中一个参数应为 true,另一个参数是我们需要的评估值。例如,我们可以使用此函数组合通过嵌入逻辑“销售额 > 20000”来查找最高销售额。
迭代函数组合
如果我们想遍历重复结构或执行基于特定字段或值出现次数的业务逻辑函数,我们可以使用迭代函数组合。
例如,如果我们想找到重复源记录的记录计数,请将重复记录连接到记录计数函数组合的左侧。结果将是重复源记录的计数。您可以将其与决策逻辑函数组合结合使用以进行进一步筛选。
自定义函数组合
您可以创建自己的函数组合,而不是在每个形状中粘贴内联代码。创建 C# 新库项目。您需要引用 Microsoft.BizTalk.BaseFunctoids.dll 来编写自己的新函数组合。我们必须使用资源文件 (resX) 来存储函数组合的配置参数。对函数组合应表现出的功能进行编码。您需要使用第三方工具来附加图像。
您需要在自定义代码逻辑中描述和提及的四个主要属性是:
1. SetName
2. SetDescription
3. SetToolTip
4. SetBitmap
这 4 个参数是强制设置。如果您引用外部程序集,则必须设置 SetExternalFunction 属性。
只有通过此设置,您的 BizTalk 才能知道在哪里找到实现映射过程的定义。您的实现通过程序集、类、函数名称来识别。您的自定义函数组合必须复制到 GAC。您还可以设置函数组合所需的最小输入和最大参数。
日期和时间函数组合
大多数依赖于时间的关键业务功能都需要一个字段来描述所执行操作的时间。例如,银行应用程序中的每一笔交易,无论成功还是失败,都需要记录操作的时间。日期函数与目标字段结合使用并映射到目标字段。此函数组合在批处理中非常有用。我们还可以找出距离操作发生的天数。您可以使用 Add Days 来仅生成日期值而不带时间。
实现 If-Then-Else 功能
要实现编程语言的 If-Then-Else 功能,请使用组中的任何所需逻辑函数,并将其与值提取器函数组合一起使用。建立与值提取器函数组合和逻辑函数组合的连接。需要检查条件的字段已连接到值提取器函数组合。值提取器函数组合定义了当逻辑条件评估为 true 时需要执行的操作。例如,如果我们想根据逻辑条件评估将值映射到不同的目标节点,则可以使用此函数组合。
指向逻辑条件的链接定义了映射将作用于哪些信息。值映射函数组合的顺序在确定结果方面起着至关重要的作用。有时顺序可能会混乱。必须访问“配置函数组合输入”窗口来检查评估顺序。应在此处更正任何顺序更改。
值映射函数组合。
值映射函数组合(展平)和值映射函数组合是两种可用形式。这两种函数组合会根据逻辑条件评估为 true 或 false,在目标中为源中的每个记录创建新记录。对于 true 评估将创建新记录,对于 false 评估则不创建记录。
这两种函数组合之间的区别在于它们如何映射到目标。如果传入字段的值无法映射,则值映射函数组合会创建一个空的目标节点,而值映射函数组合(展平)则不会创建空节点。可以使用其他函数组合和脚本来更改值映射函数组合的这种默认行为。
脚本函数组合
外部程序集
您可以使用脚本函数组合来执行多项功能。它可以调用外部程序集,可以映射到外部 XSLT 文件,也可以让您编写 C# 内联代码等。要链接外部程序集,请转到其属性窗口,从下拉列表中选择“脚本类型”为“外部程序集”。链接到您自定义实现中的程序集、类、函数。请确保在编译和使用映射之前,外部程序集需要存在于 GAC 中,否则将引发错误。
内联 C# 代码
您可以使用内联脚本缓冲区来指定内联代码。请注意,这种嵌入功能会造成维护瓶颈。每个方法变量都应该是唯一的,因为它们被映射到映射的 CDATA标签中。您无法调试内联的代码。因此,在嵌入它们之前,请在 Visual Studio 中进行测试,然后将其导入内联脚本缓冲区。这可以解决许多混淆问题。
将编排变量传递给 MAP
创建包含捕获编排信息的字段的消息模式。这些字段需要被提升或区分,以便它们可以提供给上下文消息。只有具有上下文消息的消息才能被映射。
创建并将编排消息链接到此模式
在编排中定义一个实例化上下文消息的编排变量。此变量应为 System.Xml.XmlDocument 类型。
在编排设计器中拖动一个消息赋值形状,并在构造消息中将 MapContextMsg 指定为唯一构造的消息。
打开表达式编辑器,将确认 ContextMessage 的 XML 字符串加载到 XmlDocMsgBuilder 变量中。然后将此 Xml 变量分配给 MapContextMsg。
一旦实例化,它们就可以在编排中的任何位置使用。
一旦上下文消息可用,就需要执行映射以映射源或目标。
现在拖动“转换”形状,通过双击打开对话框。将 MapContextMsg 指定为源消息,并包含任何其他可用消息。指定目标消息。
之所以使用这些步骤,是因为映射器不能直接从编排中访问业务逻辑变量。它可以使用函数组合来调用其他内容。但是,目标消息不应作为输入消息添加到模式中。
XSLT 脚本
您可以使用 XSLT脚本,但它只能用于较小的转换。对于较大的转换,编码量会很大。相反,可以将所有转换映射到一个文件,并通过在映射页面上右键单击来将文件导入映射器。与此相反,您可以使用 XSLT 模板。
脚本和模板之间的主要区别在于源文档的传递和访问方式。内联使用 XSL 方法,而在模板中,它们作为参数传递。
当您需要相同的逻辑来执行映射转换时,可以使用模板。
注释
关于最佳实践的一些说明。
可以使用网格和链接来组织映射。
可以将在网格页面中分组的特定组的链接分组在一起,并且可以根据您的需求有任意数量的网格页面。
保持映射简单。
尽量减少业务规则的使用。
在需要的地方使用标签。
摘要
在这篇文章中,我试图涵盖映射中最重要的事情。映射在许多集成项目中对于数据交换起着重要作用。还有一些内容未涵盖,将在第二部分中更新。