早在三周前,就已经收集了所有有关Cross-Reference Functoid的资源,虽然现在看来,它并不是很难,但想真正的应用它,还是需要花费一些心思的研究一下,不过,托了三周时间,还是写完了。
任务目标
1.数据如何导入
2.使用Get Application ID Functoid
3.使用Get Common ID Functoid
4.测试Mapping
5.总结应该场景
一. 数据导入
就象前面的《[BTS]BizTalk学习之Functoid篇(Database Lookup) 》一样,Cross-Reference也是需要数据库表的,只不过,它的数据定义有自己的规则,并且数据是保存在BizTalkMgmtDB中,表以xref_开头。
定义Application Type数据
ApplicationType:应用类型,可以理解成应用程序名或系统名。
我是程序员,我把它当成类名(Class MyClass)
这个名称必须是唯一的,不能重复。
下面是一个AppType的定义文件。
定义AppInstance数据
instance:应用实例,一个应用的实例名,也必须是唯一的。
type:就是前面我们定义的应用名称
我理解成一个类的实例(MyClass c1 = new MyClass())
数据定义文件如下:
定义关联
name:关联的名称
(没想好怎么说)
定义具体的数据
commonID:通用ID号
appID:应用ID号
我理解成类中的一个索引。
在后面,我们需要这需ID,来相互转换。
数据定义文件如下:
定义导入数据文件
内容比较简单,对应相应的文件路径就可以了。
执行导入指令
BTS提供了BTSXRefImport.exe工具。
导入后,数据可以在BTSMgmtDB中找到。我简单使用了一个视图,显示它们的关系和数据。
二 开始定义Schema和Mapping
定义输入Schema。
输出的Schema
创建一个Mapping文件,托入一个Get Application ID Functoid。
Functoid中的赋值
使用先前网友给我提的意思,直接用Mapping中的Test功能来测试。
定义一个输入消息实例
执行测试后执行结果如下:
如果我用数据库查询的方式显示一下,就是下面的样子。
Get Application ID 就是取上面视图中appID的值,而Get Common ID就是取commonID的值 。
下面列举了三次执行结果。为了直观一些,我都放在一起了。
Get Common ID 测试, 与Get Application ID的方式差不多,这里,只需要修改一下输入数据, 修改Mapping中的functoid,这里就不再详细说明了。
看看图就懂了。
测试结果如下,相当于是Get Application ID的反操作。
总结
Cross-Reference适合应用于一个消息中某节点的值,在不同应用程序或系统中的显示值不一至时的映射中。
比如都是表示优先级的节点,可能在App1中用1,2,3,4,5表示;在App2中用最高,高,一般,低,极低;
当你要从App1的消息映射成App2的消息时,用Cross-Reference是最适合的了。
经过测试,直接修改数据库中的记录后,新的数据可以直接被Mapping中使用。
感谢
网友 upzone 的 《Cross Reference Functoid 》