步骤 7(本地):创建业务流程

根据业务场景,BizTalk Server从服务总线队列收到销售订单消息后,需要检查消息中订购的数量是否大于 100。 如果数量大于 100,则会将消息插入 SalesOrder 表中。 否则会将消息发送到共享文件位置。 Northwind 通过创建一个业务流程来实现此业务逻辑。 本主题提供如何创建该业务流程的分步指南。

将业务流程添加到BizTalk Server项目

  1. 在已创建的BizTalk Server中,右键单击项目,指向“添加”,然后单击“新建项”。

  2. 在“ 新建项 ”对话框中,选择“ BizTalk 业务流程”,输入映射名称作为 OrderProcessing.odx,然后单击“ 添加”。

为业务流程创建消息

你之前生成的架构描述了业务流程中的消息所需的“类型”。 消息通常是一个变量,其类型由相应的架构定义。 现在你必须为业务流程创建消息,然后将其链接到之前生成的架构。 你需要创建以下三个消息:

消息名称 对应的架构
Message1_SO_Inbound 此消息是 ECommerceSalesOrder.xsd 架构的实例。
Message2_SO_Inbound 此消息是 Message1_SO_Inbound的副本。 作为最佳实践,你必须创建该消息的副本,然后修改新的消息,使原始消息保持不变。 有关详细信息,请参阅BizTalk Server消息
Message1_SO_Outbound 此消息是 TableOperations.dbo.SalesOrder (Insert) 架构的 实例。

创建消息的步骤

  1. 打开 BizTalk 项目的 “业务流程视图 ”窗口(如果尚未打开)。 为此,请单击“ 视图”,指向 “其他窗口”,然后单击“ 业务流程视图”。

  2. 在“业务流程视图”中,右键单击“ 消息”,然后单击“ 新建消息”。

  3. 右键单击新创建的消息,然后选择“ 属性窗口”。

  4. Message_1的“属性”窗格中,执行以下操作:

    属性名称 执行操作
    标识符 输入 Message1_SO_Inbound
    消息类型 从下拉列表中展开“ 架构”,然后选择“ OrderProcessingDemo.ECommerceSalesOrder”,其中 OrderProcessingDemo 是 BizTalk 项目的名称。 ECommerceSalesOrder 是从服务总线队列接收的销售订单消息的架构。
  5. 重复上述步骤,使用以下详细信息创建消息:

    消息名 执行操作
    Message2_SO_Inbound - 将 标识符 设置为 Message2_SO_Inbound
    - 将 消息类型 设置为 OrderProcessingDemo.ECommerceSalesOrder
    Message1_SO_Outbound - 将 标识符 设置为 Message1_SO_Outound
    - 将 “消息类型 ”设置为 “OrderProcessingDemo.TableOperation_dbo_SalesOrder.Insert”

向业务流程添加形状

业务流程形状定义BizTalk Server应用程序的流。 在本部分中,将向业务流程添加所需形状。

向业务流程添加形状

  1. 若要从 开始,必须添加 “接收” 形状。 此形状将接收来自 Service Bus 队列的传入销售订单消息。 在接收形状上设置以下属性。

    1. “激活” 设置为 “True”。

    2. “消息” 设置为 “Message1_SO_Inbound”。

    3. “名称” 设置为 ReceiveOrder

  2. 如前所述,你必须为接收到业务流程中的原始销售订单消息创建一个副本。

    1. “构造消息” 形状拖放到 ReceiveOrder 形状下。 由于使用此形状构造Message2_SO_Inbound类型的消息,因此请将 Messages Constructed 属性设置为 Message2_SO_Inbound

    2. “构造消息” 形状中添加 “消息分配” 形状。 双击该形状以打开表达式编辑器,然后添加以下代码:

      Message2_SO_Inbound = Message1_SO_Inbound; //copy the message  
      Message2_SO_Inbound(*) = Message1_SO_Inbound(*); //copy the context properties on the message  
      

      单击 “确定”

  3. 根据本业务方案,必须根据已订购货品的数量将该消息发送到不同目标。 因此,你必须现在从传入的销售订单消息中提取出数量值。

    1. 入站消息中的 Quantity 元素 (ECommerceSalesOrder.xsd) 包含订购数量的值。 你必须升级该属性,以便将此元素用在业务流程中的表达式中。 若要提升属性,请打开 ECommerceSalesOrder.xsd 架构,右键单击“ 数量”,指向“ 升级”,然后单击“ 快速促销”。

    2. 创建用于存储数量值的变量。 若要创建变量,请在 “业务流程视图”中右键单击“ 变量”,然后单击“ 新建变量”。 为变量设置以下属性:

      属性名称
      标识符 输入 quantityOrdered
      类型 选择“ Int32”。
    3. 现在必须将 Quantity 元素中的值分配给 quantityOrdered 变量。 将 表达式编辑器 拖放到 “构造消息” 形状之后。 打开该编辑器,然后输入以下表达式:

      quantityOrdered = Message2_SO_Inbound.Quantity;  
      

      单击 “确定”

  4. 提取出订购数量后,现在你需要创建一个判定块,以便在该判定块上布置消息流将采取的两个单独路线。 通过添加“ 决定 ”形状,在业务流程中创建决策块。

    1. “决定 ”形状拖放到 “表达式编辑器” 形状之后。

    2. 选择 Rule_1 形状,并在 “属性” 窗口中指定以下内容:

      属性名称
      标识符 输入 Yes注意: 另一个路由默认命名为 Else
      Expression 输入 quantityOrdered > 100

      现在你有两条路线可用。 如果 quantityOrdered 变量中的值大于 100,则消息采用 “是 ”路由。 否则,它将采用 Else 路由。 现在你必须定义要在每个路线中执行的操作。

  5. 根据本业务方案,如果订购数量大于 100,则必须将消息插入到 SalesOrder 表中。 因此,在 “是 ”路由中,必须将 ECommerceSalesOrder.xsd 架构转换为 TableOperations.SalesOrder.Insert 架构。 在主题 步骤 5 (本地) :生成用于插入消息的架构在 SalesOrder 表中创建了插入架构。 转换该架构后,必须将消息发送到 SQL Server 数据库表以外的消息中。

    1. 在“ ”路由中,拖放 “构造消息” 形状。 将形状的 Messages Constructed 属性设置为 Message1_SO_Outbound

    2. “构造消息” 形状中,添加 “转换” 形状。 双击形状以打开“ 转换配置 ”对话框。 请执行以下操作:

      1. 选择“ 现有映射 ”选项。

      2. “完全限定的映射名称” 下拉列表中,选择 “OrderProcessingDemo.SalesOrder_SQL”。

      3. 对于 “源”,请选择 “Message2_SO_Inbound”。

      4. 对于“ 目标”,请选择“ Message1_SO_Outound”。

    3. “构造消息” 形状之后,拖放 “发送 ”形状,并将该形状的 Message 属性设置为 Message1_SO_Outbound

  6. 根据本业务方案,如果订购数量小于 100,则必须将消息发送到共享文件位置。 因此,在 Else 路由中,必须添加发送形状。

    1. Else 路由中,拖放 “发送 ”形状,然后将该形状的 Message 属性设置为 Message2_SO_Inbound

      注意

      你将“消息”设置为 Message2_SO_Inbound,是因为从 Service Bus 队列收到的同一消息将发送到此文件位置,而不做任何处理。 Message2_SO_Inbound 表示由 Service Bus 队列接收的消息。

向业务流程添加端口

端口表示有关业务流程的消息的输入和输出媒介。 消息由业务流程使用接收端口处理,然后使用发送端口送出。 在本业务方案中,将从一种媒介(Service Bus 队列)接收消息,然后基于消息处理将其发送到两个不同的位置(SQL Server 数据库或文件共享位置)。 因此,必须创建一个接收端口和两个发送端口作为业务流程的一部分。

添加端口的步骤

  1. “端口”形状拖放到“业务流程”Designer的“端口图面”窗格中,以启动“端口配置向导”。 在“欢迎”页面上,单击“下一步”。

  2. “端口属性” 页中,将端口命名为 ReceiveSO ,然后单击“ 下一步”。

  3. “选择端口类型 ”页中,选择“ 创建新端口类型 ”选项,选择 “单向 通信模式”,保留访问限制的默认值,然后单击“ 下一步”。

  4. 在“ 端口绑定 ”页中,对于端口方向,选择“ 我将始终在此端口上接收消息”,将端口出价保留为默认值,然后单击“ 下一步”。

  5. 在最后一页上,单击“ 完成”。

  6. 重复上述步骤以创建两个发送端口。 在创建端口的同时指定以下值。

    端口名称 属性
    SendToSQL - 将 “名称” 设置为 SendToSQL
    - 选择“创建新端口类型
    - 将通信模式设置为 单向
    - 将端口方向设置为“我始终在此端口上发送消息
    SendToFile - 将 “名称” 设置为 SendToFile
    - 选择“创建新端口类型
    - 将通信模式设置为 单向
    - 将端口方向设置为“我始终在此端口上发送消息

连接端口和消息形状

现在,你必须连接端口和消息形状以完成业务流程。 当 ReceiveOrder 形状收到消息时,业务流程开始,业务流程在两个 Send 形状发送消息时退出。 你必须使用此标准来连接端口与消息形状

连接端口与消息形状的步骤

  1. ReceiveSO 接收端口连接到 ReceiveOrder 形状。

  2. “是 ”路由下的“发送”形状连接到 SendToSQL 发送端口。 这表示如果消息进入此路由 (quantityOrdered> 100) ,该消息将发送到 SQL Server 数据库中的 SalesOrder 表。

  3. Else 路由下的“发送”形状连接到 SendToFile 发送端口。 这表示如果邮件进入此路由 (quantityOrdered<= 100) ,则会将其发送到指定的文件位置。

    业务流程必须类似于以下内容:

    业务流程

另请参阅

教程 4:使用 BizTalk Server 2013 创建混合应用程序