BizTalk Server 2010 - 映射器(Mapper) [ 中篇 ]
自动链接架构元素
在我们的项目中,如果架构中的项比较多,那么在建立映射关系的时候,查找到相对应的项会相对比较困难,比如在源架构中有一个项叫做“ID”,我们需要将这个ID与目标架构的“ID”这一项进行映射匹配,这时候如果架构中存在的项比较多,那么我们需要花一定的时间去进行查找,有没有比较简单的方法呢?往下看吧!
在目标架构中找到需要进行匹配的项,在这里我们用“ID”这个项来举例,在“ID”项上点击右键->显示匹配(Indicate Matches),这时候我们可以看到有一条匹配的链接显示在了映射窗口当中,我们点击回车进行确认,为什么还需要点回车键进行确认呢?因为有时候可能在源架构中不止有一个叫做“ID”的项,所以系统会把所有的可能性都标识出来,让我们选择我们需要的那个进行确认,稍后会演示这个功能。
架构链接的智能感应
刚才也谈到了这个智能感应的功能,当我们编辑复杂而又庞大的映射文件时,寻找匹配的节点是非常痛苦而且低效的,架构链接智能感应功能可以自动查找目标架构中跟当前所选架构节点的名称、结构和数据类型相似的墓前节点,用不同颜色来表示目标结点的匹配程度。
这次我们对目标架构中的CustomerName项进行匹配,但是存在一个问题,在源架构文件中,存在着多个名叫CustomerName的项,那我们如何能够快速定位到自己想要的那个呢?首先选中目标架构中的CustomerName并按下快捷键SHIFT + 空格,完成这一个步骤,好了,这时可以看到哪个是我们想要匹配的项了!选好之后按回车键进行确认即可。
这里有一些快捷键可以让我们的操作更加方便,比如:
- 回车键:确定生成最佳匹配链接
- 上下方向键:遍历其他匹配链接
- HOME键:定位到最佳匹配链接
增强的Functoid配置
在上一篇当中简单的介绍了一下Functoid,下面我们具体来看一下它能够发挥的作用。
1. 我们从左侧的Functoid工具箱中将Scripting拖拽到CustomerInfo映射界面中。
2. 双击Scripting函数块打开配置Scripting界面(Configure Scripting functoid dialog box),选择Script配置(Script functoid configuration)选项卡。
3. 在选择脚本类型列表(Select script type)中选择Inline C#,删除系统自动生成的示例脚本,并键入一个我们自定义的消息转换,在这里我们以一个最简单的处理逻辑为例,将接收到的参数从大写转换为小写。
3. 我们可以看到在上面所编写的逻辑代码中需要一个输入参数,这个参数来自于我们的源架构,在这里我们从源架构中选择ID作为输入参数,找到ID项并将其拖拽到Scripting函数块上。
4. 双击Scripting函数块,选择Functoid输入(Functoid Inputs)选项卡,我们可以看到这时候BizTalk为我们自动添加了一个输入参数Input[0]。
5. 就像编写C#程序一样,在这里的方法也可以支持多个输入参数,选择Script配置(Script functoid configuration)选项卡,为我们刚才编写的方法添加一个输入参数。
6. 我们在这个方法中创建了两个输入参数,也就是说需要两个源架构中的项作为输入参数,我们刚才选择了ID,现在我们将TotalOrder也拖拽到Scripting函数块上,作为输入参数,在Functoid输入(Functoid Inputs)选项卡我们就可以看到目前有两个输入参数,分别是Input[0]和Input[1]。
测试映射
折腾了这么多个步骤的操作,之前的所作所为是否正确?通过基于VSTS的测试映射功能,可以随时对我们搭建的映射进行测试,提升我们的开发效率与准确性。
1. 在这里我准备了一个文本文件格式的消息示例,该示例模拟一个从外部客户发来的销售订单信息。
2. 选择MapLab.Maps项目中的SalesOrderFF_to_SalesOrder.btm映射文件,设置该映射的测试映射输入(TestMapInput)属性为本地(Native),设置测试映射输入实例(TestMap Input Instance )属性为我们的示例消息SalesOrder_FF_Sample.txt所在路径。
3. 指定好用来测试的消息实例后,我们就可以对这个映射文件进行测试了,右键点击映射文件SalesOrderFF_to_SalesOrder.btm选择测试映射(TestMap)。
4. 在输出窗口中,按住CTRL点击输出消息的路径链接查看测试结果,被该映射文件处理后的消息将被输出到此处,在这个演示中我们将平面文件转化为了标准的XML格式文件,并且通过到数据库中轮询代码表来匹配地区代码与地区名称之间的对应关系。