步骤 7(本地):创建业务流程
根据业务场景,BizTalk Server从服务总线队列收到销售订单消息后,需要检查消息中订购的数量是否大于 100。 如果数量大于 100,则会将消息插入 SalesOrder 表中。 否则会将消息发送到共享文件位置。 Northwind 通过创建一个业务流程来实现此业务逻辑。 本主题提供如何创建该业务流程的分步指南。
将业务流程添加到BizTalk Server项目
在已创建的BizTalk Server中,右键单击项目,指向“添加”,然后单击“新建项”。
在“ 新建项 ”对话框中,选择“ BizTalk 业务流程”,输入映射名称作为
OrderProcessing.odx
,然后单击“ 添加”。
为业务流程创建消息
你之前生成的架构描述了业务流程中的消息所需的“类型”。 消息通常是一个变量,其类型由相应的架构定义。 现在你必须为业务流程创建消息,然后将其链接到之前生成的架构。 你需要创建以下三个消息:
消息名称 | 对应的架构 |
---|---|
Message1_SO_Inbound | 此消息是 ECommerceSalesOrder.xsd 架构的实例。 |
Message2_SO_Inbound | 此消息是 Message1_SO_Inbound的副本。 作为最佳实践,你必须创建该消息的副本,然后修改新的消息,使原始消息保持不变。 有关详细信息,请参阅BizTalk Server消息。 |
Message1_SO_Outbound | 此消息是 TableOperations.dbo.SalesOrder (Insert) 架构的 实例。 |
创建消息的步骤
打开 BizTalk 项目的 “业务流程视图 ”窗口(如果尚未打开)。 为此,请单击“ 视图”,指向 “其他窗口”,然后单击“ 业务流程视图”。
在“业务流程视图”中,右键单击“ 消息”,然后单击“ 新建消息”。
右键单击新创建的消息,然后选择“ 属性窗口”。
在Message_1的“属性”窗格中,执行以下操作:
属性名称 执行操作 标识符 输入 Message1_SO_Inbound
消息类型 从下拉列表中展开“ 架构”,然后选择“ OrderProcessingDemo.ECommerceSalesOrder”,其中 OrderProcessingDemo 是 BizTalk 项目的名称。 ECommerceSalesOrder 是从服务总线队列接收的销售订单消息的架构。 重复上述步骤,使用以下详细信息创建消息:
消息名 执行操作 Message2_SO_Inbound - 将 标识符 设置为 Message2_SO_Inbound
- 将 消息类型 设置为 OrderProcessingDemo.ECommerceSalesOrderMessage1_SO_Outbound - 将 标识符 设置为 Message1_SO_Outound
- 将 “消息类型 ”设置为 “OrderProcessingDemo.TableOperation_dbo_SalesOrder.Insert”
向业务流程添加形状
业务流程形状定义BizTalk Server应用程序的流。 在本部分中,将向业务流程添加所需形状。
向业务流程添加形状
若要从 开始,必须添加 “接收” 形状。 此形状将接收来自 Service Bus 队列的传入销售订单消息。 在接收形状上设置以下属性。
将 “激活” 设置为 “True”。
将 “消息” 设置为 “Message1_SO_Inbound”。
将 “名称” 设置为 ReceiveOrder。
如前所述,你必须为接收到业务流程中的原始销售订单消息创建一个副本。
将 “构造消息” 形状拖放到 ReceiveOrder 形状下。 由于使用此形状构造Message2_SO_Inbound类型的消息,因此请将 Messages Constructed 属性设置为 Message2_SO_Inbound。
在 “构造消息” 形状中添加 “消息分配” 形状。 双击该形状以打开表达式编辑器,然后添加以下代码:
Message2_SO_Inbound = Message1_SO_Inbound; //copy the message Message2_SO_Inbound(*) = Message1_SO_Inbound(*); //copy the context properties on the message
单击 “确定” 。
根据本业务方案,必须根据已订购货品的数量将该消息发送到不同目标。 因此,你必须现在从传入的销售订单消息中提取出数量值。
入站消息中的 Quantity 元素 (ECommerceSalesOrder.xsd) 包含订购数量的值。 你必须升级该属性,以便将此元素用在业务流程中的表达式中。 若要提升属性,请打开 ECommerceSalesOrder.xsd 架构,右键单击“ 数量”,指向“ 升级”,然后单击“ 快速促销”。
创建用于存储数量值的变量。 若要创建变量,请在 “业务流程视图”中右键单击“ 变量”,然后单击“ 新建变量”。 为变量设置以下属性:
属性名称 值 标识符 输入 quantityOrdered
类型 选择“ Int32”。 现在必须将 Quantity 元素中的值分配给 quantityOrdered 变量。 将 表达式编辑器 拖放到 “构造消息” 形状之后。 打开该编辑器,然后输入以下表达式:
quantityOrdered = Message2_SO_Inbound.Quantity;
单击 “确定” 。
提取出订购数量后,现在你需要创建一个判定块,以便在该判定块上布置消息流将采取的两个单独路线。 通过添加“ 决定 ”形状,在业务流程中创建决策块。
将 “决定 ”形状拖放到 “表达式编辑器” 形状之后。
选择 Rule_1 形状,并在 “属性” 窗口中指定以下内容:
属性名称 值 标识符 输入 Yes
。 注意: 另一个路由默认命名为 Else。Expression 输入 quantityOrdered > 100
。现在你有两条路线可用。 如果 quantityOrdered 变量中的值大于 100,则消息采用 “是 ”路由。 否则,它将采用 Else 路由。 现在你必须定义要在每个路线中执行的操作。
根据本业务方案,如果订购数量大于 100,则必须将消息插入到 SalesOrder 表中。 因此,在 “是 ”路由中,必须将 ECommerceSalesOrder.xsd 架构转换为 TableOperations.SalesOrder.Insert 架构。 在主题 步骤 5 (本地) :生成用于插入消息的架构在 SalesOrder 表中创建了插入架构。 转换该架构后,必须将消息发送到 SQL Server 数据库表以外的消息中。
在“ 是 ”路由中,拖放 “构造消息” 形状。 将形状的 Messages Constructed 属性设置为 Message1_SO_Outbound。
在 “构造消息” 形状中,添加 “转换” 形状。 双击形状以打开“ 转换配置 ”对话框。 请执行以下操作:
选择“ 现有映射 ”选项。
从 “完全限定的映射名称” 下拉列表中,选择 “OrderProcessingDemo.SalesOrder_SQL”。
对于 “源”,请选择 “Message2_SO_Inbound”。
对于“ 目标”,请选择“ Message1_SO_Outound”。
在 “构造消息” 形状之后,拖放 “发送 ”形状,并将该形状的 Message 属性设置为
Message1_SO_Outbound
。
根据本业务方案,如果订购数量小于 100,则必须将消息发送到共享文件位置。 因此,在 Else 路由中,必须添加发送形状。
在 Else 路由中,拖放 “发送 ”形状,然后将该形状的 Message 属性设置为
Message2_SO_Inbound
。注意
你将“消息”设置为 Message2_SO_Inbound,是因为从 Service Bus 队列收到的同一消息将发送到此文件位置,而不做任何处理。 Message2_SO_Inbound 表示由 Service Bus 队列接收的消息。
向业务流程添加端口
端口表示有关业务流程的消息的输入和输出媒介。 消息由业务流程使用接收端口处理,然后使用发送端口送出。 在本业务方案中,将从一种媒介(Service Bus 队列)接收消息,然后基于消息处理将其发送到两个不同的位置(SQL Server 数据库或文件共享位置)。 因此,必须创建一个接收端口和两个发送端口作为业务流程的一部分。
添加端口的步骤
将“端口”形状拖放到“业务流程”Designer的“端口图面”窗格中,以启动“端口配置向导”。 在“欢迎”页面上,单击“下一步”。
在 “端口属性” 页中,将端口命名为
ReceiveSO
,然后单击“ 下一步”。在 “选择端口类型 ”页中,选择“ 创建新端口类型 ”选项,选择 “单向 通信模式”,保留访问限制的默认值,然后单击“ 下一步”。
在“ 端口绑定 ”页中,对于端口方向,选择“ 我将始终在此端口上接收消息”,将端口出价保留为默认值,然后单击“ 下一步”。
在最后一页上,单击“ 完成”。
重复上述步骤以创建两个发送端口。 在创建端口的同时指定以下值。
端口名称 属性 SendToSQL - 将 “名称” 设置为 SendToSQL
- 选择“创建新端口类型”
- 将通信模式设置为 单向
- 将端口方向设置为“我始终在此端口上发送消息”SendToFile - 将 “名称” 设置为 SendToFile
- 选择“创建新端口类型”
- 将通信模式设置为 单向
- 将端口方向设置为“我始终在此端口上发送消息”
连接端口和消息形状
现在,你必须连接端口和消息形状以完成业务流程。 当 ReceiveOrder 形状收到消息时,业务流程开始,业务流程在两个 Send 形状发送消息时退出。 你必须使用此标准来连接端口与消息形状
连接端口与消息形状的步骤
将 ReceiveSO 接收端口连接到 ReceiveOrder 形状。
将 “是 ”路由下的“发送”形状连接到 SendToSQL 发送端口。 这表示如果消息进入此路由 (quantityOrdered> 100) ,该消息将发送到 SQL Server 数据库中的 SalesOrder 表。
将 Else 路由下的“发送”形状连接到 SendToFile 发送端口。 这表示如果邮件进入此路由 (quantityOrdered<= 100) ,则会将其发送到指定的文件位置。
业务流程必须类似于以下内容: