BAM API(BizTalk Server 示例)
BAM API 示例显示如何将对 BAM API 的调用合并到应用程序中,以保存可以监视的关键信息。
本示例的用途
本示例用于实现简单的购买方案。 它将生成采购订单、处理每个采购订单、创建装运并创建和处理发票。 在本示例运行时,将创建和更新 BAM 活动,以反映采购订单和发票的详细信息和对它们的处置。
本示例的设计方式和原因
本示例旨在说明如何使用 BAM 存储不是来自 BizTalk 业务流程的应用程序提供的信息。 当应用程序比较简单时,将介绍很可能需要在生产应用程序中使用的多个方面的 BAM。 其中包括:
向单个活动分配多个线程
创建两个活动之间的关系
使用继续功能允许通过不同的 ID 访问同一活动
BAM API 示例由三个main类组成:一个类用于处理采购订单,一个用于处理发货,一个用于处理发票。 每个类都有一个 RunOnce 方法,该方法从队列中检索消息,然后处理该消息。 每个类还有一个 连续 调用 RunOnce 方法的 Run 方法。
PoApplication 类的 RunOnce 方法执行以下操作:
创建表示采购订单的 XML 消息。
开始 BAMApiPo 活动,向获得添加有关采购订单及接收时间的信息。
任意批准或拒绝采购订单。
更新 BAMApiPo 活动以记录采购订单的状态(接受或拒绝)。
如果接受采购订单, 则 RunOnce 方法也会执行以下操作:
创建 XML 消息以代表要发运的货包,并将该消息添加到发货队列。
将表示采购订单的 XML 消息添加到要包含在发票中的采购订单队列中。
启用 BAMApiPo 活动的继续。
结束 BAMApiPo 活动。
ShipmentApplication 类的 RunOnce 方法执行以下操作:
从其队列中检索代表要发运的货包的 XML 消息。
更新 BAMApiPo 活动以记录发运货包的时间。
结束 BAMApiPo 活动。
InvoiceApplication 类的 RunOnce 方法执行以下操作:
从其队列中检索代表要开发票的采购订单的 XML 消息。
开始 BAMApiInvoice 活动。
为将要开发票的采购订单在 BAMApiInvoice 活动和 BAMApiPo 活动之间创建 BAM 关系。
向 BAMApiPo 活动中添加有关发票和创建时间的信息。
在任意延迟模拟等待要付款的发票之后,向 BAMApiInvoice 活动中添加发票的付款时间。
结束 BAMApiInvoice 活动。
MainApp 类的 Main 方法初始化应用程序。 此选项执行以下操作:
创建 DirectEventStream 对象。
启动多个线程,并在每个线程中调用 POApplication 对象的 Run 方法。
启动多个线程,并在每个线程中调用 ShipmentApplication 对象的 Run 方法。
启动多个线程,并在每个线程中调用 InvoiceApplication 对象的 Run 方法。
Global 类定义示例应用程序使用的常量,例如要创建的线程数和要拒绝的采购订单的百分比。
除了 Visual Studio 解决方案之外,该示例还包含定义活动的 Microsoft Excel 文件。
本示例所在的位置
可以在 Samples Path>\BAM\BamApiSample 中找到此示例<。
下表显示了本示例中的文件及其用途说明:
文件 | 说明 |
---|---|
BamApiSample.cs | 开发的应用程序。 |
BamApiSample.csproj | 开发的应用程序项目。 |
BamApiSample.sln | 开发的应用程序解决方案。 |
BamApiSample.xls | BAM 定义样式表。 |
Cleanup.bat | 用于删除已部署示例文件的批处理文件。 |
Input.txt | 用于输入示例侦听器配置。 |
InterceptorConfig.cs | API 示例的侦听器配置代码。 |
InterceptorConfig.csproj | 侦听器配置项目。 |
Invoice_config.xml | Invoice 侦听器配置。 |
Invoice_interceptor.bin | 序列化的 Invoice 侦听器。 |
PurchaseOrder_config.xml | PurchaseOrder 侦听器配置。 |
PurchaseOrder_interceptor.bin | 序列化的 PurchaseOrder 侦听器。 |
Setup.bat | 用于部署和登记示例文件的批处理文件。 |
Shipment_config.xml | Shipment 侦听器配置。 |
Shipment_interceptor.bin | 序列化的 Shipment 侦听器。 |
运行 BAM API 示例
以管理员身份打开命令提示符,并运行 <Samples Path>\BAM\ BamApiSample\setup.bat。
以管理员身份启动 Visual Studio,并打开 <示例路径>\BAM\ BamApiSample\BamApiSample.sln 解决方案。
重要
BamApiSample.cs 文件中的行
//#define Interceptor
必须注释掉。不要从此行中删除“//”。 BAM API 示例仅使用不在预处理器指令中的#if Interceptor
代码。生成解决方案。
运行 <示例路径>\BAM\BamApiSample\bin\debug\BamApiSample.exe。
输出如下所示:
... New Purchase Order #17 Received 8 was shipped as pkg#87 New Purchase Order #18 Received. Shipping package pkg#87 via DHL 13 was Approved. 18 was Rejected. 17 was Rejected. 11 was shipped as pkg#114 16 wsas Rejected. Shipping package pkg#114 via DHL Invoice #5 send for {2 5 1 9 4 8 11 } Package pkg#49 was delivered New Purchase Order #19 Received. ...
在大约一分钟后,按 Ctrl+C 或关闭命令提示符窗口,以停止 BamApiSample 程序。
查看结果
打开 SQL Server Management Studio。
在SQL Server Management Studio中,依次展开服务器、数据库、BAMPrimaryImport 和表。
右键单击 “dbo.bam_BAMApiInvoice_Active 然后单击” 打开表”。 如果使用SQL Server,请单击“选择前 1000 行”。
bam_BAMApiInvoice_Active 表的内容将显示在右窗格中。 表中的每一行都表示已启动但尚未完成的 BAMApiInvoice 活动。
右键单击 “dbo.bam_BAMApiPo_Completed 然后单击” 打开表”。 如果使用SQL Server,请单击“选择前 1000 行”。
bam_BAMApiPo_Completed 表的内容将显示在右窗格中。 表中的每行均表示已完成的 BAMApiPo 活动。