从SQL Server中获取数据一文介绍了如何从SQL Server数据库中获取数据。不过,有时候我们想把获取的记录集分开,每一个记录输出一个XML文件。在本文中,介绍如何通过Biztalk提供的Envelope实现此功能。
要实现此功能,需要完成如下任务:
一、创建一个空的BizTalk项目
二、创建一个信封构架
三、创建一个记录构架
四、编译和布署BizTalk项目
五、创建接收端口和接收位置
六、创建发送端口
七、启动端口测试
下面来看具体步骤:
一、创建一个空的BizTalk项目
1. 打开Visual Studio .Net 2003,创建一个新项目,选择项目类型为BizTalk项目,模板为空的BizTalk Server项目,输入名称为BiztalkSQL1。
二、创建一个信封构架
2. 选择BiztalkSQL1,为其添加一个构架SQLEnvelope.xsd。
3. 选择<Schema>节点,设置信封属性为是,设置Target Namespace为http://SchemaTargetNamespace。
4. 选择Root节点,设置Node Name为SQLEnvelope,选择正文 XPath后的...按钮,弹出一个正文XPath窗口,单击确定按钮,将会为正文 XPath设置属性。
5. 在构架树中选择SQLEnvelope节点,为其添加一个任何元素子节点。
6. 设置<Any>节点的Namespace属性为##any,设置Process Contents属性为Lax。
三、创建一个记录构架
7. 选择BiztalkSQL1,为其添加生成的项,选择添加适配器,打开添加适配器向导。
8. 选择适配器页面中选择SQL,单击下一步。
9. 指定架构的数据源时,设置localhost的Northwind数据库,使用合适的数据库身份认证方式,单击下一步。
10.在架构信息中设置目标命名空间为http://SchemaTargetNamespace,选择端口类型为接收端口,文档根元素名称设置为Categories。
11.选择语句类型为Select语句,单击下一步。
12.输入SQL脚本查询所要处理的数据,此处选择Categories表,输出该表所有字段,并且使用xml auto,elements方式其语句为:select * from Categories for xml auto, elements
13.单击下一步,单击完成。
14.展开生成的SQLService.xsd的构架树,将里层的Categories中的四个节点移到外层的Categories下面,并将里层的Categories节点删除。设置Categories节点的Group Max Occurs和Group Min Occurs属性为1。
四、编译和布署BizTalk项目
15.在解决方案资源管理器中将BizTalk 业务流程.odx文件删除。
16.生成解决方案。
17.为BiztalkSQL1项目设置程序密钥文件,具体步骤可参见Biztalk 排错之 需要强名称程序集一文。
18.布署解决方案。
五、创建接收端口和接收位置
19.创建SQLReceivePort单向接收端口。
20.为SQLReceivePort添加SQLReceivePosition接收位置。
21.设置传输类型为SQL,选择URI后的...按钮,打开SQL传输属性窗口。
22.设置数据库连接字符串,使用localhost主机Northwind数据库。
23.设置SQL命令为BiztalkSQL1项目的SQLService架构,文档根元素名称和文档目标命名空间将自动赋值。
24.在接收位置属性-配置-常规中设置接收处理程序为BizTalkServerApplication,设置接收管道为
Microsoft.BizTalk.DefaultPipelines.XMLReceive。
25.单击确定按钮,关闭接收位置属性-配置-常规窗口。
六、创建发送端口
26.创建一个发送端口SQLSendPort。
27.在配置\传输\主要中设置传输类型为FILE,设置地址为c:\out\%MessageID%.xml。
28.在配置\发送中设置发送管道为Microsoft.BizTalk.DefaultPipelines.PassThruTransmit。
29.在配置\筛选器和映射\筛选器中设置BTS.ReceivePortName == SQLReceivePort。
七、启动端口测试
30.选择SQLReceivePosition,单击右键选择启用菜单。
31.选择SQLSendPort,单击右键选择启动菜单。
32.半分钟后,将会在c:\out文件夹下发现Biztalk生成的一些xml文件,其内容格式如下:
<Categories mlns="http://SchemaTargetNamespace">
<CategoryID>1</CategoryID>
<CategoryName>Beverages</CategoryName>
<Description>Soft drinks, coffees, teas, beers, and ales</Description>
<Picture>dbobject/Categories[@CategoryID='1']/@Picture</Picture>
</Categories>
33.出现xml文件后,停止接收位置和发送端口,否则会在c:\out文件夹下不停地生成xml文件。
总结:在本实例中,实例了一个SQL接收适配器,一个文件发送适配器,两个构架文件,实现了SQL记录集的拆分。