首页 > 编程开发 > Objective-C编程 >
-
WF编程系列之漫游工作流Visual Studio 2005 扩展
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关键词修饰类名.
publicpartialclassHelloWorldWorkflow:SequentialWorkflowActivity
{
privatevoidcodeActivity1_ExecuteCode_1(objectsender,EventArgse)
{
//
}
}
在上面的代码中,我们把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),并让他们自己设计工作流.