这一课帮助我们创建第一个BizTalk程序,并模拟以下场景
1.Warehouse发送一个库存请求(XML消息的形式)
2.Biztalk Server接到这个请求后,会做一个判断,当请求的数量大于500的时候 ,将消息发送到ERP,否则返回一条错误消息回Warehouse
这是一个非常简单的过程,主要是为了熟悉一下Biztalk2006 + VS2005的开发环境
1.创建一个BiztalkSolution
- 打开VS2005,新建一个Empty BizTalk Server Project,命名为:EAISolution
- 删除EAISolution工程,保留空白解决方案
- 新建一个Empty BizTalk Server Project,命名为:EAISchemas
说明:VS2005中没有新建空白解决方案选项,所以只有通过这种方式来创建
2.增加Schema文件
- 选中EAISchemas工程,Add-->New Item,新增一个Schema,命名为Request.xsd
- 增加下图所示的节点
说明:
(1).Biztalk是基于消息的,定义Schema是为了定义消息的类型。
(2).选中一个节点,Insert new schema node,有三个选项:
- Child Record : 对应Xml Schema文件中的ComplexType节点,并且该节点下的子对象是sequence的。在Schema中凡是有两个以上的子元素,就认为是复杂类型的,我们在Schema文档中采用ComplexType来定义该元素。表示有多个XML子元素。sequence表示子元素依次出现的顺序。所以对应上图,Header,Item应该是Child Record
- Child Field Attribute : 对应Xml Schema文件中的属性节点,用于描述Child Record的属性。本例子中没有用到。
- Child Field Element : 对应Xml Schema文件中的Element,下面不再包含任何Element和Attribute。本例中的ReqId,Date等就是Child Field Element。
(3)如果对Schema概念不清楚,可以参考XML,XML Schema概念,基础
3.修改Request Schema的属性
- 选择Quantity节点-->属性-->DataType属性,选择xs:unsignedInt.
- 选择Schema节点-->属性-->Schema Editor Extensions,点击后面的按钮,弹出对话框,勾选Flat File Extension,确定
- 选择Request节点,Structure属性,选择Positional
- 对下面列表中的Element,配置Persitional Length和Persitional Offset属性
Field element ReqID Date Description Quantity UnitPrice TotalPrice Positional length 10 10 14 3 6 12 Positional offset 0 1 1 1 1 1
说明:
(1).这一步必须按步骤进行,因为只有设置了Flat File Extension,Requet才有Structure属性,设置了Structure为Positional,才有Positional length和Positional offset.
(2)Flat File Structure 可以参考Flattening out the complexity in flat file schemas 写的很详细。
(3)Positional length表示该Element的长度,Positional offset表示该Element在文件中距前一个Element的距离
4.增加RequestDenied.xsd
这一步就不多说了,参照下图建立节点,设置Qty节点的DataType属性为xs:unsignedInt.
5.升级Quantity节点和Qty节点为Distinguished Fields
- 打开Request.xsd,选中<Schema>节点,在属性栏中找到Promote Properties,点击[...],弹出Promote对话框。
- 同样方法设置RequestDenied.xsd中的Qty节点
说明:设置Distinguished Fields是为了在Orchestration中作判断时可以直接访问。
6.创建一个自定义Send Pipline
- 选择EAISchemas工程-->Add New Item-->Pipeline Files-->Send Pipline,添加一个ERPPipeline.btp
- 如图,拖拽ToolBox中的Flat file assembler到右边的Assemble Drop Here;
说明:创建一个管道是为了我们将Request发送到ERP系统时序列化为Flat File发送。
7.创建一个map
- 选择EAISchemas工程-->Add New Item-->Map Files,添加一个MapToReqDenied.btm
- 直接点击鼠标左键拖拽一个节点到另一个节点就可以建立map
说明:建立Map是说明DelineReq中的数据来自Request.xsd,由于两个消息的Schema不一样,必须建立一个Map来说明对应关系。
8.为工程添加一个强文件名。
- 打开.net命令提示符,输入sn -k Tutorial.snk
- 选择EAISchemas工程-->属性-->Common Properties-->Assembly-->Assembly Key File,浏览到你刚刚生成Tutorial.snk的位置,点击打开
- 选择EAISchemas工程-->属性-->Configuration Properties-->Deployment 确保Redeploy=true
到这一步,第一个工程已经完成了,现在的Solution Explore中应该是这样的:
将工程编译一下,看能否通过。
9.创建一个Orchestration
- 选中EAISolution,新建一个Biztalk工程,命名为EAIProcess
- 选中EAIProcess,新建一个Orchestration File,命名为EAIProcess.odx,建好后,会打开Orchestration的设计界面。(绿色Shape(形状)表示开始,红色Shape表示结束)
- 从ToolBox中拖拽一个Receive Shape到Drop a shape from the toolbox here
命名为:Recieve_Request,并设置属性Activity=true(收到一条Message时实例化此端口) - 拖拽一个Decide Shape到Receive_Request之后
命名为CheckQuantity,选中CheckQuantity中的Rule_1,命名为Decline - 拖拽一个Transform Shape到Decline下
选中ConstructMessage_1,命名为:Construct_RequestDenied - 拖拽一个Send Shape到Transform_1后,再拖拽一个Send Shape到Else后
分别命名为:Send_ReqDenied,Send_ReqToERP
整个流程已经创建完毕
10.添加对EAISchema工程的引用
- 选中EAIOrchestrations工程的References,右键,Add Reference
- 选择Project,EAISchemas,点Add
- 修改EAISchemas引用属性,Copy Local=false
说明:Copy Local=false是为了避免一个编译错误,请参考http://support.microsoft.com/default.aspx?scid=kb;en-us;313512
11.创建新的Message
- 打开EAIProcess.odx,点击Orchestration View,选中Message
- 右键,New Message,会创建一个Message_1
- 选中Message_1,在属性窗口中,修改Identifier=RequestInstance
- 在属性窗口中,选择Message Type,会打开一个Dropdownlist,在Dropdownlist中,展开Schema,选择Select from referenced assembly,这时会打开Select Artifact Type对话框,选择刚创建的Request
] - 同样的步骤,添加RequestDeniedInstance,在Select Artifact Type对话框,选择刚创建的RequestDenied
说明:创建消息如同我们在编程中申明变量,我们先前定义的Schema是为了约束变量的类型,申明了变量后,我们在Orchestration中才可以直接使用这些消息。
12.添加Port
- 从ToolBox中拖拽一个Port到Port Surface
- 这时会打开一个添加Port的向导,点击下一步
- 在Name输入框中,填入ReceiveReqPort,点击下一步
- 按下图填入Port Type,点击下一步
- 选择I'll always be receiving messages on this port.和Specify later,点击下一步
- 点击完成,创建了第一个Port,这个Port是只用于Receive的
- 同样方法创建两个Send Port,分别命名为SendDeclinePort,SendToERP,与前面步骤稍有不同的是,在选择Port direction of communication时,应选择I'll always be sending messages on this port
说明:创建Port是为了添加Orchestration与外界的接口,我们通过Port接收外界的消息以及发送消息到外界。
12.为所有的Shape指定Message,连接Port到Orchestration
- 选中Receive_Request,在属性窗口中,选择Message=RequestInstance
- 选中Send_ReqDenied,在属性窗口中,选择Message=RequestDeniedInstance
- 选中Send_ReqToERP,在属性窗口中,选择Message=RequestInstance
- 拖拽ReceiveReqPort到Receive_Request
- 拖拽SendDeclinePort到Send_ReqDenied
- 拖拽SendToERP到Send_ReqToERP
13.配置Transform Shape
- 选中Construct_RequestDenied,在属性窗口中,打开Messages Constructed drop-down list,勾选RequestDeniedInstance check box
- 双击Transform_1,打开Transform Configuration对话框,选择Existing Map,选择Select from referenced assembly...
- 选择MapToReqDenied ,点击OK
- 设置Source=RequestInstance
- 设置Destination=RequestDeniedInstance
- 点击OK,设置完毕
14.设置判断语句
- 双击Decline Shape,弹出BizTalk Expression Editor
- 输入:RequestInstance.Item.Quantity>500
- 点击OK,保存工程
15.编译EAIOrchestrations
- 选择EAIOrchestrations工程-->属性-->Common Properties-->Assembly-->Assembly Key File,浏览到你刚刚生成Tutorial.snk的位置,点击打开
- 选择EAISchemas工程-->属性-->Configuration Properties-->Deployment 确保Redeploy=true
- 编译工程
16.发布
- 打开EAIOrchestration工程属性,在Application Name中填入EAIApplication
- 同样方法设置EAISchema工程的Application Name
- 选中EAISolution,打开属性窗口,将Deploy选项勾上
- 选中EAISolution,右键,Deploy Solution
- 发布成功后,会在output窗口中看到这样的信息:
========== Deploy: 2 succeeded, 0 failed, 0 skipped ==========
说明:
- 设置工程的Application Name决定了发布后在Biztalk Server上的Application name
- 由于我的开发环境和Biztalk Server在同一台机器上,发布比较容易,但也可以发布到其他机器(本人到目前还未尝试过,不过应该不复杂)
17.配置和启动EAI Application
- 这时可以关闭VS2005了(本人机器配置不高。。。)
- 打开BizTalk Server Administration,展开刚刚创建的EAIApplication节点
- 右键,Configure,会打开配置对话框
- 设置Host = BizTalkServerApplication
- 新建三个文件夹
C:/Tutorial/Filedrop/ReceiveRequest
C:/Tutorial/Filedrop/RequestDenied
C:/Tutorial/Filedrop/ERPSys - 设置ReceiveReqPort,在下拉框中,选择New receive port,在弹出的对话框中,找到Receive Locations,点击New
- 设置Name = ReceiveLocation_ReceiveReq,Type = File,Recieve pipeline=XMLReceive
- 点击Configure,在弹出的对话框中输入路径:C:/Tutorial/Filedrop/ReceiveRequest
- 一路确定,回到Configure Application对话框
- 同样方法,配置SendDeclinePort,SendToERP
- 配置好了以后,点击OK关闭配置界面
- 右键EAIApplication --> Start
- 启动成功
18.测试
- 分别拷贝下面两个XML文件到 C:/Tutorial/Filedrop/ReceiveRequest
RepRequestAccepted.xml
< ns0:Request xmlns:ns0 ="http://EAISchemas.Request" >
< Header >
< ReqID > R12345_ </ ReqID >
< Date > Today_ </ Date >
</ Header >
< Item >
< Description > Description_ </ Description >
< Quantity > 300 </ Quantity >
< UnitPrice > 1.45 </ UnitPrice >
< TotalPrice > 435.00 </ TotalPrice >
</ Item >
</ ns0:Request >
RepRequestDenied.xml
< ns0:Request xmlns:ns0 ="http://EAISchemas.Request" >
< Header >
< ReqID > R12345_ </ ReqID >
< Date > Today_ </ Date >
</ Header >
< Item >
< Description > Description_ </ Description >
< Quantity > 600 </ Quantity >
< UnitPrice > 1.45 </ UnitPrice >
< TotalPrice > 870.00 </ TotalPrice >
</ Item >
</ ns0:Request > - 看到RepRequestAccepted.xml经过Biztalk处理后,会到 C:/Tutorial/Filedrop/ERPSys 目录下,而RepRequestDenied.xml经过Biztalk处理后,会到C:/Tutorial/Filedrop/RequestDenied目录下
好了,第一课大功告成了,非常简单,但是还是存在一些疑问:
1.为什么要给工程添加强文件名
2.设置Request.xsd的Flat File Extension有什么作用
3.配置了一个Pipline,但好像后面根本就没有用到过
4.如果Orchestration中出现问题,怎样调试?
希望在以后的学习中,这些问题能找到答案。