根据业务方案,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 消息。 |
| 消息1_SO_发出 | 此消息是 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 应用程序的流。 在本部分中,将所需的形状添加到编排中。
向编排添加形状
若要从头开始,必须添加 接收 形状。 此形状从服务总线队列接收传入的销售订单消息。 在接收形状上设置以下属性。
将 “激活 ”设置为 True。
将 消息 设置为 Message1_SO_Inbound。
将 Name 设置为 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 架构,右键单击 Quantity,指向“ 提升”,然后单击“ 快速提升”。
创建一个变量来存储数量值。 若要创建变量,请在 业务流程视图中右键单击 “变量”,然后单击“ 新建变量”。 设置变量的以下属性:
属性名称 价值 标识符 输入 quantityOrdered类型 选择 Int32。 现在,必须将 Quantity 元素中的值分配给 quantityOrdered 变量。 将表达式编辑器拖放到构造消息形状之后。 打开编辑器并输入以下表达式:
quantityOrdered = Message2_SO_Inbound.Quantity;单击 “确定” 。
提取订单数量后,现在需要创建一个决策块,在该块中布局消息流采用的两个单独的路径。 在编排中通过添加“决定”形状创建决策块。
在表达式编辑器形状之后拖放Decide形状。
选择 Rule_1 形状,然后在 “属性” 窗口中指定以下内容:
属性名称 价值 标识符 输入 Yes。 注意: 另一个路由默认命名 为 Else。表达式 输入 quantityOrdered > 100。您现在有两个可用的路径。 如果 quantityOrdered 变量中的值大于 100,则消息采用 “是 ”路由。 否则,它将采用 Else 路由。 现在必须定义在每个路由中要执行的操作。
根据业务方案,如果订单数量大于 100,则必须将消息插入 SalesOrder 表中。 因此,在 “是 ”路由中,必须将 ECommerceSalesOrder.xsd 架构转换为 TableOperations.SalesOrder.Insert 架构。 在主题 步骤 5(本地)中创建插入架构:生成用于在ito SalesOrder 表中插入消息的架构。 转换架构后,必须将消息发送到 SQL Server 数据库表。
在 “是” 路径中,拖放 构造消息 形状。 将形状的 消息构造 属性设置为 Message1_SO_Outbound。
在 “构造消息” 模块中添加 转换 模块。 双击形状以打开 “转换配置 ”对话框。 请执行以下操作:
选择 “现有映射 ”选项。
从 “完全限定的映射名称” 下拉列表中,选择 OrderProcessingDemo.SalesOrder_SQL。
为 源 选择 Message2_SO_Inbound。
对于 “目标”,请选择 Message1_SO_Outound。
构造 消息 形状后,拖放 “发送” 形状,并将形状 的消息属性设置为
Message1_SO_Outbound。
根据业务方案,如果订单数量小于 100,则必须将消息发送到共享文件位置。 因此,在 Else 路由中,必须添加发送形状。
在 Else 路由中,拖放 “发送” 形状,并将 形状的消息属性 设置为
Message2_SO_Inbound。注释
将消息设置为Message2_SO_Inbound,因为从服务总线队列接收的相同消息将发送到文件位置,而无需进行任何处理。 Message2_SO_Inbound表示服务总线队列接收的消息。
将端口添加到业务流程
端口表示消息在编排中的输入和输出介质。 消息由使用接收端口的业务流程使用,并使用发送端口发送。 在业务场景中,消息通过一个媒介(服务总线队列)接收,然后根据消息处理结果发送到两个不同的位置(SQL Server数据库或文件共享位置)。 因此,必须创建一个接收端口和两个发送端口作为业务流程的一部分。
添加端口
将端口形状拖放到业务流程设计器的“端口图面”窗格,以启动端口配置向导。 在“欢迎”页面上,单击“下一步”。
在端口属性页中,将端口命名为
ReceiveSO,然后点击下一步。在“ 选择端口类型 ”页中,选择 “创建新端口类型 ”选项,选择 单向 通信模式,保留访问限制的默认值,然后单击“ 下一步”。
在 “端口绑定 ”页中,对于端口方向,选择 “我始终在此端口上接收消息”,将端口出价保留为默认值,然后单击“ 下一步”。
在最后一页上,单击“ 完成”。
重复这些步骤以创建两个发送端口。 创建端口时指定以下值。
端口名称 性能 SendToSQL - 将 名称 设置为 SendToSQL
- 选择 “创建新端口类型”
- 将通信模式设置为 单向
- 将端口方向设置为 我始终在此端口上发送消息SendToFile - 将 名称 设置为 SendToFile
- 选择 “创建新端口类型”
- 将通信模式设置为 单向
- 将端口方向设置为 我始终在此端口上发送消息
连接端口和消息形状
现在必须连接端口和信息结构才能完成编排。 当 ReceiveOrder 形状收到消息时,业务编排将启动;当消息被两个发送形状发送出时,业务编排将结束。 您必须使用此标准来连接端口和消息形状
通过消息形状连接端口
将 ReceiveSO 接收端口连接到 ReceiveOrder 形状。
将 “是 ”路由下的“发送”形状连接到 SendToSQL 发送端口。 这表示如果消息输入此路由(quantityOrdered> 100),则会将其发送到 SQL Server 数据库中的 SalesOrder 表。
将 Else 路由下的发送形状连接到 SendToFile 发送端口。 这表示如果消息进入此路由(quantityOrdered<= 100),则会将其发送到指定的文件位置。
编排必须类似如下所示: