Microsoft BizTalk2006+VS2005示例演示

来源:互联网 发布:mac打印预览 编辑:程序博客网 时间:2024/05/03 23:29
 
我们创建第一个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中出现问题,怎样调试?

      希望在以后的学习中,这些问题能找到答案。

原创粉丝点击