BAM API(BizTalk Server 示例)

BAM API 示例显示如何将对 BAM API 的调用合并到应用程序中,以保存可以监视的关键信息。

本示例的用途

本示例用于实现简单的购买方案。 它将生成采购订单、处理每个采购订单、创建装运并创建和处理发票。 在本示例运行时,将创建和更新 BAM 活动,以反映采购订单和发票的详细信息和对它们的处置。

本示例的设计方式和原因

本示例旨在说明如何使用 BAM 存储不是来自 BizTalk 业务流程的应用程序提供的信息。 当应用程序比较简单时,将介绍很可能需要在生产应用程序中使用的多个方面的 BAM。 其中包括:

  • 向单个活动分配多个线程

  • 创建两个活动之间的关系

  • 使用继续功能允许通过不同的 ID 访问同一活动

    BAM API 示例由三个main类组成:一个类用于处理采购订单,一个用于处理发货,一个用于处理发票。 每个类都有一个 RunOnce 方法,该方法从队列中检索消息,然后处理该消息。 每个类还有一个 连续 调用 RunOnce 方法的 Run 方法。

    PoApplication 类的 RunOnce 方法执行以下操作:

  1. 创建表示采购订单的 XML 消息。

  2. 开始 BAMApiPo 活动,向获得添加有关采购订单及接收时间的信息。

  3. 任意批准或拒绝采购订单。

  4. 更新 BAMApiPo 活动以记录采购订单的状态(接受或拒绝)。

  5. 如果接受采购订单, 则 RunOnce 方法也会执行以下操作:

    1. 创建 XML 消息以代表要发运的货包,并将该消息添加到发货队列。

    2. 将表示采购订单的 XML 消息添加到要包含在发票中的采购订单队列中。

    3. 启用 BAMApiPo 活动的继续。

    4. 结束 BAMApiPo 活动。

    ShipmentApplication 类的 RunOnce 方法执行以下操作:

  6. 从其队列中检索代表要发运的货包的 XML 消息。

  7. 更新 BAMApiPo 活动以记录发运货包的时间。

  8. 结束 BAMApiPo 活动。

    InvoiceApplication 类的 RunOnce 方法执行以下操作:

  9. 从其队列中检索代表要开发票的采购订单的 XML 消息。

  10. 开始 BAMApiInvoice 活动。

  11. 为将要开发票的采购订单在 BAMApiInvoice 活动和 BAMApiPo 活动之间创建 BAM 关系。

  12. 向 BAMApiPo 活动中添加有关发票和创建时间的信息。

  13. 在任意延迟模拟等待要付款的发票之后,向 BAMApiInvoice 活动中添加发票的付款时间。

  14. 结束 BAMApiInvoice 活动。

    MainApp 类的 Main 方法初始化应用程序。 此选项执行以下操作:

  15. 创建 DirectEventStream 对象。

  16. 启动多个线程,并在每个线程中调用 POApplication 对象的 Run 方法。

  17. 启动多个线程,并在每个线程中调用 ShipmentApplication 对象的 Run 方法。

  18. 启动多个线程,并在每个线程中调用 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 示例

  1. 以管理员身份打开命令提示符,并运行 <Samples Path>\BAM\ BamApiSample\setup.bat。

  2. 以管理员身份启动 Visual Studio,并打开 <示例路径>\BAM\ BamApiSample\BamApiSample.sln 解决方案。

    重要

    BamApiSample.cs 文件中的行 //#define Interceptor 必须注释掉。不要从此行中删除“//”。 BAM API 示例仅使用不在预处理器指令中的 #if Interceptor 代码。

  3. 生成解决方案。

  4. 运行 <示例路径>\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.  
    ...  
    
  5. 在大约一分钟后,按 Ctrl+C 或关闭命令提示符窗口,以停止 BamApiSample 程序。

查看结果

  1. 打开 SQL Server Management Studio。

  2. 在SQL Server Management Studio中,依次展开服务器、数据库BAMPrimaryImport

  3. 右键单击 “dbo.bam_BAMApiInvoice_Active 然后单击” 打开表”。 如果使用SQL Server,请单击“选择前 1000 行”。

    bam_BAMApiInvoice_Active 表的内容将显示在右窗格中。 表中的每一行都表示已启动但尚未完成的 BAMApiInvoice 活动。

  4. 右键单击 “dbo.bam_BAMApiPo_Completed 然后单击” 打开表”。 如果使用SQL Server,请单击“选择前 1000 行”。

    bam_BAMApiPo_Completed 表的内容将显示在右窗格中。 表中的每行均表示已完成的 BAMApiPo 活动。