BizTalk开发系列(二十一) Mapping 扩展开发
BizTalk Map编辑器提供了常用的功能块,比如数据库,字符串,数字计算等功能。可在设计Map时直接使用这些功能块进行扩展。除此之外对于进行复杂的Map处 理,Map 编辑器提供了扩展XSLT,扩展XML以及脚本功能块。给Map开发提供了强大的可扩展空间。BizTalk SDK已经提供了Map扩展的Sample(C:\Program Files\Microsoft BizTalk Server 2006\SDK\Samples\XmlTools\ExtendingMapper)。以下将分别针对不同场景讲述这些扩展功能。
自定义扩展XML
如果在自定义XSLT或者在内联型的XSLT中使用外部.NET程序集。则需要使用自定义扩展XML将命名空间与程序集、类关联。自定义扩展XML内容如下:
<ExtensionObjects> <ExtensionObject Namespace="http://schemas.microsoft.com/BizTalk/2003/ScriptNS0" AssemblyName="CustomFunctions, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" ClassName="CustomFunctions.MyClass" /> </ExtensionObjects>
使用时需要在Map网格属性的Custom Extension XML对话框里设置自定义XML的路径。
自定义XSLT
如果具有已用于转换实例消息的 XSLT 代码,则可以直接使用该代码,而不用创建映射。直接在Map编辑器中创建空映射(不创建源与目标Schema的链接)并在Custom Extension XSLT对话框设置自定义XSLT路径。
![]()
使用自定义XSLT时需要注意,如果使用自定义XSLT则Map文件中的映射不会产生作用。另外如果自定义XSLT文件的内容有变的话需要重新设置一次自定义XSLT路径。否则变更的内容不会产生作用。
脚本功能块
使用“脚本”功能块可以在运行时使用自定义脚本或代码执行通常情况下不可用的函数。例如,可以通过使用“脚本”功能块并编写自己的自定义函数,在运行时调用 .NET 程序集。“脚本”functoid 支持以下语言:
- C# .NET
- JScript .NET
- Visual Basic .NET
- 可扩展样式表语言转换 (XSLT)
- XSLT 调用模板
BizTalk 将内联脚本保存在定义映射的可扩展样式表语言转换 (XSLT) 样式表中。因此,内联脚本可以与其他任何 XSLT 样式表脚本使用相同的命名空间。下表显示了可用的命名空间:
|
命名空间 |
说明 |
|
System |
系统类。 |
|
System.Collection |
集合类。 |
|
System.Text |
文本类。 |
|
System.Text.RegularExpressions |
正则表达式类。 |
|
System.Xml |
核心 XML 类。 |
|
System.Xml.Xsl |
XSLT 类。 |
|
System.Xml.Xpath |
XPath 类。 |
|
Microsoft.VisualBasic |
Visual Basic 脚本类。 |
支持的脚本类型可以通过Script Type Precedence对话框中选择设置。
![]()
1. 使用内联型C#脚本
编辑内联型C#脚本,只在要Configure Functoid Script对话框选择脚本类型为内联C#. 在内联脚本缓冲区输入代码即可。下图是使用内联代码执行字符串组合。
![]()
除对于一次性脚本很方便之外,内联脚本对于声明在多个脚本中使用的全局变量也很有用。例如,在 C# 内联脚本中,可以将以下代码行放在任何类之外:
System.Collection.ArrayList statusList = new System.Collection.ArrayList();
该代码将创建一个 ArrayList(即 statusList),可能在所有内联型脚本中访问对此对话。比如可以在XSLT表达式里直接从ArrayList对像中存取值。
2.使用内联型XSLT
XSL(EXtensible Stylesheet Language)可扩展样式表语言,将XML中的数据用指定的显示格式输出.XSL 包含两个部分:
- XSLT 用于转换 XML 文档的语言. XSLT 是指 XSL 转换 (XSL Transformations (XSLT) Version 2.0)
- XPath 用于在 XML 文档中导航的语言(XML Path Language (XPath) 2.0)
以下码表示复制当前节点的Field1属性值到目标Record节点下的Field1属性。
<xsl:element name="Record"> <xsl:attribute name="Field1"> <xsl:value-of select="@Field1" /> </xsl:attribute> </xsl:element>
3.使用内联型XSLT模板
XSLT模板当指定的节点被匹配时所应用的规则。通过在内联XSLT模板输入代码。Map使用xsl:call-template函数调用 新建的MyXsltConcatTemplate

<xsl:template match="/s0:Root"> <ns0:Root> <xsl:call-template name="MyXsltConcatTemplate"> <xsl:with-param name="param1" select="string(Field1/text())" /> <xsl:with-param name="param2" select="string(Field2/text())" /> </xsl:call-template> </ns0:Root> </xsl:template> <xsl:template name="MyXsltConcatTemplate"> <xsl:param name="param1" /> <xsl:param name="param2" /> <xsl:element name="Field1"> <xsl:value-of select="$param1" /> </xsl:element> </xsl:template>
4.使用外部.NET 程序集
Map支持直接使用外部.NET程序集(该程序集必须安装在GAC)。如果外部程序发生了改变,需要重新启动Visual Studio。
使用外部程序集编写脚本是在 BizTalk中使用脚本的首选方式。外部程序集具有以下优点:
- 便于代码共享
- 维护更简单
- 调试更方便
若要重新使用脚本,只需要设置“脚本”functoid 的“脚本”属性即可。由于脚本储存在映射之外,因此可以在不更改映射的情况下修改脚本。
5.在XSLT中调用外部.NET程序集
在XSLT中调用外部.NET程序集需要使用自自定义扩展XML,将命名空间跟程序集关联。以下脚本表示在XSLT 表达式中调用外部.NET程序集的StringConcatenet方法。
缓冲区输入的XSLT脚本
<xsl:template name="ConcatenateXSLTTemplate"> <xsl:param name="param1" /> <xsl:param name="param2" /> <xsl:element name="Record"> <xsl:variable name="var:v1" xmlns:Functions="http://functions.mappinghelper"/ select="Functions:StringConcatenate($param1, $param2)" /> <xsl:attribute name="Field1"> <xsl:value-of select="$var:v1" /> </xsl:attribute> </xsl:element>

自定义扩展XML代码内容:
<ExtensionObjects> <ExtensionObject Namespace="http://functions.mappinghelper"/ AssemblyName="MappingHelper, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f41f519fda5ae4ca" ClassName="MappingHelper.Functions"/> </ExtensionObjects>
总结
通过介绍基本涵盖了所有的Map开发方法(自定义Functoid的开发另外介绍),在Map开发过程中根据需要综合使用多种方法。有一个奇怪的
问题是不要在一个Script里使用多种类型的脚本。比如要所Inline C#和Inline
XSLT的代码放置不两个不同的Script功能块里,否则有可能出现跟预想不同的情况。另外注意:应避免多次使用同一个方法签名。如果多个“脚
本”functoid 具有相同的方法签名,则 BizTalk 会选择实现的第一个方法签名,而忽略其他签名。
参考资料:《Microsoft BizTalk 2006 Help》
BizTalk开发系列(二十一) Mapping 扩展开发的更多相关文章
- arcgis api 3.x for js 入门开发系列二十一气泡窗口信息动态配置模板
前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 3.x for js:esri 官网 api,里面详细的介绍 arcgis api 3.x 各个类 ...
- 【圣诞特献】Web 前端开发精华文章推荐【系列二十一】
<Web 前端开发精华文章推荐>2013年第九期(总第二十一期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各种增强网站用户体验的 jQuery 插件,展示前沿的 HTML5 和 ...
- Android高效率编码-第三方SDK详解系列(二)——Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能
Android高效率编码-第三方SDK详解系列(二)--Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能 我的本意是第二篇写Mob的shareSD ...
- 《C#微信开发系列(Top)-微信开发完整学习路线》
年前就答应要将微信开发的学习路线整理给到大家,但是因为年后回来这段时间学校还有公司那边有很多事情需要兼顾,所以没能及时更新文章.今天特地花时间整理了下,话不多说,上图,希望对大家的学习有所帮助哈. 如 ...
- BizTalk 开发系列(四十一) BizTalk 2010 BAM 安装手记
使用64位系统可以支持更大的内存,现在服务器基本上都使用64位系统.微软从Windows Server 2008 R2开始服务器版的操作系统也只支持64位了,不过对于像BizTalk这种“繁杂的东西” ...
- BizTalk开发系列(二十二) 开发自定义Map Functoid
尽管 BizTalk Server 提供许多Functoid以支持一系列不同的操作,但仍可能会遇到需要其他方法的情况.<BizTalk开发系列 Map扩展开发>介绍了通过使用自定义 XSL ...
- BizTalk开发系列(二十八) MSMQ 适配器
MSMQ(MicroSoft Message Queue,微软消息队列)是在多个不同的应用之间实现相互通信的一种异步传输模式,相互通信的应用可以分布于同一台机器上,也可以分布于相连的网络空间 中的任一 ...
- BizTalk开发系列(二十五) SQL Adapter
SQL Server 是.NET开发的首选数据库.当然开发BizTalk应用程序很多也离不了SQL Server.针对SQL Server的数据操作BizTalk 提供了SQL Adapter作为与数 ...
- 牢记!SQL Server数据库开发的二十一条注意点
如果你正在负责一个基于SQL Server的项目,或者你刚刚接触SQL Server,你都有可能要面临一些数据库性能的问题,这篇文章会为你提供一些有用的指导(其中大多数也可以用于其它的DBMS). ...
随机推荐
- 为什么下载APP,扫描二维码,关注微信公众号,就会送牛奶送小礼品?下载使用量高,会怎样?
以前的老办法是到处贴广告,电视上,广播上各种宣传. 在互联网时代,企业要盈利,除了不断优化升级自己的产品和服务,大量推广宣传产品,还要懂得用户思维.现在有网站,有APP,有微信,有二维码,可以卖产品, ...
- 07 JavaWeb
软件开发的两种架构:c/s和b/s * C/S client/server 客户端/服务器 例子:QQ 快播 暴风影音... ...
- Oracle PL/SQL设置快捷键的方法
pl sql默认设置不是很方便,最近搜罗了一下网上关于PLSQL的一些常用快捷键配置,主要是方便以后自个使用 1.登录后默认自动选中My Objects 默认情况下,PLSQL Developer ...
- java中 ==与equals 有什么区别?
1.==既可以比较基本类型变量,又可比较引用类型变量,而equals只能比较引用类型变量: 2.equals方法支持重写,如果未重写equals方法,则比较引用变量时与==都是比较变量所指向的对象地址 ...
- HTML入门第一天
http:超文本标记语言,主要用途是开发网页,使用http展现文字图片 视频 声音 表格 链接……是web网站开发的基础 www(万维网/因特网):world wide web w3c是制定web标准 ...
- apache activemq的重连
1.activemq的重连机制 maxReconnectAttempts -1 | 0 From version 5.6 onwards: -1 is default and means retry ...
- WPF之依赖属性
Introduction When you begin to develop appliations with WPF, you will soon stumble across Dependency ...
- Eclipse: JPA problem: Eclipse does not recognize content of persistence.xml
Link: http://stackoverflow.com/questions/3701901/eclipse-does-not-recognize-content-of-persistence-x ...
- jenkins 的 ProcessTreeKiller----无法启动子进程的解决办法
参考: http://alanland.iteye.com/blog/2047244 http://scmbob.org/start-process-in-jenkins.html java -Dhu ...
- 无线Web开发经验谈
http://am-team.github.io/amg/dev-exp-doc.html