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. 在caffe中添加新的layer

    比如现在要添加一个vision layer,名字叫Ly_Layer:(一般命名第一个字母大写,其余小写.) 1.属于哪个类型的layer(共五种:common_layer, data_layer, l ...

  2. RDLC的部署(无法找到Microsoft.ReportViewer.ProcessingObjectModel.dll文件)

    CMD命令:C:\Windows\assembly\GAC_MSIL\ rdlc 相比微软的其他产品来说,做得还真是够烂的了,比水晶报表也烂得多. 但不知为何我还是宁可先择 rdlc.并且渐渐上手了. ...

  3. POJ 3274 HASH

    题目链接:http://poj.org/problem?id=3274 题意+思路: 点击这里 补充:因为有减法运算,所以可能会造成运算后结果为负数,所以需要把结果统一转换成正数[不然数组下标访问不到 ...

  4. POJ 2201 Cartesian Tree ——笛卡尔树

    [题目分析] 构造一颗笛卡尔树,然后输出这棵树即可. 首先进行排序,然后用一个栈维护最右的树的节点信息,插入的时候按照第二关键字去找,找到之后插入,下面的树成为它的左子树即可. 然后插入分三种情况讨论 ...

  5. 简单的实现UIpicker上面的取消确定按钮

    1 因为我用的xib实现的添加picker 和textfiled的, @interface ViewController : UIViewController<UITextFieldDelega ...

  6. 【分块】【树上莫队】bzoj1086 bzoj3052

    1086 http://vfleaking.blog.163.com/blog/static/174807634201231684436977/ 3052 http://vfleaking.blog. ...

  7. JavaScript 全局对象

    全局属性和函数可用于所有内建的 JavaScript 对象. 顶层函数(全局函数) 函数 描述 decodeURI() 解码某个编码的 URI. decodeURIComponent() 解码一个编码 ...

  8. HDU3395 Special Fish(最大费用任意流)

    题目要的并不是最大匹配下得到的最大的结果. 网上流行的做法是加边.其实,在连续增广的时候求得一个可行流的总费用为负就停止这样就行了. #include<cstdio> #include&l ...

  9. Azkaban 2.5.0 搭建

    一.前言 最近试着参照官方文档搭建 Azkaban,发现文档很多地方有坑,所以在此记录一下. 二.环境及软件 安装环境: 系统环境: ubuntu-12.04.2-server-amd64 安装目录: ...

  10. iOS学习31之UITableVIewCell自定义

    1. 自定义Cell 1> 为什么要自定义Cell UITableView 中系统的Cell共提供了四种默认样式,  分别是: UITableViewCellStyleDefault UITab ...