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 包含两个部分:

 以下码表示复制当前节点的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 扩展开发的更多相关文章

  1. arcgis api 3.x for js 入门开发系列二十一气泡窗口信息动态配置模板

    前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 3.x for js:esri 官网 api,里面详细的介绍 arcgis api 3.x 各个类 ...

  2. 【圣诞特献】Web 前端开发精华文章推荐【系列二十一】

    <Web 前端开发精华文章推荐>2013年第九期(总第二十一期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各种增强网站用户体验的 jQuery 插件,展示前沿的 HTML5 和  ...

  3. Android高效率编码-第三方SDK详解系列(二)——Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能

    Android高效率编码-第三方SDK详解系列(二)--Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能 我的本意是第二篇写Mob的shareSD ...

  4. 《C#微信开发系列(Top)-微信开发完整学习路线》

    年前就答应要将微信开发的学习路线整理给到大家,但是因为年后回来这段时间学校还有公司那边有很多事情需要兼顾,所以没能及时更新文章.今天特地花时间整理了下,话不多说,上图,希望对大家的学习有所帮助哈. 如 ...

  5. BizTalk 开发系列(四十一) BizTalk 2010 BAM 安装手记

    使用64位系统可以支持更大的内存,现在服务器基本上都使用64位系统.微软从Windows Server 2008 R2开始服务器版的操作系统也只支持64位了,不过对于像BizTalk这种“繁杂的东西” ...

  6. BizTalk开发系列(二十二) 开发自定义Map Functoid

    尽管 BizTalk Server 提供许多Functoid以支持一系列不同的操作,但仍可能会遇到需要其他方法的情况.<BizTalk开发系列 Map扩展开发>介绍了通过使用自定义 XSL ...

  7. BizTalk开发系列(二十八) MSMQ 适配器

    MSMQ(MicroSoft Message Queue,微软消息队列)是在多个不同的应用之间实现相互通信的一种异步传输模式,相互通信的应用可以分布于同一台机器上,也可以分布于相连的网络空间 中的任一 ...

  8. BizTalk开发系列(二十五) SQL Adapter

    SQL Server 是.NET开发的首选数据库.当然开发BizTalk应用程序很多也离不了SQL Server.针对SQL Server的数据操作BizTalk 提供了SQL Adapter作为与数 ...

  9. 牢记!SQL Server数据库开发的二十一条注意点

    如果你正在负责一个基于SQL Server的项目,或者你刚刚接触SQL  Server,你都有可能要面临一些数据库性能的问题,这篇文章会为你提供一些有用的指导(其中大多数也可以用于其它的DBMS). ...

随机推荐

  1. css学习(1)-- 层叠样式表CSS的基础

    一.什么是CSS CSS是Cascading Style Sheets的简写,它除了可以轻松设置网页元素的显示位置和格式处,甚至还能产生滤镜,图像淡化,网页淡入淡出的渐变效果. 一个样式表由样式规则组 ...

  2. UVA - 11488 字典树

    题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...

  3. POJ 2549 二分+HASH

    题目链接:http://poj.org/problem?id=2002 题意:给定一个n个数字组成的序列,然后求出4个数使得a+b+c=d,求d的最大值.其中a,b,c,d要求是给定序列的数,并且不能 ...

  4. 用Python做自然语言处理必知的八个工具【转载】

    Python以其清晰简洁的语法.易用和可扩展性以及丰富庞大的库深受广大开发者喜爱.其内置的非常强大的机器学习代码库和数学库,使Python理所当然成为自然语言处理的开发利器. 那么使用Python进行 ...

  5. TestNg线程池配置、执行次数配置、超时配置

    使用注解的方式对TestNg线程池配置.执行次数配置.超时配置 注:使用注解来控制测试方法运行的次数和超时时间,timeOut在单线程或者多线程模式下都可用,threadPoolSize设置了线程池的 ...

  6. [转] Spring MVC sample application for downloading files

    http://www.codejava.net/frameworks/spring/spring-mvc-sample-application-for-downloading-files n this ...

  7. bug提交模板

    简述所属版本所属模块严重等级优先级分配给[网络情况][前置条件][详情描述] 1. 2. 3.[预期结果][实际结果][历史版本][备注][是否补充用例] 另外: 1.若和界面有关的bug尽量提供对应 ...

  8. CF# 334 Lieges of Legendre

    C. Lieges of Legendre time limit per test 2 seconds memory limit per test 256 megabytes input standa ...

  9. (转)Ubuntu samba配置服务文件包

    转:http://os.51cto.com/art/201001/176366.htm Ubuntu samba服务配置是很不错的文件应用很有学习价值,这里我主要讲解Ubuntu samba服务配置的 ...

  10. 桌面每日一句--桌面翻译工具(有道翻译,微软翻译,Google翻译)

    现在的翻译软件功能越来越多,也越来越臃肿,还不时弹广告,真的很烦恼. 鉴于这种情况,自己做了个翻译软件,能满足日常需求就好了.需要用的时候可以直接在桌面输入单词翻译,或者直接使用快捷键呼出翻译窗口.最 ...