映射定义从一个XML文档到另一个XML文档的转化。它用在一下三个地方:

1. 为了将特定贸易合作伙伴或者内部系统传入的特定消息转化为内部XML格式。这是通过在接受端     口或者双向接口的接收端设置映射完成的。

2. 将将要发送的内部XML格式的消息转化为贸易合作伙伴或者内部系统特定的格式。这是通过在发     送端口或者双向端口的发送端设置映射完成的。

3. 业务处理过程中需要转换。

映射器

可以在visual studio 2010 中使用biztalk映射工具开发映射,并且保存为biztalk特定的XML格式,但是当编译项目的时候,会将其编译为可扩展样式表语言转换(XSLT)。事实上,你甚至可以使用自己的XSLT解决使用映射工具不能解决的复杂的转换。但是只支持XSLT 1.0.

传入的文件可能是XML或者在接收管道被转化为XML,转化过程发生在接收端口执行映射之前。同样在发送端口,映射执行过程也发生在发送管道转化输出消息格式之前。这使映射器和XSLT对biztalk操作的所有文件都起作用。由于XSLT只能作用于XML,这提供了一种统一的良好而干净的方式处理biztalk中的文件转换。

当开发一个转换的时候,考虑到给定的源架构,你总是觉得映射的输入是有效的。这至少需要如下条件之一:

1. 在接收管道打开校验功能,这意味着要不你使用的是带有XML校验组件的自定义管道,要不就是     在拆分器上开启了校验功能。

2. 你相信发送系统和贸易伙伴发送的消息总是有效的,因此没有必要打开校验功能。这可能是基于       性能的考虑。这样做的缺点就是后续处理过程无法预知结果,并且出错的话很难解决。

无论是哪种方式,你的业务都必须决定怎么做。是应该打开校验在处理过程开始的时候就捕获错误,还是因为发送者比较可信或者你决定在错误出现的时候处理而关闭校验?作为转换的开发者,你需要知道进入的XML的状态。如果在某个点映射失败了,这可能会导致无法预料的行为,如下:

1. 编排可能会启动失败并被休眠,因为编排内部的逻辑是基于有效的输入。

2. 如果映射失败,进入的消息可能会被休眠。

3. 如果在发送管道校验你的XML,映射根据架构产生了无效的XML,校验将会失败,此时消息也会    被休眠,不会进行发送。

处理完这些之后,你就可以开始考虑怎样实现映射了。大多的映射是很简单的,你仅仅需要指定源中的哪个节点映射到目的架构中哪个节点。其中需要注意保证两者的数据类型和基数的匹配。如果两者的数据类型不同,你或许就麻烦了。通常说来,你讲一个类型映射到另一个限制更少的类型往往是安全的。比如将int映射到string类型。然而,其他的方式并不是如此的简单,你有三种选择:

1. 更改源架构中节点的数据类型或者为节点的值添加更加严格的限制。比如,可以使用正则表达式       控制字符串只包括数字。

2. 更改目标架构相关节点的数据类型。放宽限制可能会导致后续的业务处理出现问题。

3. 在映射里进行处理。架构完成并与贸易合作伙伴达成一致后,它们进行更改往往并不容易。所以,            你可能想在映射中解决这个问题。你可以使用functoids来处理。

如果源节点是可选的但是目的节点不是,就会出现问题。为了防止输入节点的缺失应该做些什么是值得考虑的事情。同样,你有三种选择:

1. 改变源架构的可选节点为必须节点。

2. 将目的架构中的相关节点改为可选节点。

3. 在映射里进行处理。你可能想在映射中处理。你可以使用functoids来处理这种场景。这可能是映    射了一个默认值,也肯能是抛出异常。

Functoids

biztalk提供的functoids可以在源值拷贝到目的节点之前进行一些预处理。这个处理过程可以做任何事情,比如将字符串转化大写、使用三角函数、进行数据库查询等。biztalk提供了很多种内置的functoids并进行了分类,其中类别有字符串、数学、逻辑判断、日期时间、转换(编码)、科学计数法、累计(聚合)、数据库、高级、第三方。

你可以使用内置的functoids构建代码块解决你大多的映射需求。然而有时你需要的功能内置functoids并没有提供。有时,你可能发现自己一遍又一遍的在映射中建了很多相同的functoids组合解决特定的问题。这是十分烦人的并使你的映射变得脏乱不堪。为了解决这个问题,你可以开发自己的functoids。开发自定义的functoids并不像听起来那样难,事实上,你会发现最困难的是创建一个漂亮的可以描述你的functoids的图标。

functoids被分为两大类:

1. 非累计或者通常的,它们暴露为带有参数或者没有参数并返回字符串的方法。

2. 累计的,它们暴露三个方法,第一个初始化,第二个传入所有参数,但三个获取最终的值。

当然,functoids可以分为另外两类:

1. 编译到程序集中的类并部署到GAC中。在运行时可以调用该类的一个或者多个方法完成你的功能。          这就是引用functoids。

2. 在运行时调用但不暴露方法的类,其输出一段包含在映射中的脚本。这个类型就是众所周知的内       联functoids;

在下面情况下你应该考虑开发内联functoids:

1. 你不担心你的代码作为纯文本被放入映射中(这允许其他人读取和修改)。

2. 你的functoids只依赖映射中可用的.NET的命名空间。

3. 你不想维护另外的程序集,需要时刻谨记将其添加到安装脚本里,将它部署到所有的biztalk服务     器等。

4. 你想为使用functoids的开发者提供调试使用该functoids的映射的能力。

5. 你开发了多于一个的functoids,并且他们需要共享变量。

下边情况下需要考虑开发引用functoids:

1. 将一个新的程序集部署到GAC并重启主机实例,所有的映射都不需要重新编译就可以使用这个        functoids。

2. 不想以明文方式暴露自己的业务逻辑代码。

3. functoids依赖映射中不可用的.NET命名空间.

事实上,你不必一定要选择内联或者应用的functoids,你可以开发你的functoids兼容两种类型(to be both),让映射的开发者决定使用哪种。

转载于:https://www.cnblogs.com/wufengtinghai/archive/2012/09/17/2689396.html

biztalk 2010 映射相关推荐

  1. BizTalk动手实验(十六)EDI-AS2解决文案开发配置

    更多内容请查看:BizTalk动手实验系列目录                       BizTalk 开发系列 1 课程简介 通过本课程熟悉EDI.AS2解决文案的开发与配置,本动手实验步骤及内 ...

  2. BizTalk动手实验(十七)ODBC适配器使用

    更多内容请查看:BizTalk动手实验系列目录 BizTalk 开发系列 1 课程简介 通过本课程熟悉ODBC适配器的的使用,本练习采用BizTalk 2010 ODBC 适配器 2 准备工作 1. ...

  3. FW: BizTalk's furture

    BizTalk's future With Microsoft's push to the cloud people are publicly wondering about the amount o ...

  4. BizTalk中的英文名词和中文释义

    最近研究BizTalk架构,并为书籍搜集整套详细资料,真是累死人了,相同类别的中文书籍10年前有过,此间,BizTalk更新升级无数次了,国内尚无一本相关开发类技术指导.虽说可能此框架不属于轻量级,不 ...

  5. BizTalk Server 2010新功能介绍(六):BizTalk Mapper (下)

    在前一章里我们介绍了BizTalk Mapper的三个新功能:自动滚屏显示相关节点和链接.自动链接架构元素和相关视图.这一章里我们继续介绍更多的新功能,包括:高亮显示相关匹配的Schema(架构)节点 ...

  6. BizTalk Server 2010新功能介绍(四):基于安全连接的FTP适配器

    BizTalk Server是微软构建业务流程和集成解决方案的首选服务器,BizTalk Server 2010是这个产品线的第7个主要版本,提供对Windows Server 2008 R2.SQL ...

  7. BizTalk Server 2010 + SQL Server 2008 R2 - 通过集成创造更大价值 [ 上篇 ]

    概述 对于IT信息技术来说,应用程序和数据就好像太极的阴阳两极,通过对这两者进行组合,即可获得 IT的业务价值.虽然公司.ZF机关需要使用大量不同应用程序,并用不同格式存储数据,但为了从这种多样化中充 ...

  8. 使用BizTalk Server常见问题处理

    在开始开发BizTalk项目的时候,一些开发者会碰到许多基础问题,本文对这些常见问题进行罗列,其中有个别问题笔者向微软的BizTalk工程师寻求了问题解决方案,旨在让使用BizTalk的朋友更快的进行 ...

  9. 通过BizTalk WCF适配器实现异构数据库/系统间的数据同步

    概述 数据库与数据库之间的同步,是EAI(企业应用整合)非常普遍的需求,BizTalk作为企业ESB平台,以SOA的架构方式来实现异构系统之间的整合,今天我们就来介绍如何使用BizTalk的适配器来实 ...

最新文章

  1. 我写的代码,又被CTO骂了......
  2. sql server2008用ip远程连接
  3. BESR备份还原SERVER 2003域控制器
  4. elasticsearch 运行原理
  5. 用Hadoop1.0.3实现KMeans算法
  6. 区分一下强制类型转换运算符重载/赋值运算符重载/对象定义的赋值
  7. ASP.NET Core:CMD命令行+记事本 创建Console程序和Web Application
  8. 洛谷 - P3246 [HNOI2016]序列(莫队+单调栈)
  9. Ubuntu下无法看到共享文件夹的解决办法
  10. 中国的程序员为什么这么辛苦?
  11. inner join 重复数据_Ramp;Python Data Science 系列:数据处理(2)
  12. C#进阶系列——一步一步封装自己的HtmlHelper组件:BootstrapHelper(三:附源码)...
  13. 支付宝五福又来了,但已没人关心抢红包
  14. anaconda报错 ImportError: No module named conda.cli
  15. docker 离线安装_企业级Docker私库Harbor安装详解
  16. SSM-水果商城-导入项目-学习-2
  17. chkconfig命令及的使用 与linux的七个运行级别
  18. pointnet源码阅读:测试
  19. 顾客价值理论(转载)
  20. 银行卡资费转帐汇款取款_收费标准参考_中行_建行_工行_农行_招行_兴业等

热门文章

  1. 简单搭建zookeeper集群分布式/伪分布式
  2. Docker(二):Dockerfile 使用介绍
  3. 第十六讲 循环遍历文件和元组
  4. Failed while installing Dynamic Web Module 2.5. Project facet jst.web.jstl has not been defined.
  5. 2015年度互联网安全报告发布 移动支付成重灾区
  6. codewars047: 街头霸王2
  7. 创建数据库时指定编码方式
  8. shell批量添加用户
  9. 为实验室部署Symantec Antivirus
  10. IT业爆发“新人”争夺战