BizTalk Server 2010:业务活动监视(BAM)

日期: 2011-12-26 作者:xuyue1987 来源:TechTarget中国 英文

  在本篇当中,会介绍如何使用跟踪配置文件编辑器在业务流程和管道中配置数据集并使用事件流将数据写入到BAM当中。

  先简单介绍一下什么是BAM

  业务活动监视(BAM)是一套工具,用于管理聚合、警报和配置文件,以监视相关的业务度量(称为关键性能指标或KPI)。它能够提供对业务流程的端对端的可见性,还能够给出有关各种操作、流程和交易的状态和结果的精确信息,以便您可以找出问题所在并在企业内解决问题。

  BAM框架提供了一种用于监视各种不同业务应用程序,并显示SQL查询数据和聚合报告数据(OLAP)的实时方式,这种方式对于各种交易是一致的,并且非常简单。通过使用查询和聚合,您不仅可以得到在运行业务流程过程中出现的数据,还可以得到运行的业务流程的状态信息和其动态状态,而不论该业务是如何自动执行的。

  BAM将商业运营智慧和应用程序集成技术应用到自动流程中,以便基于直接来自运营活动知识的反馈不断改进这些自动流程。除了审核业务流程和业务流程管理系统外,BAM还可发送事件驱动的警报,这些警报可用于提示那些可能需要采取某些行动的业务的决策者做出相应调整。

  部署BAM基础架构

  在Excel中定义BAM观察模型的教程在网上有很多,所以在这里准备了一个已经定义好的现有的BAM观察模型,我们将用它从数据库中收集Order Processing活动所需要的数据。

  1. 首先来看一下这个已经定义好的BAM观察模型,它由三个部分组成,即BAM活动、BAM视图和BAM聚合。BAM活动定义里程碑和目标数据。BAM 视图基于向特定用户呈现信息的目标数据和里程碑来定义维度和度量值。BAM聚合是在视图中定义的信息的摘要。

BAM聚合

BAM聚合

  2. 通过定义文件部署BAM数据库基础架构。打开CMD命令提示符,改变当前路径至%BTSInstallPath%Tracking,并运行bm.exe工具来部署我们现有的BAM观察模型。

通过定义文件部署BAM数据库基础架构

  使用跟踪配置文件编辑器

  这里我们将使用跟踪配置文件编辑器来配置和应用跟踪配置文件,使用该文件来收集来自管道和业务流程当中的数据。

  1. 打开跟踪配置文件编辑器。开始->所有程序->Microsoft BizTalk Server 2010。在左侧面板当中,点击链接导入BAM活动定义并选择OrderProcessing。

打开跟踪配置文件编辑器

  2. 收集来自管道的数据。点击右上方的选择事件源下拉框,选择消息传输属性。展开Schema节点,将PortEndTime拖到左侧Party Identified节点下。

收集来自管道的数据

  3. 右键点击左侧的PortEndTime节点,选择设置端口映射,将OrderProcessing端口移动到右侧列中,点击确定。

右键点击左侧的PortEndTime节点

  4. 点击右上方的选择事件源下拉选框,点击消息传送负载,选择OrderProcessing程序集,双击之后选择OrderProcessing下的Order架构。展开Schema节点,将CustomerName元素拖拽到PartyName节点下。右键点击PartyName选择设置端口映射,将OrderProcessing移动到右侧列,点击确定。该步骤和上述步骤类似,不贴图了,给CSDN省点资源。

击右上方的选择事件源下拉选框,点击消息传送负载

  5. 收集来自业务流程中的数据。点击右上方的选择事件源下拉框,点击选择业务流程调度,从OrderProcessing程序集下选择Ordering业务流程,这时候能够看到我们之前在Visual Studio中设计的流程模板已经展现在了右侧窗口中,有点意思吧?将业务流程中Receive_ShipAcknowledgement接收控件拖到左侧OrderShipped节点下。拖拽接收控件Receive_SQLResponse到OrderProcessed节点下。

  6. 配置Continuation从管道到流程。右键点击左侧活动定义的根节点,选择新建Continuation并命名为Orch_,点击右上方选择事件源下拉框,点击选择消息上下文属性,并选择OrderProcessing.ActivityID属性,将该属性拖到我们刚才新建的Continuation下,然后右键选择设置端口映射,将OrderProcessing移动到右侧列上。之后,我们再新建一个ContinuationID并同样将其命名为Orch_,在这里用上面介绍的方法选择OrderProcessing.Ordering流程作为事件源,右键点击流程当中最上面的接收控件,选择上下文属性架构,找到OrderProcessing.ActivityID并将其拖拽到刚才创建的ContinuationID下。

配置Continuation从管道到流程

  7. 配置Continuation从Web service到管道。用上述方法继续进行配置,新建Continuation ID并命名为Pipe_。点击选择事件源,选择上下文属性将ActivityID属性拖拽到新建的Continuation并设置端口映射,同时将Order Processing端口移动到右侧列当中。

  8. 至此我们保存并应用这个跟踪配置文件,将该跟踪文件保存到指定目录下,将其命名为BAM.btt,在工具栏中,点击应用跟踪配置文件,在这我们将会遇到一个来自Pipe_的警告,因为现在没有合适的web service和它匹配,在后面我们会创建一个web service,因此在这里点击“是”,继续进行应用。

至此我们保存并应用这个跟踪配置文件

  将业务流程中的数据写入到BAM中

  在这里准备了一个接收订单 – 运输的业务流程,我们将对这个业务流程项目进行配置,把发货人的信息写入到BAM当中。

  1. 右键点击OrderProcessing项目并选择添加引用,找到Microsoft.BizTalk.Bam.XLANGs.dll并引用(该文件默认位置在BizTalk安装路径的Tracking文件夹下),打开Shipping业务流程,在接收控件ReceiveShipRequest和发送控件Send_ToChosenShipper之间插入一个表达式控件,并在该控件内写入如下代码。

以下是引用片段:
Microsoft.BizTalk.Bam.EventObservation.OrchestrationEventStream.UpdateActivity 
(“OrderProcessing”,System.String.Concat(“Orch_”,OrderShipRequest(OrderProcessing.ActivityID)),”Shipper”,”UPS”);

右键点击OrderProcessing项目并选择添加引用

  2. 在OrderProcessing业务流程当中,添加一个消息赋值的控件将其命名为AssignOrderID并将如下代码添加到表达式中。

以下是引用片段:
ShipRequest(OrderProcessing.ActivityID) = OrderMessage(OrderProcessing.ActivityID);

在OrderProcessing业务流程当中

  该表达式的作用是将ActivityID从订单消息中提取到运输请求的消息中。

  3. 配置好之后,我们重新生成并部署这个项目,在这里要注意,如果之前你已经部署了该项目,在更新这个项目的同时,你需要重新启动该项目所在的BizTalk主机实例。拿我们这个项目举例来说,上述步骤我已经对项目中的业务流程做了更改,那我需要右键业务流程所在的项目,选择属性,左侧找到部署选项,并将重新启动主机实例设置为True。这样当我们进行部署的时候,会自动为我们重新启动项目所在的主机实例。

配置好之后,我们重新生成并部署这个项目

  在Web service中添加关于BAM的引用

  1. 展开OrderProcessing Web service项目,在该项目中添加引用Microsoft.Bam.EventObservation.dll(该文件默认在BizTalk安装路径下的Tracking文件夹下)。添加另一个引用System.Configuration程序集。

  2. 打开App_Code文件夹中的OrderProcessing_Ordering_OrderReceivePort.asmx.cs文件,使用如下代码导入我们所需要的类库。

以下是引用片段:
using System; using Microsoft.BizTalk.Bam.EventObservation; using System.Configuration;

  在Web service中编写代码向BAM活动传送数据

  1. 在WebConfig文件中添加BizTalk MessageBox数据库连接字符串,打开web.config,在AppSettings节点下方添加如下代码

以下是引用片段:
view plaincopy to clipboardprint?
<appSettings>  
      APPLICATION SETTINGS  
        The  section is used to configure  
        application-specific configuration settings.  
        These can be fetched from within apps by calling  
        the “ConfigurationSettings.AppSettings(key)” property.  
      –>  
      add key=”$Setting.Name{1}quot; value=”$Setting.Value{1}quot; /–>  
      <add key=”ThrowDetailedError” value=”False”/>  
      <add key=”WsdlExtension.Enabled” value=”False”/>  
</appSettings>  
<connectionStrings>  
  <add name=”BTSMessageBox” connectionString=”database=BiztalkMsgBoxDb;Integrated Security=SSPI”/>  
</connectionStrings>  
  <appSettings>
        APPLICATION SETTINGS
          The  section is used to configure
          application-specific configuration settings.
          These can be fetched from within apps by calling
          the “ConfigurationSettings.AppSettings(key)” property.
        –>
        add key=”$Setting.Name{1}quot; value=”$Setting.Value{1}quot; /–>
        <add key=”ThrowDetailedError” value=”False”/>
        <add key=”WsdlExtension.Enabled” value=”False”/>
  </appSettings>
  <connectionStrings>
    <add name=”BTSMessageBox” connectionString=”database=BiztalkMsgBoxDb;Integrated Security=SSPI”/>
  </connectionStrings>

  2. 在config文件中配置好数据库连接字符串后,我们开始对Web service的后台代码进行修改,通过代码来创建一个向BAM写入数据的过程,其代码如下

以下是引用片段:
view plaincopy to clipboardprint?
//write BAM data   
Guid bamGuid = Guid.NewGuid();  
  
BufferedEventStream bamStream = new BufferedEventStream(  
ConfigurationManager.ConnectionStrings[“BTSMessageBox”].ConnectionString, 0);  
bamStream.BeginActivity(“OrderProcessing”, bamGuid.ToString());  
bamStream.UpdateActivity(“OrderProcessing”, bamGuid.ToString(), “OrderInitiated”, DateTime.UtcNow);  
bamStream.UpdateActivity(“OrderProcessing”, bamGuid.ToString(), “State”, part.ShipTo.StateOrProvince);  
//write BAM data
Guid bamGuid = Guid.NewGuid();
BufferedEventStream bamStream = new BufferedEventStream(
ConfigurationManager.ConnectionStrings[“BTSMessageBox”].ConnectionString, 0);
bamStream.BeginActivity(“OrderProcessing”, bamGuid.ToString());
bamStream.UpdateActivity(“OrderProcessing”, bamGuid.ToString(), “OrderInitiated”, DateTime.UtcNow);
bamStream.UpdateActivity(“OrderProcessing”, bamGuid.ToString(), “State”, part.ShipTo.StateOrProvince);

  3. 使用如下代码建立与BAM活动的通信,完成后关闭该通信并释放BAM流。

以下是引用片段:
view plaincopy to clipboardprint?
bamStream.EnableContinuation(“OrderProcessing”, bamGuid.ToString(), “Pipe_” + bamGuid.ToString());  
bamStream.EndActivity(“OrderProcessing”, bamGuid.ToString());  
bamStream.Flush();  
bamStream.EnableContinuation(“OrderProcessing”, bamGuid.ToString(), “Pipe_” + bamGuid.ToString());
bamStream.EndActivity(“OrderProcessing”, bamGuid.ToString());
bamStream.Flush();

  4. 生成一个BAM的GUID,将它作为一个新的参数添加到Invoke方法的最后一个参数,以便管道组件能够在外部获取到该值并且可以将它进行Promote。

以下是引用片段:
view plaincopy to clipboardprint?
<span style=”font-size:13px;”>// BizTalk invocation   
this.Invoke(“ReceiveOrder”,  
            invokeParams,   
            inParamInfos,   
            outParamInfos, 0,   
            bodyTypeAssemblyQualifiedName,   
            inHeaders,   
            inoutHeaders,   
            out inoutHeaderResponses,   
            out outHeaderResponses,   
            null, null, null,   
            out unknownHeaderResponses,   
            true, false,   
            bamGuid.ToString());  
</span>  
<span style=”font-size:13px;”>// BizTalk invocation
this.Invoke(“ReceiveOrder”,
            invokeParams, 
            inParamInfos, 
            outParamInfos, 0, 
            bodyTypeAssemblyQualifiedName, 
            inHeaders, 
            inoutHeaders, 
            out inoutHeaderResponses, 
            out outHeaderResponses, 
            null, null, null, 
            out unknownHeaderResponses, 
            true, false, 
            bamGuid.ToString());
</span>

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

相关推荐

  • 如何随时随地获取信息实时价值?

    业务活动监测(BAM)听起来足够简单。基本前提是完整的、均衡的实时信息或者接近实时的信息应该对任何企业的管理都要有非常高的有用性。

  • SOA治理:重要的定制化是什么样的?

    对于SOA治理来说,什么样的定制化是重要的,理由是什么?BAM?BI?CEP?还是其它?

  • 移动中间件服务技术手册

    移动中间件是连接不同的移动应用,程序和系统的一种软件。移动中间件实际上隐藏了多种复杂性:在移动环境下工作的复杂性,允许设备对设备的流畅交互的复杂性,移动与计算机集成的复杂性和移动应用开发的复杂性。和其它的中间件一样,移动中间件也是通过提供信息服务来使不同的应用之间进行通话的一个典型。随着多样化的平台和设备进入到移动空间,移到中间件已经变得越越重要。随之而来的结果就是,众多移动中间件厂商纷纷提供开发服务,以解决快速增长的移动硬件与移动软件市场。本技术手册将介绍移动开发对于面向服务架构的影响,以及未来移动中间件可以实现哪些功能,在这个过程中我们有哪些经验和技巧可以参照。

  • 实时分析:BPM未动 BAM先行

    BPM项目日甚一日地关注于实时信息的提供。根据Forrester的分析师Henry Peyret的说法,在实施实时BPM中,一个非常重要的因素就是业务活动监控(BAM)。