代码改变世界

《WF编程》系列之3 - 漫游工作流:Visual Studio 2005 扩展

2007-03-29 09:40  Windie Chai  阅读(...)  评论(...编辑  收藏

1.2.2 Visual Studio 2005 扩展

Microsoft提供了一个Visual Studio 2005 的工作流扩展(Microsoft Visual Studio 2005 Extensions for Windows Workflow)其中包含用于构建工作流的可视化设计器.

 

活动排列在工具箱里,可以拖拽到设计器中.我们还可以往工具箱里添加自定义活动.当选中设计器中的活动后,属性面板就会列出这个活动的属性和事件供我们配置.

 

1.2.2.1 Windows Workflow 和 XAML

WF设计器可以生成描述工作流的C#和Visual Basic代码,还可以读写XAML(可扩展应用程序标记,eXtensible Application Markuptensible Application Markup).XAML文件是有效的XML文件,它将定义性编程模型(declarative programming model)引入到Windows Worklow中.下面是设计器生成的XAML:

<SequentialWorkflowActivity 

  
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 

  xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/workflow" 

  x:Class
="HelloWorld.HellowWorldWorkflow" >

  
<CodeActivity 

    
x:Name="codeActivity1" 

    ExecuteCode
="codeActivity1_ExecuteCode_1" /> 

</SequentialWorkflowActivity>

这个XAML描述的工作流很简单,它只包括一个活动- CodeActivity,工作流引擎执行CodeActivity时CodeActivity会调用ExecuteCode属性指定的方法codeActivity1_ExecuteCode_1.

要知道,XAML并不只用于Windows Workflow.它同样出现在Windows Presentation Foundation (WPF).在WPF中, XAML用来构建富用户界面(不只是button和label等传统控件的组合,还包括动画效果和数据模板等).

XAML的一个重要能力是可以联合分部类中的代码.分部类是.NET 2.0中VB和C#的新功能,它允许类定义在多个文件中.上边的XAML会被转换成一个名为HelloWorldWorkflow的分布类.我们可以通过XAML根节点中的x:Name属性控制类的名称.如果想在这个类中添加成员,也可以定义一个同名的类,并用partial关键词修饰类名.

 

public partial class HelloWorldWorkflow:SequentialWorkflowActivity

    {

        
private void codeActivity1_ExecuteCode_1(object sender,EventArgs e)

        {

            
//  

        }

    }

在上面的代码中,我们把codeActivity1_ExecuteCode_1方法添加到与XAML生成的类相同的类(HelloWorldWorkflow)中.

1.2.2.2 WF 验证和调试

工作流设计器的另外一个工作是提供针对活动的验证机制.每个活动都可以定义其设计时和运行时的验证.设计器将为抛出验证错误的活动标记一个红色的惊叹号.例如, CodeActivity会一直显示红色惊叹号,直到我们设置了ExecuteCode属性(因为没有设置ExecuteCode属性的 CodeActivity是没有用的).

设计器还提供调试功能.我们可以在设计器中的活动上设置断点.当停止执行时,我们可以通过

调用堆栈(Call Stack)面板查看看工作流中之前执行的活动.

调试器支持步进(Step In), 步出(Step Out)和逐过程(Step Over)等命令.例如,Step In命令将转移到复合活动的第一个子活动,Step Over将跳过整个复合活动转移到下一个活动.

1.2.2.3 设计器外观

我们可以通过主题来定制工作流设计器的设计外观,主题定义了设计器的背景色,字体,线条和边框样式.我们可以为特定的活动指定颜色和边框样式.通过Visual Studio,我们可以创建新的主题,也可以修改存在的主题.

可以定制样式的功能并不只是为了设计器在Visual Studio中更加美观,WF设计器是一个组件,可以将其托管在我们的应用程序内部.托管设计器是个不错的创意,我们可以提供一些容易被商业人员理解的自定义活动(如SendOrderToKitchen),并让他们自己设计工作流.