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). ...
随机推荐
-
boost和std中的thread的引用参数
boost 1.60.0 先上代码: #include <boost/thread.hpp> #include <iostream> void add(int &i) ...
-
Oracle Redo Log 机制 小结(转载)
Oracle 的Redo 机制DB的一个重要机制,理解这个机制对DBA来说也是非常重要,之前的Blog里也林林散散的写了一些,前些日子看老白日记里也有说明,所以结合老白日记里的内容,对oracle 的 ...
-
【原】log4cplus使用说明
网上关于开源日志工具log4cplus的说明有很多,但大多略显复杂,本文主要从实用的角度,介绍一种最简单而且又实用的方法.本文的方法已经足够满足实际工程中的使用需求,而且不需要很复杂的流程,可以实现. ...
-
PowerDesigner 12.5 汉化破解完整版
PowerDesigner 12.5 汉化破解完整版 分类: ⑦ 综合 2011-08-09 14:59 2979人阅读 评论(0) 收藏 举报 破解wizardsybasetoolsshell扩展 ...
-
gzip命令
http://www.cnblogs.com/peida/archive/2012/12/06/2804323.html 减 少文件大小有两个明显的好处,一是可以减少存储空间,二是通过网络传输文件时, ...
-
韩顺平HTML5教程www.gis520.com
传智播客.韩顺平.HTML5游戏公开课-坦克大战01.HTML5介绍.HTML5发展.HTML5学习网站推荐.wmv http://dl.vmall.com/c0b7xrkftf 传智播客.韩顺平.H ...
-
Azure Active Directory document ---reading notes
微软利用本地活动目录 Windows Server Active Directory 进行身份认证管理方面具有丰富的经验,现在这一优势已延伸基于云平台的Azure Active Directory.可 ...
-
Feign 与 Hystrix
Feign 与 Hystrix Feign是一个声明式的web服务客户端,它使得web服务调用非常的简单,当我们使用Feign时,Spring Cloud 整合了Ribbon和Eureka,从而为我们 ...
-
oracle group by placement可能导致错误结果的bug
Last week I’ve mentioned on Twitter that we ran into wrong result bug. We found workaround quickly b ...
-
S老师 背包系统 装备系统 锻造系统 学习
Inventory using UnityEngine; using System.Collections; using System.Collections.Generic; using Syste ...