Biztalk 2006 R2的BAM,允许我们很方便的让既有系统和WCF-based 系统,通过配置或者API的方式。把程序运行过程中的关键数据库push给BAM。 允许业务人员通过BAM的portal 来集中察看,甚至做分析。接下来我们首先Enable Biztalk的BAM,然后定义一个简单的活动模型。然后通过程序APi,把数据喂给他。
首先要Enable BAM。 BAM跟BAS不一样,不依赖Sharepoint,它是基于asp.net 2.0的一个简单web应用。只要有IIS就可以,操作系统vista也可以。另外如果要enable OLAP的分析的话,需要安装SQLServer分析服务,还有集成服务(有几个package来partation大的活动表)。如果使用alert,需要安装Notification服务。
安装的时候,选择BAM Client( Excel add-in 来定义Activity,BAM Event,就是WCF/WF的interceptor模型,Alert 是基于SQL Notification server 的provider)
然后配置BAM,如果你需要OLAP聚合的话,选中下面的选项。他会在分析服务中建立数据库
安装好之后,你可以访问http://localhost/bam 看bam portal ,初始时空的,什么都没有。这个portal允许你自定义,关键选项都在C:\Program Files\Microsoft Biztalk Server\BAMPortal\web.config 里面。另外portal目录下面有连个访问数据库的web service。portal是对web service 的一个展现。
接下来你就可以用Excel 来定义一个模型。如果是2007的话,选择Office按钮->Excel Options->Add-in ->Go enable BAM add-in,然后你就看到add-in 选贤卡。
接下来我们创建一个简单的模型。定义一个模型,用户提交订单,到订单处理结束。每个订单有订单的数量,以及来自哪个州。
Activity的属性:BeginOrder, EndOrder,OrderAmount, State
新建一个Activity,叫做HelloBamActivity.
Ok之后,Activity就好了。相当于表建好了,然后我们顶一个一个视图(KPIview)
选中我们的视图
然后选中所有的Column
下一步,这里我们可以新建一个Alias,或者duration以及分组,跟写SQL语句一样。
我们定义一个duration,叫做订单处理时间。(processedTime),是结束时间-开始时间。统计一下订单处理了多久。
然后我们定义一个聚合,定义维度和测量列
新建一个维度,我们以州作为一个维度
然后定义测量指标
平均处理时间MProcessedTime,这里的聚合只能有这个五种方式。
就这样吧,一直Next。
然后我们选中我们的维度和测量值。Excel帮你生成了个模拟数据。
然后到Add-in, 点击右边的按钮,告诉我我需要一个分析的olap。
然后点击Export Xml,到处一个Activity的定义文件。放到C:\temp\HelloBamActivity.xml
至此,activity就定义好了。接下来我们把它部署到BAM的数据库中。bm.exe 是一个命令行工具,来管理BAM的模型。我们先部署一个activity模型。
C:\Program Files\Microsoft Biztalk Server\Tracking>BM.exe
如果部署提醒你Star Schema不存在的话,说明你没有配好分析服务。
这时候你打开Portal ,就可以看到你的视图了。只是没有数据而已,
这时候在数据库里面,BamPrimaryImport就建立了一些表和视图。主要是这个Activity的元数据,以及存放实例的表。
Select * from dbo.bam_Metadata_Activities
返回activity列表。
接下来我们就要用API,往里面写一些关键的业务数据, 比如订单的开始时间,结束时间,以及州和数量。
新建一个Console Application
添加对C:\Program Files\Microsoft Biztalk Server\Tracking\Microsoft.BizTalk.Bam.EventObservation.dll的引用。这个Assembly 包含直接操作BAM的API。
我们无非是begin一个Activity,更新他的一些属性,然后退出。
代码如下
//begin a Astivity
string dbConn="server=.;database=BamPrimaryImport;trusted_connection=yes";
DirectEventStream des = new DirectEventStream(dbConn, 5);
string activityId=Guid.NewGuid().ToString(); //Activity Id, can be any key
des.BeginActivity("HelloBamActivity",activityId);
Debugger.Break();
//update atribute
des.UpdateActivity("HelloBamActivity", activityId, "BeginOrder",
DateTime.Now,"Amount",300,"State","CA");
des.UpdateActivity("HelloBamActivity", activityId, "EndOrder",DateTime.Now.AddSeconds(10));
des.EndActivity("HelloBamActivity", activityId);
des.Flush();
//end activiity
Console.ReadLine();
如果要查看Trace的话,配置你的app.config,
<system.diagnostics>
<switches>
<add name="Microsoft.BizTalk.Bam.EventObservation" value="1"/>
</switches>
<trace autoflush="true">
<listeners>
<add name="console" type="System.Diagnostics.ConsoleTraceListener"></add>
</listeners>
</trace>
</system.diagnostics>
打开Portal就会看到数据了,多运行几次数据就可以看到更多的结果
Olap 聚合
如果看不到数据,检查一下你的集成服务的package是不是不能正常运行。
这样,我们可以通过了程序API的方式,把系统的业务数据push到BAM,下次讲一下怎么用配置的方式,让WCF 拦截数据到BAM