WF 从入门到精通(第五章):workflow 跟踪

学习完本章,你将掌握:

1.workflow 的可选服务

2.创建一个事件跟踪数据库

3.激活事件跟踪服务

4.创建一个自定义跟踪

5.查看你的workflow 的跟踪信息

目前为止,我们看过workflow 的一些基本对象。我们通过活动创建workflow 任务,它们在执行时由 WorkflowInstance 对象进行管理。workflow 实例由WorkflowRuntime 编入队列并进行控制。但WF 不只是为我们提供了这 些对象,它也为我们提供了一些服务来和这些对象一起协同工作。


可插拔(可选)服务


工作流服务是一些附加的软件库,你的工作流能使用它来完成它们的的任务。有些服务是非必须可选的,如本章介绍的跟踪服务。而其它的服务需要你的工作流必须执行它。

一个可插拔服务是这样一个服务,它能像照菜单点菜一样被选中以执行特定任务。例如,有管理线程的服务、跟踪的服务、事务服务等等。你可选择那些适合你的工作流的服务。你甚至还能自己进行创建。

哪这些服务看起来像什么?他们能为我们做什么?表5-1 列出了可获取的基本服务,它很好地为你描述了这些可获取的服务的概念,并告诉你他们能做什么。

当中的大部分服务我们不会直接使用。我们普遍的用法是使用从这些基本服务派生出的服务。

表5-1 基本工作流服务

image.png

请记住这些是基类。我们使用的服务实际上从它们派生。例如,当我们运行一个工作流实例时,有时需为实例创建一个线程去使用。 DefaultWorkflowSchedulerService 正是做这个工作的,它使用WorkflowSchedulerService 作为它的基 类。但假如你想自己提供这个线程,你可使用ManualWorkflowSchedulerService 代替。在本章中我们将看到由

SqlTrackingService 提供的跟踪服务,它使用了TrackingService 作为它的基类。

“可插拔(可选)”一词部分来源于下面的情况:你可能考虑在任何时间上你都可能需要使用一个调度程序服务,运行时服务,入队和订阅(定时器)服务。但你还能在工作中进

一步添加持久化和跟踪服务,以及外部数据通信服务。


工作流跟踪


在 本章,我们将把重点放到跟踪服务上。其它服务将在其它章节进行介绍。WF 由一个主要的跟踪服务——SqlTrackingService 承载。但是假如你 需要的话,也有两个额外的服

务可用。它们是ConsoleTrackingService 和SimpleFileTrackingService,这二个 服务允许你把跟踪信息写到控制台窗口或者文件中而不是Microsoft SQL Server 数据库。在这里我们不会使用这两种服务,但你需要的话你可使用它们。


使用SqlTrackingService进行工作流事件跟踪


通 过添加一个跟踪服务(通常是SqlTrackingService)到工作流运行时中,你可跟踪你的工作流的处理过程。假如你有特定的跟踪需求,你也能创 建你自定义的跟踪事件。假如

捕获的事件为你提供了过多的跟踪数据,你也能创建跟踪配置文件来过滤这些跟踪数据。

当跟踪的事件激发时,WF 创建并管理跟踪记录。尽管你不用做这些工作,但你还是能容易地从WF 中直接访问这些跟踪记录。你要知道这些信息也被记录到数据库中,因此直接从数据库中检 索这些信息也是可能的。通常都在记录这些跟踪信息后的某个时间,使用一个象WorkflowMonitor 或你自己设计的工具之类的外部跟踪监控工具,来 查询这些跟踪信息。

表5-2 列出了在你的WF 事件跟踪中经常使用的对象,在本章我们将使用其中的一些。

假如你需要自定义你的工作流事件跟踪,那你应知道WF 为你提供了一个和跟踪相关对象的强大类库。


表5-2 事件跟踪对象

image.png

image.png

image.png

这些对象可考虑归为两个大类:跟踪数据检索和跟踪详细说明。跟踪检索对象,如SqlTrackingQuery,一旦跟踪数据被存储到数据库中,你可使用它们采集跟踪数据。跟踪详

细说明对象,如跟踪点和位置对象,允许你能在工作流代码中控制该跟踪什么。

像 跟踪点和位置对象之类的跟踪详细说明对象还可被归为三大组:活动事件、工作流事件和用户事件。和活动相关的跟踪对象,如 ActivityTrackingPoint 或ActivityTrackingLocation,用来记录相关联的活动的事件信息并保存到跟踪数据库中。这些事件包含如下这些:活动取消、未处理的异 常和执行的事件。工作流事件跟踪对象的工作方式和工作流相关的事件的工作方式相像(但工作流启动和停止,实例的创建、空闲和完成及其它相似的相关联的事件 除外)。最后是用户事件跟踪,它用在自定义你特有的工作流跟踪需求中指定你的工作流并完全依赖于你的工作流想怎样进行跟踪。在本章中当我们学习跟踪配置文 件时会看到它们中的几个。

跟踪记录通过批注加以装饰。批注是一些保存跟踪记录并被记录进跟踪数据库的字符串。

关联活动和关联工作流的跟踪记录有一个创建好的批注的集合,但你可以为用户关联事件的跟踪记录提供一个额外的批注。


在 WF 中跟踪这一术语和平常“跟踪”的概念没有什么不同。平常意义上的“跟踪”是一个有用的调试工具,在ASP.NET、像WPF 之类的.NET 技术及 Windows Forms 中都支持跟踪调试的能力。跟踪允许你过滤跟踪信息记录以满足你的需要,你既可只看异常的跟踪信息,也能看到整个跟踪栈。


WF 跟踪基于相似的概念,事实上是过滤。正如你可能想到的,关联活动事件和关联工作流事件将产生所有类型的跟踪记录,你或许能从中找到感兴趣的记录(如未处理的异常或空闲状态),你可以决定其它的事件不用进行跟踪。

为 过滤掉你不想进行跟踪的事件,你要创建一个跟踪配置文件。一个跟踪配置文件是一个XML 文档,它指明了跟踪的对象和要排除跟踪的对象。和跟踪不同,跟踪配 置文件指明哪些东西要写入跟踪数据库,而不是指明以后哪些东西能被查看到。假如你排除了一些事件,这些排除的事件就不会向数据库里写任何东西。和跟踪的另 一个不同之处是,跟踪配置文件的XML 文档也被记录进跟踪数据库,当执行工作流时被恢复。换句话说,跟踪记录了指定的要去跟踪的任何东西,但不进行跟踪信 息归类。


设置SQL Server进行跟踪


尽 管你可创建自定义的跟踪服务来把跟踪数据记录进各种存储中(如消息队列或数据文件),但本章,我们将把注意力放到SQL Server 2005 数据库上,WF 有能力把事件数据记录到SQL Server 2005 数据库中。WF 为使用SQL Server 2005 提供了内置的创建支持。

我们先在SQL Server Management Studio(或者Express 版本)中创建一个新的数据库。

然后需运行一些由WinFX 组件提供的SQL 脚本,这些脚本将创建数据库角色、表和视图、 必须的存储过程以和你的工作流进行交互。我们就来通过创建一个新数据库并运行一些准备好的脚本来开始吧,然后我们将使用WF 跟踪服务记录下跟踪数据并写入 数据库。


备注:我在下面的步骤中使用SQL Server Express,但这些步骤对于其它版本的SQL

Server 2005 同样适用。

创建一个SQL Server 2005跟踪数据库

1.启动SQL Server Management Studio,连接数据库引擎。

image.png

2.在数据库节点上单击右键激活右键快捷菜单,选择“新数据库”。

3.在新数据库对话框中输入“WorkflowTracking”作为数据库的名称字段,点击确定。

4. 下一步将执行WF 为设置跟踪所提供的脚本(这会创建表、视图以及工作流跟踪的角色)。这些脚本的位置 在<%WINDIR%>\Microsoft.NET\Framework\3.0\Windows WorkflowFoundation\SQL\ZH-CHS,在这里<%WINDIR%>是指你的Windows 目录(通常是C:\Widows)。

在 SQL Server Management Studio 打开Tracking_Schema.sql 文件。

5.SQL Server Management Studio 会在一个新窗口中导入文件中的脚本,但在我们运行脚本前,我们需指明在哪个数据库中运行这些脚本,因此我们要选择WorkflowTracking 数据库。

6.点击工具栏上的执行按钮执行这些脚本。

7.重复4-6 步执行Tracking_Logic.sql 脚本。这将在数据库中创建必须的存储过程。


我们现在就创建了一个将记录跟踪信息的数据库,但怎样得到已记录的信息呢?什么组件进行这方面的工作呢?让我们看看!


使用SqlTrackingServer服务


在工作流跟踪数据库设置好后,现在就是实际使用它的时候了。我们先创建一个新的工作流并看看我们怎样去跟踪事件。我们将创建一个稍微复杂一些的工作流,里面有几个事件

可以提供给我们去进行跟踪。在我们创建一个原始的工作流后,我们将增加必要的跟踪代码。


创建一个新工作流并进行跟踪


1. 为更方便些,我已创建了两个版本的样例应用程序。Workflow 包含两个不同版本的应用程序:一个是不完全版本,一个是完全版本。完全版本已完全编写完 成并可直接运行,

非完全版本可方便你进行修改,并按步骤完成相应练习。你可通过本章后面的下载链接下载这些项目文件。

2.下载本章源代码,打开TrackedWorkflow 解决方案,像第三章中相应步骤一样创建一个顺序工作流库的项目,名称为TrackedWorkflow。

3.在你完成以上步骤后,Visual Studio 会打开工作流设计器以便进行编辑。

4.从工具箱中拖动一个IfElse 活动到设计器界面上。如下图:

image.png

5.单击左边的ifElseBranchActivity1 分支,激活它的属性使其在Visual Studio 中的属性窗口中显示。

6.寻找 ifElseBranchActivity1 的 Condition 属性。点击下拉列表框上向下的箭头打开下拉列表框,选择其中的代码条件节点。如下图:

image.png

7.Condition 属性现在会在它的左边呈现出一个“+”号。单击这个+号展开其属性网格,这会暴露出Condition 属性的Condition 名称字段。在编辑框中,输 入QueryDelay。我们将使用这个方法来决定我们将执行IfElse 活动的那个分支。

8.下一步我们在左边的分支(这个分支在条件值为True 时执行)添加一些活动。首先,从工具箱中拖拽一个Code 活动到IfElse 的左边分支即ifElseBranchActivity1 上。

image.png

9. 你看到的惊叹号标记的意思在前面的章节我已描述过,意思是我们还有工作要做。在这里,它指出我们需添加一个方法,Code 活动添加到工作流中执行时将调用 这个方法。在

Visual Studio 的属性面板上,定位到 ExecuteCode 属性,在该编辑框中输入PreDelayMessage。

image.png

10. 也许你要看看我要做什么……其实就是添加一个延时工作流,在第三章我们已经创建过。就像在第三章做的一样,再拖拽一个Delay 活动和另一个Code 活动 进

ifElseBranchActivity1 中,然后设置它们的属性。Delay 活动延时10 秒(00:00:10),第二个Code 活动执行一个名称 为PostDelayMessage 的方法。完成这些步骤后的设计器界面如下图所示:

image.png

11. 在设计器中的工作完成后,我们就来添加相应代码。在解决方案资源管理器中的Workflow1.cs 文件上单击右键,选择查看代码。然后在项目中添加对 System.Windows.Forms的引用,然后在Workflow1.cs 文件的顶部声明和其对应的下面的名称空间。

using System.Windows.Forms;

12. 你查看这个文件,你会看到Visual Studio 为你添加的作为活动属性的三个事件处理程序:PreDelayMessage、PostDelayMessage 和QueryDelay。和 第三章类似,在Code 活动中添加消息对话框,以使应用程序能在工作流执行时通知你。对于PreDelayMessage,添加下面的代码:

MessageBox.Show("Pre-delay code is being executed.");

对于PostDelayMessage,添加下面的代码:

MessageBox.Show("Post-delay code is being executed.");

13.我们些许更感兴趣的是在QueryDelay 中添加的以下代码:

e.Result = false; // 假定我们不延时
if (MessageBox.Show("Okay to execute delay in workflow processing?",
"Query Delay",
MessageBoxButtons.YesNo,
MessageBoxIcon.Question) == DialogResult.Yes)
{
    // 需进行延时处理
    e.Result = true;
    // 显示消息
    Console.WriteLine("Delay path taken ");
} // if
else
{
    // 显示消息
    Console.WriteLine("Delay path NOT taken ");
} // else

14.完成上述步骤后,我们需要为我们的WorkflowTracker 主应用程序添加对工作流项目TrackedWorkflow 的项目引用,步骤略。

15.在WorkflowTracker 项目中打开Program.cs 文件,查找下面的代码:

Console.WriteLine("Waiting for workflow completion.");

16.为创建一个Workflow 实例,在上述代码下添加下面的代码:

// 创建工作流实例。
WorkflowInstance instance =
workflowRuntime.CreateWorkflow(typeof(TrackedWorkflow.Workflow1));
// 启动工作流实例。
instance.Start();

17.编译解决方案,纠正任何编译错误。

18.按下F5(或Ctrl+F5)执行这个应用程序,你将看到以下控制台的输出结果:

image.png

我们现在就有了一个基本的工作流,我们可使用它去体验WF 的跟踪能力。我们现在就回去添加我们需要的代码以执行跟踪。


为我们的工作流添加SqlTrackingService

1.WF 由活动和工作流事件 跟踪能力承载,因此我们不需为跟踪事件做太多工作。尽管如此,我们仍然需在主程序文件中添加一些逻辑。首先,要为WorkflowTracker 应用程序 添加System.Configuration 引用,我们需要它来把访问数据库的连接字符串存储到应用程序的配置文件里。

2.下一步,为 WorkflowTracker 应用程序添加一个应用程序配置文件。方法是在VisualStudio 的解决方案管理器中的WorkflowTracker 树节点上单击右键,依次选择添加、新建项。

在呈现的添加新项对话框中选择应用程序配置文 件,点击确定。这就为我们的应用程序添加了一个新的app.config 文件。参见下图:

image.png

3.打开app.config 文件,在Configuration 的开始标记和结束标记间插入下面的内容:

<connectionStrings>
<add name="TrackingDatabase" connectionString="Data Source=(local)\SQLEXPRESS;Initial Catalo
g=WorkflowTracking;Integrated Security=True;"/>
</connectionStrings>

备注:上面的连接字符串可能和你实际应用中有所不同,你需要灵活进行配置。

4.点击WorkflowTracker 项目中的WorkflowFactory.cs 文件,查看其代码。

5.在该文件中声明以下名称空间(需添加 System.Configuration 引用):

using System.Workflow.Runtime.Tracking;

using System.Configuration;

6. 在WorkflowFactory.cs 文件中,找到我们创建WorkflowRuntime 实例的地方,在这里我们需要为 WorkflowRuntime 引入SqlTrackingService。在GetWorkflowRuntime 方法中添加下面的代码:

String conn = ConfigurationManager.ConnectionStrings["TrackingDatabase"].ConnectionString;
_workflowRuntime.AddService(new SqlTrackingService(conn));

完成了上述步骤,我们就添加了实际中要去执行跟踪的代码(稍后,我们会添加更多的代码来显示跟踪结果)。编译该解决方案,然后按F5 或Ctrl+F5 执行它。

备注:假如程序中出现 ArgumentException 异常,最可能的原因是运行时没有访问数据库的权限。

假如工作流运行正常,你可在WorkflowTracking 数据库的ActivityInstance 表中看到


下图5-1 中显示的结果。

image.png

图5-1 表ActivityInstance 中的记录

检索来自于工作流的跟踪记录

1.打开WorkflowTracker 项目中的 Program.cs 文件。

2.在文件中声明以下名称空间:

using System.Configuration;

using System.Workflow.Runtime.Tracking;

3.在Main 方法中,找到下面的代码:

waitHandle.WaitOne();

4.在上面的代码下添加以下的的代码:

ShowWorkflowTrackingEvents(instance.InstanceId);

ShowActivityTrackingEvents(instance.InstanceId);

5.上面我们调用的一组方法并不存在,我们需要添加它们。在 Program 类中添加这些方

法:

Code

在 最后一步中忽然冒出大量的代码,但实际上并不太复杂。我们首先创建了一个SqlTrackingQuery 的实例,为它提供了我们曾提供给 SqlTrackingService 的相同的连接字

符串。然后我们通过当前工作流实例的ID(一个Guid)标识,从数据库中查询该实例的跟踪信息。该 查询由SqlTrackingService.TryGetWorkflow 执行。假如数据库中有我们指定的工作流的跟踪信息,我们循环获取跟踪记录(查 询返回给我们的是一个workflowTrackingRecord 对象的集合),从中提取我们感兴趣的信息。假如查询结果中没有

记录,也就没有跟踪信息 写到控制台窗口中。最终的屏幕的输出结果如图5-2 所示(在调试模式下运行代码的话,你或许需要设置一个断点才能看到下图的输出结果)。


image.png


跟踪用户事件


SqlTrackingService 是WF 的一部分,它具有跟踪事件的能力。也就是说,它能跟踪活动和工作流激发的标准事件。但由你生成的事件呢?我们又如何跟踪它们呢?

Activity 活动支持一个名叫TrackData 的方法,TrackData 有两个重载版本:一个版本接受一个要存储进跟踪数据库中的对象,另一个版本接受一个字符串类型的键及一个要存储

进跟踪数据库中的对象。

假如你执行TrackData 并为跟踪传入通常是字符串类型的数据,那这些信息将作为用户事件数据存入跟踪数据库。

检索来自你的工作流的跟踪记录

1.打开WorkflowTracker 项目中的Workflow1.cs 文件。

2.找到我们在创建工作流时添加的PreDelayMessage 方法和PostDelayMessage 方法。

3.在名为PreDelayMessage 的方法内的显示信息对话框的代码下面添加以下代码:

this.TrackData("Delay commencing");

4.同样,在名为PostDelayMessage 的方法内的显示信息对话框的代码下面添加以下代码:

this.TrackData("Delay completed");

5.编译并执行。

现在打开WorkflowTracking 数据库中的UserEvent 表,里面有两行,我们在工作流中每调用TrackData 一次就产生一条记录,表中部分内容如图5-3 所示。


image.png

图5-3 UserEvent 表中显示的调用TrackData 的结果


创建自定义跟踪配置文件


在本章我已谈到过跟踪配置文件,但当时并未详细深入,在这节我将深入了解它的细节。

你 可回忆一下,跟踪配置文件用来限制WF 跟踪架构将存储到跟踪数据库中的信息数量。

跟踪配置文件不仅仅是一个XML 文档,也用来规定一个给定的工作流的跟踪 将包含和排除的东西。但在代码中完成这些事(比手动添加一个XML 的跟踪配置文件)更加容易。这里有一个TrackingProfile 对象及在表5-2 中看到的其余对象可用,它们用来创建这个XML 文档。

有了这个TrackingProfile 对象,你或许会自然的想到这也是一个有用的 XML 序列化器,可用来把TrackingProfile 对象转换成你需要的XML 文档并存入数据库,事实上,这是

TrackingProfileSerializer。WF 并不内在支持把XML 信息写入数据库,但你可使用类型化的ADO.NET 技术及跟踪数据库中提 供的存储过程容易地来完成这一工作。

假如你回去看看表5-2,你会找到一些带有“location”和“point”名称的对象,它们分别和activity、workflow 和user 事件相对应。我们在这时谈到“location”和“point”

究竟意味着什么呢?

在本章我已谈到过跟踪配置文件,但当时并未详细深入,在这节我将深入了解它的细节。

其实,“location”指在你的工作流中活动、工作流或用户相关的事件发生时的一个指定的位置。Locations 描述了要跟踪的事件。使用一个location 对象,你可更精确地指定你

想跟踪及排除的的事件。

跟踪points 收集locations,它们能在你的工作流中的一个或多个地方触发跟踪信息。

你可把跟踪点当成一个感兴趣的点来考虑。它能在你的工作流代码中跨越不同的位置。在你为跟踪点指定条件和位置后,在跟踪时它视情况可能触发也可能不触发。

为什么谈及所有这些呢?因为当我们建立一个跟踪配置文件时,你真正要做的工作是把跟踪点和位置添加到profile 对象中,以作为跟踪事件的过滤器去使用。


创建一个新的跟踪配置文件

1.打开WorkflowTracker 项目中的Program.cs 文件。

2.我们将加入的代码并不一定就难于理解,只是它相当大。首先有必要声明以下一些名称空间:

using System.Workflow.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Globalization;
using System.IO;

3.上述步骤后,我们去找到Main 方法。在该方法中创建工作流的代码前添加以下代码:

TrackingProfile profile = CreateProfile();
StoreProfile(profile, ConfigurationManager.ConnectionStrings["TrackingDatabase"].ConnectionStrin
g);

4.我们在上面的代码中调用了两个方法,我们还需要在Program 类中添加它们。在Program 类中添加CreateProfile 方法的代码如下:

CreateProfile 方法

5.同样,添加StoreProfile 方法:

StoreProfile 方法

6.假如你在现在执行本程序,CreateProfile 方法会创建的配置文件并把它写入数据库。

假如你再仔细地看看步骤4 中的代码,你会 注意到仅仅只跟踪了很少数的活动事件和工作流事件。因此,你可能会期望在工作台窗口中将由ShowActivityTrackingEvents 和

ShowWorkflowTrackingEvents 输出很少的几行信息,但实际上,正确的结果如下图5-4(可把它和图5-2 比较)。


image.png

图5-4 WorkflowTracker 跟踪数据的屏幕输出结果


CreateProfile 方法创建了一个新的TrackingProfile 并添加了一个活动跟踪点和工作流跟踪点。每个跟踪点都有一个单一的跟踪位置,它定义了要跟踪哪些事件, 因此我们只能

看到来自活动的Executing 事件和来自工作流实例的Started 事件和Idle 事件。

而StoreProfile 方法,它把跟踪配置文件序列化成XML 形式,然后用典型的ADO.NET 技术把这个XML 存入跟踪数据库。试图更新一个跟踪配置文件的同一版本会被认为是一种错误,因此会抛出一个异常。


用WorkflowMonitor查看跟踪信息


假 如有人想出一个现成的用来监测工作流事件的工具那不是很好?就像我们本章前面一样,能把跟踪记录输出是很棒的事,但用一个好的图形用户界面来做这个工作将 是更加棒

的一件事。事实上,我们是幸运的!当我们加载WF 时,你也可加载了一套示例,里面包含的是一个叫做WorkflowMonitor 的应用程序。在 这里我们需要去做的是编译这个应用程序。


编译WorkflowMonitor

1.WorkflowMonitor 是工作流示例库的一部分,它由Windows SDK 承载。把WFSample.zip文件复制到本章解决方案的目录下并进行解压。WFSamples.zip 文件在下面的位置可找到(声明:本人未在 下面的目录找到该文件,但从微软官方网站上可进行下载,本章的源代码中也提供有WorkflowMonitor 的源代码):

C:\Program Files\Microsoft SDKs\Windows\v6.0\Samples\WFSamples.zip

2.在Visual Studio 中打开WorkflowMonitor.sln 文件。

3.编译并生成该应用程序。


这 个应用程序编译时没有错误,然后你却不能执行它。当SqlTrackingService 把跟踪记录写进跟踪数据库时,工作流对象的数据类型就是记录的一 批信息中的一条。假如支持你

的工作流的类型没有在全局Assembly Cache 中,WorkflowMonitor 就不能在视图设计器中加载你的工作流对象。因此,对于TrackedWorkflow 来说,你必须把你的工 作流组件放到全局Assembly Cache 中或者把TrackedWorkflow 中的DLL 文件放到和WorkflowMonitor 的可执行文件(即 WorkflowMonitor.exe)的相同的目录下。在本例中,更容易的方法是复制WorkflowMonitor.exe 文件到我们的工作流的可 执行代码的相同目录下。


执行WorkflowMonitor

1.复制WorkflowMonitor.exe 可执行文件到WorkflowTracker 解决方案目录中的bin\Debug 子目录下(在此生成的是调试版本的应用程序)。

2.双击WorkflowMonitor.exe 文件执行该应用程序。

3.WorkflowMonitor 把配置信息存储在WorkflowMonitor.config 配置文件中,可在“Application.LocalUserAppDataPath” 找到。(假如你正运行SQL Server Express,当

简单地单击确定,在WorkflowMonitor 试图连接该数据库时你可能会看到一条错误信息。)

因为这可能是在你的系统上运行 WorkflowMonitor 的第一时间,配置文件还未存在。

WorkflowMonitor 已考虑这些并立即显示一个设置对话框。如下图所示:

image.png

4.你可通过这个设置来修改跟踪数据库所在的主机名、跟踪数据库名、轮询周期(默认是5 秒)等。现在,我们真正要做的是设置服务器的名称和数据库的名称,在你输入这些值

后点击确定。

5. 然后WorkflowMonitor 监控器建立一个工作数据库的链接,并读出找到的跟踪记录。假如记录中有类型信息,它将在设计器中显示找到的工作流。在 本例中,唯一能找到的工作流是TrackedWorkflow,但在你创建的工作流越多,显示的也将越多。WorkflowMonitor 程序的用户界面 如下图所示:

image.png


源码下载

http://files.cnblogs.com/gyche/WF%20Step%20by%20Step/WorkflowTracker.rar


--------------------- 

作者:hackpig
来源:
www.skcircle.com
版权声明:本文为博主原创文章,转载请附上博文链接!

本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2024年4月    »
1234567
891011121314
15161718192021
22232425262728
2930
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864