BPEL 导入(BizTalk Server 示例)
BPEL 导入示例演示如何从业务处理执行语言 (BPEL) 流程说明及其相关项目中创建业务流程。
本示例的用途
Wide World Importers 是一家送货公司,为零售商提供自动送货服务。 具体而言,Wide World Importers 使零售商能够:
请求订单发货
跟踪发货
确认发货
确认发货的发票和付款
这些服务的可用性可使用 Web Services 描述语言 (WSDL) 文档表示,而 BPEL 文档则描述了产品公司申请这些服务的典型方式,以及产品公司应如何从 Wide World Importers 获得响应。
当 Northwind Traders 请 Wide World Importers 负责处理其送货业务时,他们将得到描述整个交互过程的一份 BPEL 文件和一些相关材料。 使用 BPEL 文件,Northwind Traders (BPELShipping) 创建一个BizTalk Server应用程序,以通过 Wide World Importers 自动处理订单。
本示例将指导你演练此方案,其中,BPELShipping 应用程序将完成以下任务:
从 Northwind Traders 客户订单系统接收订单。
向 Wide World Importers 发送发货请求并请求确认。
从 Wide World Importers 接收发货请求确认。
从 Wide World Importers 接收提货通知。
接收送货状态消息(直到客户已接收到该货物为止)。
从 Wide World Importers 接收发票。
向 Wide World Importers 发送发票确认响应。
从 Wide World Importers 接收付款确认。
向订单系统发送最终发货确认。
我们用一个独立的 BizTalk 应用程序 (ShipperProcess) 来模拟本示例中的 Wide World Importers。 BPELShipping 应用程序使用 FILE 传输与 ShipperProcess 进行通信,FILE 传输在通信中使用公用文件系统位置。
此示例的设计方式和原因
适用于 Web Services 的 BPEL 是一种基于 XML 的语言,用以描述业务流程,使其能够在要使用 Web Services 进行业务往来的各个公司之间轻松共享。 BPEL 描述了如何在商业协议级别上处理业务流程,但并不描述公司的内部流程,例如,公司从合作伙伴接收到采购订单后要采取的处理步骤。 本示例用于向你演示如何导入 BPEL 和相应的 WSDL 文件,如何将它们转换成业务流程,然后开始运行与合作伙伴的业务程序。
下面的过程逐步说明如何导入 BPEL 和 WSDL 文件,以及如何将它们转换成业务流程,以便与预先生成的 BizTalk 应用程序 (ShipperProcess) 进行交互。 如果你完成了以下步骤,则不需要执行“生成并初始化 BPELShipping 应用程序”中描述的步骤。
导入 BPEL 并生成工作解决方案
在 Microsoft Visual Studio 的“ 文件 ”菜单上,单击“ 新建”,然后单击“ 项目”。
注意
在完成此过程之前,必须对 ShipperProcess 应用程序进行设置,才能创建所支持的流程和架构项目。
在“ 新建项目 ”对话框的“项目类型”窗格中,选择“ BizTalk (项目”) 。 在“模板”窗格中,选择“ BizTalk (Server) BPEL 导入项目”。
在“ 名称 ”框中,输入 “BPELShipping”。
注意
如果你使用其他名称,则在最后的绑定步骤中可能会出现问题。
选择项目的位置,然后单击“ 确定 ”启动 BPEL 导入向导。
在“欢迎”页面上,单击“下一步”。
在 “选择 BPEL、WSDL 和 XSD 文件” 页上,单击“ 浏览”。
从 <Samples Path>\Orchestrations\BPELImport\BPELSource 文件夹中选择所有文件,单击“ 打开”,然后单击“ 下一步”。
注意
在此步骤中,你将选择用于描述业务流程的 BPEL 和 WSDL 文件以及表述业务文档架构的 XSD 文件。
在 “为调用的 WebServices 选择 WSDL 文件 ”页上,单击“ 完成”。
在 BPEL 导入向导报告成功导入后,关闭该向导。 现在项目即已创建。
在 Visual Studio 命令提示符下,将 目录 (cd) 更改为项目位置。
运行以下命令:
sn –k BPELShipping.snk
在“解决方案资源管理器”中,右键单击“BPELShipping”项目,然后单击“属性”。
在 “通用属性\程序集”下,选择在步骤 11 中创建的程序集密钥文件 BPELShipping.snk ,然后单击“ 确定”。
在解决方案资源管理器中,选择所有 .xsd 文件,然后删除它们。
在“解决方案资源管理器”中,选择“添加引用”,然后在“项目”选项卡上单击“浏览”。
从“示例路径>\Orchestrations\BPELImport\Solution\ShippingProcess\ShippingSchemas\bin\Development”位置<选择“ShippingSchemas.dll”,然后单击“确定”。
注意
“生成并初始化 ShipperProcess 应用程序”部分中说明了如何生成此应用程序。
在“解决方案资源管理器”中,双击“OrderShippingProcess.bpel.odx”。
在“ 视图 ”菜单上,选择“ 其他 Windows/业务流程视图”。
在“业务流程视图”窗口中,右键单击“ 业务流程属性 ”,然后单击“ 属性窗口”。
在属性窗口中,将 Orchestration Exportable 属性设置为 False。
在解决方案资源管理器中,双击“OrderShipping.wsdl.odx”。
在“业务流程视图”窗口中,展开 “类型/多部分消息类型”。
展开 InvoiceAckMessageType ,然后单击 InvoiceAckMessagePart。
在属性窗口中,展开“类型”字段,然后选择“架构/从引用的程序集中选择”。
在 “选择项目类型 ”对话框中,单击“ ShippingSchemas”,选择 Imported_InvoiceAckMessage 类型,然后单击“ 确定”。
注意
通过步骤 23 至 25,将参与 BPEL 流程的服务的消息类型替换为 ShippingSchemas 中描述的相应消息类型。
使用以下值对每种消息类型重复步骤 23 至 25。
消息部分 消息类型 InvoiceMessagePart ShippingSchemas.Imported_InvoiceMessage OrderAckMessagePart ShippingSchemas.Imported_OrderAckMessage OrderMessagePart ShippingSchemas.Imported_OrderMessage PaymentConfirmationMessagePart ShippingSchemas.Imported_PaymentConfirmationMessage PickupNotificationMessagePart ShippingSchemas.Imported_PickupNotificationMessage ShipConfirmationMessagePart ShippingSchemas.Imported_ShipConfirmationMessage ShippingHistoryPart ShippingSchemas.Imported_ShippingHistory ShipRequestAckMessagePart ShippingSchemas.Imported_ShipRequestAckMessage ShipRequestMessagePart ShippingSchemas.Imported_ShipRequestMessage ShipStatusMessagePart ShippingSchemas.Imported_ShipStatusMessage 在“解决方案资源管理器”中,右键单击“BPELShipping”项目,指向“添加”,然后单击“现有项”。
从示例路径>\Orchestrations\BPELImport\Solution\BPELShipping\BPELShipping 的位置<选择所有 .btm 文件。
在“业务流程视图”窗口中,在 ConstructMessage1 中找到名为 MessageAssignment_1 的消息分配 形状并将其删除。
从工具箱中,将 转换 形状拖动到 ConstructMessage1 形状中。
在属性窗口中,单击省略号按钮 (...) ,然后打开“转换配置”对话框。
选择 “现有映射”。
选择完全限定的映射名称作为 BPELShipping.Order2ShipRequest。
选择源作为 订单。OrderMessagePart。
选择目标作为 ship_request。ShipRequestMessagePart ,然后单击“ 确定”。
对每个 邮件分配 形状重复步骤 29 到 35,并根据下表将其替换为 转换 形状。
要替换的形状 使用的映射 源文档 目标文档 MessageAssignment_2 BPELShipping.Order2OrderAck order.OrderMessagePart order_ack.OrderAckMessagePart MessageAssignment_3 BPELShipping.Order2OrderNAck order.OrderMessagePart order_ack.OrderAckMessagePart MessageAssignment_4 BPELShipping.Order2ShipHistory order.OrderMessagePart ship_history.ShippingHistoryPart MessageAssignment_5 BPELShipping.ShipHistory2Completed order.OrderMessagePart ship_history.ShippingHistoryPart MessageAssignment_6 BPELShipping.Invoice2Ack invoice.InvoiceMessagePart invoice_ack.InvoiceAckMessagePart MessageAssignment_7 BPELShipping.Order2FinalConfirmation order.OrderMessagePart order_shipped.OrderAckMessagePart 保存该业务流程。
双击“决定”形状Decision_1中的Rule_1。
在 BizTalk 表达式编辑器中,将
ship_request_ack(BPELShipping.Ship_Acknowledged) == true
替换为
ship_request_ack(ShippingSchemas.Ship_Acknowledged) == true
双击名为 Loop_1 的循环形状。
在 BizTalk 表达式编辑器中,将
ship_history(BPELShipping.Ship_Completed) == true
替换为
ship_history(ShippingSchemas.Ship_Completed) == true
双击“决定”形状Decision_2中的Rule_2。
在 BizTalk 表达式编辑器中,将
ship_status(BPELShipping.ShipStatus) == "DONE"
替换为
ship_status(ShippingSchemas.ShipStatus) == "DONE"
在“业务流程视图”中,展开 “类型/相关类型 ”,然后单击 “OrderCorrelationSet_Type\”。
在属性窗口中,单击“相关属性”上的省略号按钮 (...“) 。
在“要关联的属性”窗格中,单击“ BPELShipping.OrderID”,然后单击“ 删除”。
在“可用属性”窗格中,展开“ 发货架构”,选择“ 订单 ID”,然后单击“ 添加”。
单击 “确定” 。
保存所有文件并生成解决方案。
部署该解决方案。
浏览到位置 <Samples Path>\Orchestrations\BPELImport\Solution\BPELShipping,然后双击 BindAndStartOnly.bat 绑定并启动业务流程。
本示例所在的位置
<示例路径>\Orchestrations\BPELImport
下表显示了本示例中的文件及其用途说明:
文件 | 说明 |
---|---|
BPELSource\InvoiceAckMessage.xsd | 发票确认架构。 |
BPELSource\InvoiceMessage.xsd | 发票架构。 |
BPELSource\OrderAckMessage.xsd | 订单确认架构。 |
BPELSource\OrderHeader.xsd | 订单头部架构。 |
BPELSource\OrderMessage.xsd | 订单消息架构。 |
BPELSource\OrderShipping.wsdl | BPEL 引用的 WSDL 文件。 |
BPELSource\OrderShippingProcess.bpel | BPEL 处理流程。 |
BPELSource\PaymentConfirmationMessage.xsd | 付款确认消息。 |
BPELSource\PickupNotificationMessage.xsd | 提货通知消息。 |
BPELSource\ShipConfirmationMessage.xsd | 发货确认消息。 |
BPELSource\ShippingHistory.xsd | 发货历史记录文档。 |
BPELSource\ShipRequestAckMessage.xsd | 发货请求确认。 |
BPELSource\ShipRequestMessage.xsd | 发货请求消息。 |
BPELSource\ShipStatusMessage.xsd | 发货状态消息。 |
Solution\bindings\BPELBindings.xml | 指定 BPELShipping 业务流程的端口绑定的绑定文件。 |
Solution\bindings\ShipperBindings.xml | 指定 ShipperProcess 业务流程的端口绑定的绑定文件。 |
Solution\BPELShipping\BindAndStartOnly.bat | 在已手动生成和部署 BPELImport 业务流程后,用于绑定和启动该业务流程的批处理文件。 |
Solution\BPELShipping\cleanup.bat | 用于删除 BPELShipping 流程的批处理文件。 |
Solution\BPELShipping\Setup.bat | 用于安装和启动所提供的 BPELShipping 示例的批处理文件。 |
Solution\BPELShipping\BPELShipping.sln | 预先生成的 BPELShipping 示例。 |
olution\BPELShipping\BPELShipping\Invoice2Ack.btm | 从开发票到发票确认的映射。 |
Solution\BPELShipping\BPELShipping\Order2FinalConfirmation.btm | 将订单消息转换为最终发货确认的映射。 |
Solution\BPELShipping\BPELShipping\Order2OrderAck.btm | 将订单消息转换为订单确认的映射。 |
Solution\BPELShipping\BPELShipping\Order2OrderNack.btm | 将订单消息转换为订单否定确认的映射。 |
Solution\BPELShipping\BPELShipping\Order2ShipHistory.btm | 将订单消息转换为发货历史记录文档的映射。 |
Solution\BPELShipping\BPELShipping\Order2ShipRequest.btm | 将订单消息转换为订单发货请求的映射。 |
Solution\BPELShipping\BPELShipping\ShipRequest2Completed.btm | 将发货历史记录设置为已完成的映射。 |
Solution\ShipperProcess\setup.bat | 用于生成、部署、绑定和启动 ShipperProcess 助手业务流程及其端口的批处理文件。 |
Solution\ShipperProcess\cleanup.bat | 用于停止、取消登记和取消部署 ShipperProcess 助手业务流程及其端口的批处理文件。 |
生成和初始化此示例
第一步是生成并初始化用于模拟 Wide World Importers 的 ShipperProcess 应用程序。
生成并初始化 ShipperProcess 应用程序
启动 Visual Studio 命令提示符。
在 Visual Studio 命令提示符下,将 目录 (cd) 更改为以下文件夹:
<Samples Path>\Orchestrations\BPELImport\Solution\ShipperProcess
运行 Setup.bat 文件,该文件将执行以下操作:
生成 ShippingSchemas 项目,它包含 ShipperProcess 和 BPELShipping 流程使用的架构
生成 ShipperProcess
部署 ShippingSchemas 和 ShipperProcess 项目
创建并绑定 ShipperProcess 使用的发送端口和接收端口
启动 ShipperProcess 使用的端口
登记并启动 ShipperProcess 业务流程
在尝试运行本示例前,你应确认在生成和初始化过程中未报告任何错误。 可能会显示下面的一条或多条警告,你可以忽略这些警告。
The 'http://contoso.org/samples/Fragments:XXXX' element is not declared. An error occurred at , (35, 16).
<SAMPLE_LOCATION>\Orchestrations\BPELImport\Solution\ShipperProcess\ShipperProcess\ShipperProcess.odx(701,13): warning X4014: convoy processing will not occur -- check your protocol if you were expecting it
<SAMPLE_LOCATION>\Samples\Orchestrations\BPELImport\Solution\ShipperProcess\ShipperProcess\ShipperProcess.odx(667,22): convoy found at 'activate receive(Receive_ShipOrder.Operation_1, Request, initialize Correl)'
<SAMPLE_LOCATION>\Samples\Orchestrations\BPELImport\Solution\ShipperProcess\ShipperProcess\ShipperProcess.odx(701,13): and 'receive(ReceiveInvoiceAck.Operation_1, Invoice_Ack, Correl)'
注意
如果已完成“导入 BPEL 并生成工作解决方案”中的步骤,则无需执行以下步骤。
生成并初始化 BPELShipping 应用程序
-
警告
执行这些步骤之前,你必须完成以上标题为“生成并初始化 ShipperProcess 应用程序”的步骤。
在 Visual Studio 命令提示符下,将 目录 (cd) 更改为以下文件夹:
<示例路径>\Orchestrations\BPELImport\Solution\BPELShipping
运行 Setup.bat 文件,该文件将执行以下操作:
生成 BPELShipping 项目
部署 BPELShipping 项目
创建并绑定 BPELShipping 流程使用的发送端口和接收端口
启动 BPELShipping 流程使用的端口
登记并启动 BPELShipping 业务流程
运行本示例
运行 BPEL 导入示例
将 Order.xml 文件从 <Samples Path>\Orchestrations\BPELImport\Solution 文件夹复制到 <Samples Path>\Orchestrations\BPELImport\Solution\Ports\ReceiveOrder 文件夹。
BPELShipping 业务流程从客户订单处理系统中以订单的形式选取此文件,运行整个发货过程,并在 Samples Path>\Orchestrations\BPELImport\Solution\Ports\SendOrder 文件夹和 <Samples Path>\Orchestrations\BPELImport\Solution\Ports\FinalConfirmation 文件夹中生成<一个文件。 这些文件的名称格式为 <MessageID>.xml,其中 <MessageID> 是生成用于唯一标识消息的 GUID。
卸载本示例
卸载 BPEL 导入示例
在 Visual Studio 命令提示符下,将目录 (cd) 更改为 <Samples Path>\Orchestrations\BPELImport\BPELShipping。
运行 Cleanup.bat。
浏览到 <示例路径>\Orchestrations\BPELImport\ShipperProcess。
运行 Cleanup.bat。